Как выполнить фильтрацию доменов в Linux?

Как выполнить фильтрацию доменов в Linux?

Желательно что-то похожее на iptables. По сути, я хочу сделать фильтрацию доменов/белые списки/черные списки, как я бы сделал с IP-адресами в iptables. Есть ли какие-либо рекомендации, как это сделать?

решение1

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

# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP

С другого хоста внутри локальной сети:

# host www.facebook.com
www.facebook.com A record not found, try again

По сути, вы говорите каждому пакету dns( udp/53), который имеет шестнадцатеричную строку www.facebook.com tobe dropped. Обратите внимание, что это приведет к отказу от разрешения имен, а не самого http-трафика.

Шестнадцатеричные числа, разделенные вертикальными чертами ( |03|www|08|facebook|03|com), представляют .символ точки в запросах DNS. Он скажет, сколько из следующих символов будут представлять каждую частьПолное доменное имя(хост, домен, домен верхнего уровня) Пример:

хозяин:mail.google.com

шестнадцатеричное представление:04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

"Визуальное представление:04mail06google03com

Получение пакета с помощью tcpdump:

# tcpdump -i eth0 -X dst port 53

15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
        0x0000:  4500 003d 779a 4000 4011 b390 c949 4742  E..=w.@[email protected]
        0x0010:  d8ef 260a 8424 0035 0029 0fc0 4092 0000  ..&..$.5.)..@...
        0x0020:  0001 0000 0000 0000 046d 6169 6c06 676f  .........mail.go
        0x0030:  6f67 6c65 0363 6f6d 0000 0100 01         ogle.com.....

Но помни:

  • Если вы пытаетесь фильтровать более специфичный трафик, такой как smtp, ftp или http, прокси-сервер этого протокола должен подойти лучше.
  • Вы "перехватываете" DNS-запросы, а не блокируете домен. Пользователи не настолько тупы ;)

Источники:Здесьиздесь

решение2

Возможно, ответ на ваш вопрос уже запоздал, но недавно мне нужно было решить похожую проблему и гугл привел меня сюда

После безуспешных поисков я написал небольшую утилиту на языке C, которая перехватывает DNS-ответы, сравнивает доменное имя в нем с заданным регулярным выражением и выводит список совпавших IP-адресов. Вот она:https://github.com/vmxdev/sidmat/

Вам не нужно настраивать собственный DNS-сервер, утилита может перехватывать DNS-ответы с любого сервера.

Например, чтобы увидеть IP-адреса facebook.com (и поддоменов), которые разрешены прямо сейчас, вы можете запустить

# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...

где eth0 — сетевой интерфейс на маршрутизаторе (или где проходят ответы DNS)

Вы можете легко интегрировать его с iptables (или iptables с ipset)

Но:

  • Утилита очень проста. Она не выполняет много проверок, поэтому злоумышленник может ее обмануть
  • этот метод бесполезен, если пользователи не используют DNS для разрешения имен.

решение3

Для внесения в черный список самый простой способ, вероятно, использоватьdnsmasq

Установитьdnsmasq

$ sudo apt-get install dnsmasq

и добавьте эту строку в/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Это заблокируетfacebook.comи все его поддомены.

Примечание: Для Ubuntu см.эта почта.

решение4

При запуске локального кэширования bind9 это часто реализуется с помощьюdummy-block

zone "facebook.com" { type master; file "dummy-block"; };

и dummy-blockфайл:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
*       IN      A       127.0.0.1   

Смотрите также:

Запуск BIND9 и ISC-DHCPс facebook.comпримером.

Простой подход на основе DNS для блокировки веб-рекламы

Связанный контент