使用 iptables 阻止针对 ipv6 的 DNS 放大攻击

使用 iptables 阻止针对 ipv6 的 DNS 放大攻击

我在我的 VPS 上运行一个小型 Pi-Hole DNS 服务器,并且启用了以下 iptables 规则来阻止 DNS ANY 放大攻击:

*raw
-A PREROUTING -p udp --dport 53 -m string --from 40 --algo bm --hex-string "|0000FF0001|" -m recent --name dnsanyquery --rcheck --seconds 60 --hitcount 1 -j DROP
-A PREROUTING -p tcp --dport 53 -m string --from 52 --algo bm --hex-string "|0000FF0001|" -m recent --name dnsanyquery --rcheck --seconds 60 --hitcount 1 -j DROP
COMMIT

(来源:https://freek.ws/2017/03/18/blocking-dns-amplification-attacks-using-iptables/

这两条规则在 ipv4 上效果很好(几周来我一直受到持续攻击,但所有请求都被阻止了),但我刚刚意识到我没有与它们对应的 ipv6 规则,而且我不知道十六进制字符串是否兼容,或者偏移量是多少。我还没有在 ipv6 上成为攻击目标,但我宁愿提前做好准备 - 尤其是因为我的 ipv6 地址已经接收了几个端口扫描器。

阻止 DNS ANY 请求的 ipv6 等效规则是什么?

答案1

除参数值外,IPv6 的规则应该相同--from

由于 IPv6 中的 IP 和 UDP 标头较大(由于地址较长),因此 DNS 部分开始得较晚。

根据UDP 维基百科页面,DNS 部分偏移量为 48 字节,因此对于 UDP,您应该--from 48在 iptables 规则中使用。

-A PREROUTING -p udp --dport 53 -m string --from 48 --algo bm --hex-string "|0000FF0001|" -m recent --name dnsanyquery --rcheck --seconds 60 --hitcount 1 -j DROP

对于 TCP,您应该检查类似的偏移量,但我不确定是否适用相同的规则。TCP 中来回传输的数据包更多,但不是 DNS,例如 3 次握手序列不符合此规则,这意味着远程主机仍会建立连接,但无法通过它进行任何 DNS ANY 查询。

相关内容