被大量 UDP 53/123/1900 放大攻击的 iptables rate-limit + hashlimit 规则模板

7次阅读

有效,但需正确配置hashlimit:按srcip限速、禁用conntrack、增大htable-size至8192,并将规则置于input链靠前位置;否则易因哈希碰撞或状态干扰而失效。

被大量 UDP 53/123/1900 放大攻击的 iptables rate-limit + hashlimit 规则模板

udp 53/123/1900 放大攻击的 iptables 防御是否还有效?

在当前主流反射放大攻击(如 dns、NTP、SSDP)场景下,单纯靠 iptables -m limit 做速率限制基本无效——它不区分源 IP,容易被多个伪造源绕过;而 hashlimit 是唯一可行的轻量级内核级方案,但必须配对使用 --hashlimit-mode srcip 和合理桶宽,否则规则形同虚设。

针对 UDP 53/123/1900 的 hashlimit 规则怎么写才不被绕过?

关键不是“限多少”,而是“按什么维度限”和“桶怎么建”。DNS(53)、NTP(123)、SSDP(1900)都依赖 UDP 请求触发响应,攻击者常伪造海量不同源 IP 发送单包请求。因此必须按源 IP 哈希限速,并禁用连接跟踪(ctstate INVALID,NEW 不适用 UDP),直接匹配四层特征:

  • -A INPUT -p udp --dport 53 -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name dns_limit -j DROP
  • -A INPUT -p udp --dport 123 -m hashlimit --hashlimit-above 5/sec --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ntp_limit -j DROP
  • -A INPUT -p udp --dport 1900 -m hashlimit --hashlimit-above 3/sec --hashlimit-burst 6 --hashlimit-mode srcip --hashlimit-name ssdp_limit -j DROP

注意:--hashlimit-burst 必须略高于 --hashlimit-above,否则首包即丢;--hashlimit-name 必须全局唯一,否则规则冲突;所有规则应插入 INPUT 链靠前位置(建议在 ESTABLISHED,RELATED 规则之后、其他服务规则之前)。

为什么加了 hashlimit 还是被打爆?常见配置陷阱

现象:规则生效,iptables -L -v 显示 DROP 计数上涨,但服务器负载仍飙升、网卡收包率超限。根本原因往往不在规则本身,而在内核哈希表容量或匹配粒度:

  • 默认 hashlimit 的哈希桶大小太小(通常仅 1024),高并发源 IP 下哈希碰撞严重,多个 IP 被映射到同一桶,导致误放行或误限流;需显式加大:--hashlimit-htable-size 8192
  • 未禁用 conntrack 对 UDP 的干扰:某些内核版本中,若 nf_conntrack_udp_timeout 过长,会导致伪造包被错误归入 “ESTABLISHED” 状态而绕过 INPUT 链;建议临时关闭:echo 0 > /proc/sys/net/netfilter/nf_conntrack_udp_be_liberal
  • 规则放在 FORWARD 链而非 INPUT 链——这些端口是本机监听的,攻击流量终点是本机,必须在 INPUT 处理

要不要加 state 检查?UDP 场景下完全没必要

iptables -m state --state NEW-m conntrack --ctstate NEW 对纯 UDP 反射攻击无效,因为攻击包本身是“无状态”的单向请求,且 conntrack 在高洪流下自身就是性能瓶颈。强行启用只会增加 CPU 开销、降低吞吐、甚至引发哈希表锁争用。所有规则应直击 -p udp --dport X,跳过任何 connection tracking 判断。

真正要盯住的是 /proc/net/nf_conntrack 行数(别让它超 65536)和 hashlimithtable-expire 行为——默认 60 秒不活跃条目自动清理,这个时间足够覆盖正常扫描间隙,也避免哈希表无限膨胀。

text=ZqhQzanResources