最快速、低开销的防御dns放大攻击手段是用iptables限制dns查询频次和来源:白名单放行可信网段(如192.168.10.0/24)、recent模块限速(1秒超5次即丢弃)、u32模块屏蔽any/txt等高危udp查询类型,并配合dns服务端禁用递归查询。

直接用 iptables 限制 DNS 查询频次和来源,是防御 DNS 放大攻击最快速、低开销的手段。核心思路不是“识别攻击包”,而是“控制响应行为”——不让你的 DNS 服务器成为放大器。
只允许可信网段发起查询
公开暴露的 DNS 服务器若对全网开放 UDP 53 端口,极易被滥用。应明确白名单范围:
- 内网管理网段(如 192.168.10.0/24)、运维跳板机 IP、上游递归服务器 IP 必须放行
- 添加 ACCEPT 规则置于 DROP 规则之前,避免误杀:
iptables -A INPUT -p udp --dport 53 -s 192.168.10.0/24 -j ACCEPT - 默认拒绝所有其他来源的 DNS 查询:
iptables -A INPUT -p udp --dport 53 -j DROP
限速防暴力探测与反射滥用
DNS 放大攻击依赖高频、伪造源 IP 的 ANY 或 TXT 类型查询。iptables 可基于连接速率拦截异常流量:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 启用 recent 模块记录每 IP 的请求行为:
iptables -A INPUT -p udp --dport 53 -m recent --set --name dnsquery --rsource - 1 秒内超过 5 次即丢弃(普通客户端极少触发,扫描器/反射脚本必中):
iptables -A INPUT -p udp --dport 53 -m recent --name dnsquery --rcheck --seconds 1 --hitcount 5 -j DROP - 可搭配日志标记便于溯源:
iptables -A INPUT -p udp --dport 53 -m recent --name dnsquery --rcheck --seconds 1 --hitcount 5 -j LOG --log-prefix "DNS-ABUSE: "
屏蔽高危查询类型(ANY/TXT/AXFR)
攻击者常构造 ANY 查询获取全部记录,或用 TXT、AXFR 获取域名完整信息用于投毒或放大。iptables 可匹配 DNS 报文中的类型字段:
- DNS 查询报文第 12–13 字节为查询类型(QTYPE),ANY 是 0x00ff,TXT 是 0x0010,AXFR 是 0x0006
- 用 u32 模块精准匹配(需内核支持):
iptables -A INPUT -p udp --dport 53 -m u32 --u32 "20=0x000000ff" -j DROP(ANY)
iptables -A INPUT -p udp --dport 53 -m u32 --u32 "20=0x00000010" -j DROP(TXT) - 注意:该方式不适用于 TCP DNS(因有分片和长度变化),但绝大多数放大攻击走 UDP
禁用递归查询(服务端配置优先)
iptables 是兜底手段,根本解法在 DNS 服务本身:
- Bind 用户应在 named.conf 中设置:
options { recursion no; allow-query { 192.168.10.0/24; }; }; - 禁用递归后,即使攻击者伪造源 IP 发起查询,你的服务器也不会向第三方发起请求并返回大量响应——从根本上消除放大能力
- 配合 iptables 白名单,双重保障更可靠










