You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过iptables/conntrack立即生效DROP规则以阻止特定IP的新连接

如何通过iptables/conntrack立即生效DROP规则以阻止特定IP的新连接

看起来你遇到的问题核心是规则放错了链,还有一条错误规则在干扰,咱们一步步来解决:

首先,找出问题根源

  1. 错误的DNAT规则位置:你在INPUT链里加了一条DNAT规则,但DNAT是nat表专属的操作,根本不该出现在filter表的INPUT链里,这条规则不仅没用,还可能打乱流量处理逻辑。
  2. DROP规则加错了链:你的邮件服务器是在VM里,外部IP的流量是通过DNAT转发到VM的,这类转发流量不会走INPUT链(INPUT链只处理目标是本机的流量),而是走FORWARD链,所以你加在INPUT链的DROP规则根本没作用!

具体修复步骤

1. 删除错误的INPUT链DNAT规则

先把这条无效又干扰的规则删掉:

iptables -D INPUT -p tcp -d <MYDOMAIN> --dport 587 -j DNAT --to 10.0.1.109:587

2. 在FORWARD链添加DROP规则(关键!)

攻击流量是要转发到内部VM的,必须在FORWARD链最前面添加DROP规则,确保新流量第一时间被拦截:

for IP in <IP_LIST> ; do
    # 把DROP规则插入到FORWARD链的最开头,优先执行
    iptables -I FORWARD -s $IP -j DROP
    # 删除该IP的现有连接跟踪条目,避免旧连接状态干扰
    conntrack -D -s $IP
done

3. 验证规则是否生效

  • 查看FORWARD链的规则,确认DROP规则排在最前面:
iptables -L FORWARD --line-numbers
  • 再次检查攻击者IP的连接跟踪:
conntrack -L -s <ATTACKERIP>

如果还有TIME_WAIT状态的连接不用慌,这类是已经关闭的会话,不会接受新请求,新的连接请求会被FORWARD链的DROP规则直接拦截。

4. 补充(可选但建议)

确保FORWARD链有允许正常转发流量的规则,比如允许已建立/相关的连接:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

(这条规则要放在DROP规则后面,避免影响拦截效果)

为什么之前的方法没用?

简单来说:你把拦截规则加在了“不会处理攻击流量”的链上,攻击流量绕开了INPUT链直接走FORWARD链到VM了,所以你的DROP规则相当于没加。现在把规则移到FORWARD链,就能直接拦截所有发往VM的攻击者流量了。

备注:内容来源于stack exchange,提问作者le_top

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:32:57