Фильтрация DNS запросов с помощью ipTables: различия между версиями
ALEX (обсуждение | вклад) |
ALEX (обсуждение | вклад) |
||
Строка 20: | Строка 20: | ||
===Немного про алгоритмы поиска подстроки=== | ===Немного про алгоритмы поиска подстроки=== | ||
netfilter использует разные алгоритмы поиска подстроки. Вот краткое описание некоторых из них: | |||
Алгоритм поиска строк '''Бойера-Мура''' близок к '''Кнута-Морриса-Пратта''' по сложности и для определенного круга задач (где образец не содержит повторяющихся фрагментов) он быстрее. | Алгоритм поиска строк '''Бойера-Мура''' близок к '''Кнута-Морриса-Пратта''' по сложности и для определенного круга задач (где образец не содержит повторяющихся фрагментов) он быстрее. | ||
Для нашего случая для вычленения доменов это выглядит наиболее подходящим (алгоритм BM). | Для нашего случая для вычленения доменов это выглядит наиболее подходящим (алгоритм '''BM'''). | ||
===Примеры блокировок=== | ===Примеры блокировок=== |
Текущая версия на 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
В данном случае речь идёт о FORWARD пакетах, т.к. правило установлено на роутере с Gentoo Linux, который форвардит, используя Маскарад на внешнем сетевом интерфейсе, все пакеты клиентов внутри локалки
Если нужно использовать точку и тем самым конкретизировать поддомен, то можно воспользоваться правилом, описанным тут
На его основе блокировка всех запросов, содержащих google.com будет выглядеть вот так: