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

Iptables重复封禁同一IP致规则溢出及CPU负载过高的排查与应急咨询

Iptables重复封禁同一IP致规则溢出及CPU负载过高的排查与应急咨询

兄弟,这种情况真的太闹心了——同一个IP反复被添加DROP规则,iptables堆了5万多条,直接把CPU干到负载爆炸,甚至要重启服务器才能缓解。咱们一步步来解决你的问题:

为什么同一IP会被重复封禁?

最常见的原因是封禁逻辑没做重复检查:比如你用的脚本/工具每次检测到这个IP的请求,就直接执行iptables -A INPUT -s [IP] -j DROP,完全没先查这个IP是不是已经在规则里了。哪怕IP已经被DROP了,只要脚本还能检测到请求(比如规则顺序不对,DROP规则排在后面,前面的规则先匹配到请求并记录,导致脚本误以为IP还能访问),就会不断加新规则。

另外也有可能是规则生效范围不对:比如你把DROP规则加在了自定义链里,但实际请求走的是INPUT主链,导致IP的请求还是能触发检测脚本,进而重复添加规则。

怎么排查是哪个进程/脚本在操作iptables?

给你几个实用方法:

  • 用auditd监控iptables命令:
    先安装auditd(比如apt install auditd或yum install auditd),然后执行:
    auditctl -w /sbin/iptables -p x
    
    之后查看审计日志(通常在/var/log/audit/audit.log),里面会记录所有调用iptables的进程ID、脚本路径等信息。
  • 检查定时任务:
    看看有没有定时执行的脚本在搞事情:
    crontab -l  # 查看当前用户的定时任务
    ls -la /etc/cron* /var/spool/cron/  # 检查系统级定时任务
    
  • 查看系统日志:
    翻一下/var/log/syslog或/var/log/messages,搜索“iptables”关键词,看看有没有相关脚本的执行记录。
  • 实时监控进程:
    用top或htop盯着CPU高的进程,或者用strace追踪可疑进程的系统调用,看是不是在调用iptables。

如何临时禁用iptables应急?

如果已经快扛不住了,先应急处理:

方法1:直接停止iptables服务

  • 用systemd的系统(CentOS7+/Ubuntu16+):
    # 如果用的是原生iptables服务
    systemctl stop iptables
    systemctl disable iptables  # 可选,防止开机自动启动
    # 如果用的是firewalld(CentOS默认)
    systemctl stop firewalld
    systemctl disable firewalld
    
  • 老版本SysVinit系统:
    service iptables stop
    chkconfig iptables off
    

方法2:清空现有规则(保留服务但临时放行所有流量)

如果不想停服务,先清空所有规则应急:

iptables -F  # 清空所有链的规则
iptables -X  # 删除所有自定义链
iptables -P INPUT ACCEPT  # 设置INPUT链默认策略为ACCEPT
iptables -P FORWARD ACCEPT  # 设置FORWARD链默认策略为ACCEPT
iptables -P OUTPUT ACCEPT  # 设置OUTPUT链默认策略为ACCEPT

额外建议

  1. 清理重复规则:先把现有5万多条重复规则清理掉,比如用脚本提取所有DROP规则的IP,去重后重新添加,再删除旧规则。
  2. 换用智能封禁工具:比如fail2ban,它会自动跟踪已封禁的IP,不会重复添加规则,还能设置封禁时长,比自己写的脚本靠谱多了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:19:37