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

Поэтому Ваша оболочка усекает файл, когда Вы перенаправляете к нему. Это происходит, прежде чем глава получает шанс считать его.

Можно или использовать временный файл:

head -n1 hosts > hosts.tmp && mv hosts.tmp hosts

Или используйте sponge от moreutils packate:

head -n1 hosts | sponge hosts
12
18.06.2014, 22:31
4 ответа

Если вы отбрасываете трафик с помощью разрешения имен с правилами 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 до . Обратите внимание, что это снизит разрешение имен, а не сам HTTP-трафик.

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

хост: 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.@.@....IGB
        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-запросы, а не блокируете домен. Пользователи не такие тупые;)

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

7
27.01.2020, 19:55

При запуске привязки локального кэширования9 это часто реализуется с помощью фиктивного блока

zone "facebook.com" { type master; file "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 для блокировки веб-рекламы

1
27.01.2020, 19:55

Может быть, ответ на ваш вопрос Слишком поздно, но недавно мне нужно было решить подобную проблему, и Google приносит мне здесь

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

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

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

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

, где ETH0 - это сетевой интерфейс на маршрутизаторе (или где пропуск ответов DNS)

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

Но:

  • Утилита действительно проста. Он не выполняет много проверок, поэтому злоумышленник может обмануть его
  • Эта техника бесполезна, если пользователи не используют DNS для разрешения имени
3
27.01.2020, 19:55

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

Install dnsmasq

$ sudo apt-get install dnsmasq

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

address=/facebook.com/127.0.0.1

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

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

3
27.01.2020, 19:55

Теги

Похожие вопросы