Могу ли я создать интернет-белый список, используя только пакеты, доступные в чистой установке Ubuntu? (возможно, /etc/hosts.allow?)

Вопрос или проблема

Я хочу, чтобы у меня не было возможности заходить на любые сайты, если они не находятся в белом списке, и я бы предпочел не использовать что-то вроде Privoxy, могу ли я сделать это с Ubuntu?

Я думаю, что могу использовать /etc/hosts, /etc/hosts.allow и/или /etc/hosts.deny. Моя первая мысль заключается в том, чтобы как-то заблокировать все с помощью hosts.deny, а затем создать белый список в hosts.allow. Это возможно? Если да, то как я могу определить что-то вроде “все сайты направляются на localhost” в hosts.deny, а затем “кроме этих сайтов” в hosts.allow?

Чтобы заблокировать все сайты с помощью hosts.deny, вам нужно вставить ALL: ALL в файл /etc/hosts.deny.

Но есть и более лучшие способы сделать это, например:

Попробуйте использовать dnsmasq. Я обнаружил, что этот метод работает лучше на большем количестве версий установок Ubuntu/Debian, чем более прямые методы. Любой другой метод, который я использовал, всегда приводил к тому, что ОС как-то отменяла (перекрывала или изменяла свое поведение в последующих версиях) мои изменения, особенно при редактировании предустановленных файлов сетевой настройки ОС.

Установите с помощью – sudo apt-get install dnsmasq

Вам придется остановить Network Manager от записи в /etc/resolv.conf (это не было необходимо в более старых версиях Ubuntu). Если вы этого не сделаете, dnsmasq не будет управлять DNS – настройки Network Manager будут.

Откройте /etc/NetworkManager/conf.d/disable-resolv-conf.conf в вашем любимом текстовом редакторе. Используйте touch /etc/NetworkManager/conf.d/disable-resolv-conf.conf, если его не существует.

Добавьте эти строки:

[main]
# Не записывать /etc/resolv.conf, но записывать /run/NetworkManager/resolv.conf
dns=none

Откройте /etc/dnsmasq.conf в вашем текстовом редакторе и добавьте строку, подобную следующей, для каждого домена, который вы хотите внести в белый список.

server=/domain.com/8.8.8.8

Это говорит dnsmasq использовать сервер имен домена по IP-адресу 8.8.8.8 (который является сервером имен домена Google) для разрешения всех DNS-запросов к domain.com. Вы можете изменить IP-адрес DNS на любой другой, но 8.8.8.8 будет работать.

Перезапустите dnsmasq с помощью sudo service dnsmasq restart каждый раз, когда вы вносите изменения в resolv.conf, и теперь вы не должны разрешать никакие DNS-запросы на вашем компьютере, кроме тех, которые вы внесли в свой белый список dnsmasq.

Просто не забудьте также проверить вкладку Сеть в ваших Инструментах разработчика (в Firefox это Дополнительные инструменты -> Инструменты разработчика или щелкните правой кнопкой мыши на открытой странице и выберите Просмотреть). Вам может потребоваться перезагрузить страницу, чтобы увидеть результаты на вкладке Сеть. Любые домены, которые не загружаются, должны отображаться красным. Вам придется решить, являются ли эти домены необходимыми для добавления в ваш белый список (например, скрипты веб-сайта, изображения, сторонние инструменты и т.д. могут функционировать с другого домена).

Ответ или решение

Создание белого списка для доступа к интернет-ресурсам на чистой установке Ubuntu является непростой задачей, особенно если использовать только встроенные инструменты, такие как /etc/hosts.allow и /etc/hosts.deny. Давайте рассмотрим, возможно ли это, а также альтернативные подходы, которые могут быть более эффективными.

Основные ограничения /etc/hosts.allow и /etc/hosts.deny

Файлы /etc/hosts.allow и /etc/hosts.deny предназначены для управления доступом к службам, основанным на протоколе TCP Wrapper. Эти файлы работают на уровне приложений, и они не предназначены для контроля доступа к интернет-сайтам, таким как HTTP или HTTPS. Основные моменты:

  • /etc/hosts.deny: Вы можете указать ALL: ALL, чтобы заблокировать доступ для всех служб. Однако это не будет иметь никакого эффекта на HTTP/HTTPS-трафик.
  • /etc/hosts.allow: Вы можете попробовать указать разрешенные службы, но это не даст контроля над интернет-доменами, которые вы хотите заблокировать.

Таким образом, использование этих файлов не приведет к создаваемому эффекту «белого списка» для веб-сайтов.

Рекомендуется рассмотреть более подходящие инструменты:

1. Использование iptables

iptables — это мощный инструмент для настройки правил межсетевого экрана (Firewall), который может быть использован для блокировки или разрешения трафика на основе IP-адресов или портов. Вы можете использовать его следующим образом:

  • Заблокируйте весь исходящий трафик:

    sudo iptables -A OUTPUT -j DROP
  • Затем добавьте правила для разрешения трафика к определенным сайтам, например:

    sudo iptables -A OUTPUT -p tcp -d example.com --dport 80 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d example.com --dport 443 -j ACCEPT

При этом вам нужно будет настроить iptables для добавления всех IP-адресов, связанных с вашими разрешенными доменами.

2. Использование dnsmasq

Другим более простым и эффективным решением является dnsmasq, легковесный DNS и DHCP-сервер. Используя dnsmasq, вы можете создать белый список для разрешенных доменов следующим образом:

  • Установите dnsmasq:

    sudo apt-get install dnsmasq
  • Отключите менеджер сети от управления DNS:

    echo -e "[main]\ndns=none" | sudo tee /etc/NetworkManager/conf.d/disable-resolv-conf.conf
  • Настройте dnsmasq для работы с разрешенными доменами. В файле /etc/dnsmasq.conf добавьте:

    server=/example.com/8.8.8.8
  • Перезапустите dnsmasq:

    sudo service dnsmasq restart

Теперь dnsmasq будет обрабатывать DNS-запросы только для указанных доменов, что позволит создать белый список.

Заключение

Создание полноценной системы белого списка исключительно с использованием /etc/hosts.allow и /etc/hosts.deny не представляется возможным. Лучшие альтернативы, такие как использование iptables и dnsmasq, обеспечивают более гибкие и эффективные способы управления доступом к интернет-ресурсам. Выбор метода зависит от ваших конкретных потребностей и требований к безопасности.

Оцените материал
Добавить комментарий

Капча загружается...