–limit 100/s 对 NTP/SSDP/CharGEN 放大攻击无效,因其不区分源IP、不跟踪会话,攻击者可用海量肉鸡低频发包绕过;须改用-m hashlimit按srcip,dstport组合限速,并配合rp_filter、服务加固与DROP策略。
为什么 --limit 100/s 对 NTP/SSDP/CharGEN 放大攻击基本无效
因为这些协议的反射放大攻击本质是「伪造源 IP 的 UDP 请求」,攻击流量根本不会触发连接状态,iptables 的 -m limit 在 INPUT 链上对单个目标端口限速时,只按「每秒匹配到的包数」计数,不区分源 IP、不跟踪会话。攻击者用百万级肉鸡发包,每个 IP 只打 1–2 个包/秒,--limit 100/s 完全拦不住——总流量轻松突破 Gbps,而规则认为“每个源都远低于阈值”。
真正有效的限速必须绑定源 IP + 端口组合
关键不是限制“本机某端口每秒收多少包”,而是限制“每个源 IP 向本机某端口每秒最多发几个包”。需配合 -m hashlimit(比 limit 更精准)或 -m connlimit(对已建连接有效,但 UDP 无连接,慎用)。
-
-m hashlimit --hashlimit-above 5/sec --hashlimit-burst 10 --hashlimit-mode srcip,dstport --hashlimit-name ntp_limit --hashlimit-htable-expire 60000:对每个srcip+dstport组合独立限速,超速丢包 - 必须加
--hashlimit-mode srcip,dstport,否则默认只按 srcip,会导致不同端口间误杀(比如封掉正常 HTTP 请求) -
--hashlimit-htable-expire 60000防止哈希表无限膨胀(单位毫秒),不设可能吃光内存 - NTP(端口 123)、SSDP(端口 1900)、CharGEN(端口 19)要分别写三条规则,不能合并
INPUT 链规则顺序和配套防护要点
限速规则必须放在所有 ACCEPT 规则之前,且优先于状态检测(-m state --state NEW)。否则包已被放行,限速形同虚设。