Желательно что-то похожее на iptables. По сути, я хочу сделать домен фильтрации / белый список / черный список, как я бы с IP-адреса в iptables. Есть какие-нибудь рекомендации, как это сделать?
что / почему вы пытаетесь заблокировать? Вы пытаетесь фильтровать исходящий / входящий HTTP или SMTP или NTP? Для разных сценариев могут использоваться разные инструменты.
@josten в идеале вы должны использовать HTTP-прокси, такой как Squid . Блокирование доменных имен в iptablesможет быть сделано, но это может быть рискованным
Creek
Ответы:
8
Если вы отбрасываете трафик, используя разрешение имен с помощью правил iptables, имена будут разрешаться при создании этого правила. Если что-то изменится, ваше правило больше не будет действовать. Это может быть решением (а не красивым ...):
# host www.facebook.com
www.facebook.com A record not found, try again
По сути, вы говорите каждому DNS-пакету ( udp/53) с шестнадцатеричной строкой www.facebook.com toотбрасывания. Обратите внимание, что при этом пропадет разрешение имен, а не сам трафик http.
Шестнадцатеричные числа, разделенные с помощью pipe ( |03|www|08|facebook|03|com), представляют собой .символ точки на запросах DNS. В нем будет указано, сколько из следующих символов будет представлять каждую часть полного доменного имени (хост, домен, домен верхнего уровня). Пример:
Может быть, ответ на ваш вопрос слишком поздно, но недавно мне нужно было решить аналогичную проблему, и Google привел меня сюда
После неудачных поисков я написал небольшую утилиту на C, которая перехватывает DNS-ответы, сравнивает доменное имя в нем с заданным регулярным выражением и перечисляет совпадающие IP-адреса. Вот оно: https://github.com/vmxdev/sidmat/
Вам не нужно настраивать собственный DNS-сервер, утилита может перехватывать ответы DNS с любого сервера.
Например, чтобы увидеть IP-адреса facebook.com (и поддоменов), которые разрешены прямо сейчас, вы можете запустить
Если выполняется локальное кэширование 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
iptables
может быть сделано, но это может быть рискованнымОтветы:
Если вы отбрасываете трафик, используя разрешение имен с помощью правил iptables, имена будут разрешаться при создании этого правила. Если что-то изменится, ваше правило больше не будет действовать. Это может быть решением (а не красивым ...):
С другого хоста внутри локальной сети:
По сути, вы говорите каждому DNS-пакету (
udp/53
) с шестнадцатеричной строкойwww.facebook.com to
отбрасывания. Обратите внимание, что при этом пропадет разрешение имен, а не сам трафик http.Шестнадцатеричные числа, разделенные с помощью pipe (
|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:
Но помните:
Источники: здесь и здесь
источник
Может быть, ответ на ваш вопрос слишком поздно, но недавно мне нужно было решить аналогичную проблему, и Google привел меня сюда
После неудачных поисков я написал небольшую утилиту на C, которая перехватывает DNS-ответы, сравнивает доменное имя в нем с заданным регулярным выражением и перечисляет совпадающие IP-адреса. Вот оно: https://github.com/vmxdev/sidmat/
Вам не нужно настраивать собственный DNS-сервер, утилита может перехватывать ответы DNS с любого сервера.
Например, чтобы увидеть IP-адреса facebook.com (и поддоменов), которые разрешены прямо сейчас, вы можете запустить
где eth0 - сетевой интерфейс на маршрутизаторе (или где проходят ответы DNS)
Вы можете легко интегрировать его с iptables (или iptables с ipset)
Но:
источник
Для внесения в черный список самым простым способом, вероятно, является использование dnsmasq
устанавливать
dnsmasq
и добавьте эту строку в
/etc/dnsmasq.conf
Это заблокирует facebook.com и все его субдомены.
Примечание: для Ubuntu смотрите этот пост .
источник
Если выполняется локальное кэширование bind9, оно часто реализуется
dummy-block
и
dummy-block
файл:Смотрите также:
Запуск BIND9 и ISC-DHCP с
facebook.com
примером.Простой DNS-подход для блокирования веб-рекламы
источник