ntp monlist 放大攻击或异常流量后的 iptables 限速规则

13次阅读

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

ntp monlist 放大攻击或异常流量后的 iptables 限速规则

针对 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 monitorrestrict default noquery,并确认 ntpd 版本 ≥ 4.2.7p26

这些规则见效快,适合攻击突发时临时启用。长期运行仍应依赖配置加固与服务升级,iptables 限速只是最后一道“减压阀”。

text=ZqhQzanResources