Фильтрация DNS запросов с помощью ipTables: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
Строка 30: Строка 30:
Заблокировать все запросы к DNS, в строке которых соедржится google и если запросы идут с адреса 192.168.0.21
Заблокировать все запросы к DNS, в строке которых соедржится google и если запросы идут с адреса 192.168.0.21


{{root|iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --string google --algo bm -j DROP}}
{{root|<nowiki>iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --string google --algo bm -j DROP</nowiki>}}


В данном случае речь идёт о FORWARD пакетах, т.к. правило установлено на роутере с Gentoo Linux, который форвардит, используя Маскарад на внешнем сетевом интерфейсе, все пакеты клиентов внутри локалки
В данном случае речь идёт о FORWARD пакетах, т.к. правило установлено на роутере с Gentoo Linux, который форвардит, используя Маскарад на внешнем сетевом интерфейсе, все пакеты клиентов внутри локалки


Если нужно использовать точку и тем самым конкретизировать поддомен, то можно воспользоваться правилом, описанным [https://stackoverflow.com/questions/14096966/can-iptables-allow-dns-queries-only-for-a-certain-domain-name тут]
Если нужно использовать точку и тем самым конкретизировать поддомен, то можно воспользоваться правилом, описанным [https://stackoverflow.com/questions/14096966/can-iptables-allow-dns-queries-only-for-a-certain-domain-name тут]


На его основе блокировка всех запросов, содержащих google.com будет выглядеть вот так:
На его основе блокировка всех запросов, содержащих google.com будет выглядеть вот так:


{{root|iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --hex-string "|06|google|03|com" --algo bm -j DROP}}
{{root|<nowiki>iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --hex-string "|06|google|03|com" --algo bm -j DROP</nowiki>}}




[[Category:Index]]
[[Category:Index]]
[[Category:Linux]]
[[Category:Linux]]

Версия 10:17, 3 ноября 2021

Для фильтрации DNS запросов, например блокировки некоторых зловредных сайтов, в ядре системы нужно активировать опцию анализа строки запроса

Заходим в конфигурацию netfilter и устанавливаем параметр

  • CONFIG_NETFILTER_XT_MATCH_STRING=y

Так же должны быть активны следующие параметры

  • CONFIG_TEXTSEARCH=y
  • CONFIG_TEXTSEARCH_KMP=y
  • CONFIG_TEXTSEARCH_BM=y
  • CONFIG_TEXTSEARCH_FSM=y

Кстати полезным в принципе будет активирование возможности фильтрации по MAC

  • CONFIG_NETFILTER_XT_MATCH_MAC=y

А так же использование диапазона портов в правиле фильтрации, а не одного порта

  • CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y

Немного про алгоритмы поиска подстроки

netfilter использует разные алгоритмы поиска подстроки. Вот краткое описание некоторых из них:

Алгоритм поиска строк Бойера-Мура близок к Кнута-Морриса-Пратта по сложности и для определенного круга задач (где образец не содержит повторяющихся фрагментов) он быстрее.

Для нашего случая для вычленения доменов это выглядит наиболее подходящим (алгоритм BM).

Примеры блокировок

Заблокировать все запросы к DNS, в строке которых соедржится google и если запросы идут с адреса 192.168.0.21

iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --string google --algo bm -j DROP

В данном случае речь идёт о FORWARD пакетах, т.к. правило установлено на роутере с Gentoo Linux, который форвардит, используя Маскарад на внешнем сетевом интерфейсе, все пакеты клиентов внутри локалки


Если нужно использовать точку и тем самым конкретизировать поддомен, то можно воспользоваться правилом, описанным тут

На его основе блокировка всех запросов, содержащих google.com будет выглядеть вот так:

iptables -A FORWARD -s 192.168.0.21/32 -p udp --dport 53 -m string --hex-string "|06|google|03|com" --algo bm -j DROP