Як зробити фільтрацію домену в Linux?


12

Переважно щось подібне iptables. В основному я хочу зробити фільтрацію домену / білий список / чорний список, як я б з IP-адресами в iptables. Чи є рекомендації, як це зробити?


що / чому ви намагаєтесь заблокувати? Ви намагаєтесь відфільтрувати вихідний / вхідний HTTP або SMTP або NTP? Для різних сценаріїв можна використовувати різні інструменти.
Крік

1
Кілька пропозицій, які можуть допомогти вам, є denyhosts.sourceforge.net/faq.html та fail2ban.org/wiki/index.php/Main_Page .
Рамеш

1
@josten в ідеалі ви б використовували проксі HTTP, як Squid . Блокування доменних імен у iptablesможна зробити, але це може бути непросто
Creek

Відповіді:


8

Якщо ви скинете трафік, використовуючи роздільну здатність імен за допомогою 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 toпотрібно скинути. Зауважте, що це скасує роздільну здатність імені, а не сам http-трафік.

Шістнадцяткові числа, розділені трубами ( |03|www|08|facebook|03|com), є поданням крапкового .символу на dns-запитах. Він скаже, скільки з наведених нижче діаграм представлятимуть кожну частину 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 і не блокуєте домен. Користувачі не такі німі;)

Джерела: Тут і тут


чому тип algo - це bm?
Гаурав Канзал

Алгоритм Boyer-Moore - en.wikipedia.org/wiki/…

4

Можливо, відповідь на ваше запитання запізнився, але останнім часом мені потрібно було вирішити подібну проблему, і Google приводить мене сюди

Після невдалого пошуку я написав невелику утиліту на 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 дивіться цю публікацію .


1

Якщо використовується локальне кешування bind9, воно часто реалізується a 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 для блокування веб-реклами

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.