使用防火墙阻止包含特定查询的 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

stringiptables 本身并不理解 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),因为客户端可能会以混合大小写的形式发送查询(有时是故意的)。

相关内容