在 CentOS 上 iptables 规则“掉规则 / 重启后丢失 / 突然失效”,通常不是 iptables 本身有 bug,而是 管理机制或配置方式不对。下面按常见原因逐一说明。
iptables -A ... 加了规则iptables 规则 默认只存在于内存中,不写盘就会丢。
service iptables save
# 或
/etc/init.d/iptables save
规则会保存到:
/etc/sysconfig/iptables
yum install iptables-services
systemctl enable iptables
systemctl start iptables
iptables-save > /etc/sysconfig/iptables
# 或
service iptables save
iptables -L 看到一堆 firewalld 规则CentOS 7 默认 firewalld 管理 netfilter,会覆盖 iptables 规则。
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
不要直接写 iptables,用:
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
NetworkManager 在某些场景下会刷新 netfilter。
systemctl stop NetworkManager
systemctl disable NetworkManager
或确保规则已 save 并 enable iptables
Docker 会 主动操作 iptables(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
cat /etc/sysconfig/iptables
systemctl status iptables
systemctl status firewalld
iptables -t nat -L -n -v
iptables -L -n -v
CentOS 上 iptables 掉规则,99% 是因为:没 save + firewalld 冲突
如果你愿意,可以贴一下:
iptables -L 输出我可以直接帮你定位是哪一类问题。