
Пример
допустим, я использую 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, но это должно быть возможно с помощью string
match:
-p udp --dport 53 -m string --algo kmp --hex-string "|0A|wetransfer|03|com|00|" --icase
Обратите внимание, что DNS-имена в сети не используют точки — они отправляются в виде серии компонентов с префиксом длины; например, «.com» отправляется как 0x03 c o m
.
Необходимо использовать соответствие без учета регистра ( --icase
), поскольку клиенты могут отправлять запрос в смешанном регистре (иногда намеренно).