iptables限速可作为NTP monlist攻击的应急缓冲,通过每秒限5个UDP/123请求及recent模块自动封禁高频源IP来抑制洪水,但须配合禁用monitor、升级ntpd等根本防护措施。

针对 NTP monlist 放大攻击或突发异常 UDP 流量,iptables 限速不能替代根本防护(如禁用 monlist、升级 ntpd),但可作为应急缓冲手段,在攻击发生时快速抑制入向洪水,防止服务器网卡打满或内核丢包失控。
紧急限速:限制 UDP 123 端口连接速率
以下规则对目标端口 123 的 UDP 包进行每秒限速,兼顾可用性与防护强度:
-
限制单 IP 每秒最多 5 个 UDP/123 请求:
iptables -A INPUT -p udp --dport 123 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT -
超出速率的包直接丢弃(不记录):
iptables -A INPUT -p udp --dport 123 -j DROP
说明:--limit-burst 10 允许短时突发(如客户端首次同步),避免误伤正常时间同步;5/sec 足以满足合法 NTP 客户端(通常几分钟才同步一次),但远低于 monlist 攻击单 IP 每秒数百请求的水平。
增强防护:按源 IP 统计并封禁高频请求者
若攻击源相对集中,可结合 recent 模块自动封禁:
-
记录每 IP 最近 10 秒内发起的 UDP/123 请求:
iptables -A INPUT -p udp --dport 123 -m state --state NEW -m recent --name ntp-flood --set -
若 10 秒内超过 15 次,则拒绝后续请求(持续封禁 300 秒):
iptables -A INPUT -p udp --dport 123 -m state --state NEW -m recent --name ntp-flood --update --seconds 10 --hitcount 16 -j DROP - 最后放行合法请求(需配合前面的限速规则)
配套建议:避免规则失效或副作用
执行限速前注意三点:
- 确保规则插入在 INPUT 链靠前位置(如在通用 DROP 规则之前),否则可能被提前拦截而失效
- 不要对本机出站 NTP 流量(OUTPUT 链)限速,否则会影响自身时间同步
- 限速仅缓解症状,必须同步检查
/etc/ntp.conf是否已添加disable monitor和restrict default noquery,并确认 ntpd 版本 ≥ 4.2.7p26
这些规则见效快,适合攻击突发时临时启用。长期运行仍应依赖配置加固与服务升级,iptables 限速只是最后一道“减压阀”。










