温馨提示×

centos iptables为何掉规则

小樊
39
2026-10-23 06:27:38
栏目: 智能运维

在 CentOS 上 iptables 规则“掉规则 / 重启后丢失 / 突然失效”,通常不是 iptables 本身有 bug,而是 管理机制或配置方式不对。下面按常见原因逐一说明。


一、最常见原因:规则没有保存(占 90%)

现象

  • iptables -A ... 加了规则
  • 重启服务器 / 重启网络后规则没了

原因

iptables 规则 默认只存在于内存中,不写盘就会丢。

解决方法

CentOS 6 / 早期版本

service iptables save
# 或
/etc/init.d/iptables save

规则会保存到:

/etc/sysconfig/iptables

CentOS 7(用 iptables-services)

yum install iptables-services
systemctl enable iptables
systemctl start iptables

iptables-save > /etc/sysconfig/iptables
# 或
service iptables save

二、CentOS 7 默认用的是 firewalld(冲突)

现象

  • 明明加了 iptables 规则
  • 过一会儿 / 重启后没了
  • iptables -L 看到一堆 firewalld 规则

原因

CentOS 7 默认 firewalld 管理 netfilter,会覆盖 iptables 规则。

解决方法(二选一)

方案 1:彻底用 iptables(推荐)

systemctl stop firewalld
systemctl disable firewalld

systemctl enable iptables
systemctl start iptables

方案 2:用 firewalld(不推荐混用)

不要直接写 iptables,用:

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

三、NetworkManager 重置规则

现象

  • 网络重启 / 网卡重连后规则消失

原因

NetworkManager 在某些场景下会刷新 netfilter。

解决

systemctl stop NetworkManager
systemctl disable NetworkManager

或确保规则已 save 并 enable iptables


四、容器 / Docker 干扰

现象

  • 装了 Docker 后 iptables 规则乱掉
  • 自定义规则被清掉

原因

Docker 会 主动操作 iptables(DOCKER 链)

建议

  • 不要把业务规则写进 DOCKER 链
  • 使用 DOCKER-USER 链(Docker 专用)
iptables -I DOCKER-USER -p tcp --dport 80 -j DROP

五、规则顺序问题(看起来像“掉规则”)

现象

  • 规则在,但没生效
  • 好像“被丢掉”

原因

iptables 是 顺序匹配,第一条命中即停

例如:

iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

→ 22 端口永远不通

解决

用 -I(插入到前面)而不是 -A


六、系统被重置 / 安全软件清理

  • 云厂商安全组刷新
  • 安全加固脚本
  • 杀毒 / 合规工具

七、如何确认规则为什么会掉

1. 看是否有保存文件

cat /etc/sysconfig/iptables

2. 看当前服务

systemctl status iptables
systemctl status firewalld

3. 看规则来源

iptables -t nat -L -n -v
iptables -L -n -v

总结一句话

CentOS 上 iptables 掉规则,99% 是因为:没 save + firewalld 冲突

如果你愿意,可以贴一下:

  • CentOS 版本
  • iptables -L 输出
  • 是否装了 Docker / firewalld

我可以直接帮你定位是哪一类问题。

0 踩