例子
假设我使用 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
string
iptables 本身并不理解 DNS,但使用match应该可以:
-p udp --dport 53 -m string --algo kmp --hex-string "|0A|wetransfer|03|com|00|" --icase
请注意,网络上的 DNS 名称不使用点 - 它们作为一系列以长度为前缀的部分发送;例如“.com”作为 发送0x03 c o m
。
您必须使用不区分大小写的匹配 ( --icase
),因为客户端可能会以混合大小写的形式发送查询(有时是故意的)。