Вопрос или проблема
Я хочу, чтобы у меня не было возможности заходить на любые сайты, если они не находятся в белом списке, и я бы предпочел не использовать что-то вроде 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
.
Но есть и более лучшие способы сделать это, например:
-
Использовать брандмауэр, такой как
iptables
, с помощью брандмауэра вы можете заблокировать весь HTTP, HTTPS и любой другой трафик, который хотите, и разрешить его для некоторых специальных IP, доменов и т.д.Читайте это: https://unix.stackexchange.com/questions/212233/iptables-to-block-all-websites
-
Использовать что-то вроде
dnsmasq
:Читайте это: https://www.linuxquestions.org/questions/linux-networking-3/how-to-block-all-websites-except-2-a-667350/
Попробуйте использовать 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
, обеспечивают более гибкие и эффективные способы управления доступом к интернет-ресурсам. Выбор метода зависит от ваших конкретных потребностей и требований к безопасности.