Блокировать с помощью брандмауэра DNS-запрос, содержащий определенный запрос

Блокировать с помощью брандмауэра DNS-запрос, содержащий определенный запрос

Пример

допустим, я использую iptables или nftables

Я хочу разрешить определенный трафик, например следующий:

iptables -A OUTPUT -d 192.168.1.1 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

можно ли расширить первое правило, включив также проверку пакета, содержащего DNS-запрос, и разрешив только пакет, содержащий *.wetransfer.comкак запрос запрошен, иначе отбросить?

Я думаю, это должно попасть в то, что называетсяГлубокая проверка пакетов, но как это можно сделать с точки зрения iptables/nftables?

решение1

iptables изначально не понимает DNS, но это должно быть возможно с помощью stringmatch:

-p udp --dport 53 -m string --algo kmp --hex-string "|0A|wetransfer|03|com|00|" --icase

Обратите внимание, что DNS-имена в сети не используют точки — они отправляются в виде серии компонентов с префиксом длины; например, «.com» отправляется как 0x03 c o m.

Необходимо использовать соответствие без учета регистра ( --icase), поскольку клиенты могут отправлять запрос в смешанном регистре (иногда намеренно).

Связанный контент