CentOS 防火墙兼容性处理指南
一、先厘清版本与默认栈差异
| 版本 | 默认防火墙栈 | 主要管理工具 | 备注 |
|---|---|---|---|
| CentOS 7 | firewalld(基于 iptables 内核) | firewall-cmd、firewalld | 仍可用 iptables,但与 firewalld 不宜并存 |
| CentOS 8 | firewalld(底层 nftables) | firewall-cmd | nftables 成为底层实现 |
| CentOS Stream 9 | nftables | nft | 仍可提供 firewalld 兼容层 |
二、通用排查与修复步骤
firewall-cmd --statefirewall-cmd --get-default-zone、firewall-cmd --get-active-zonesfirewall-cmd --list-all --zone=public--permanent 写入持久配置后,执行 firewall-cmd --reload 使配置生效;尽量避免直接 systemctl restart firewalld,以免短暂中断现有连接。iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTiptables -I FORWARD -s 172.17.0.0/16 -j ACCEPTiptables -I FORWARD -d 172.17.0.0/16 -j ACCEPT三、按版本给出推荐做法
firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --reloadfirewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reloadnft add rule inet filter input tcp dport 22 accept四、常见兼容性问题与对策
systemctl stop 另一套并 systemctl disable,再启用目标服务。firewall-cmd 报 ModuleNotFoundError: No module named 'gi'。/usr/bin/firewall-cmd 的 shebang 明确指向 python2(系统自带),避免被 python3 覆盖导致依赖缺失。setsebool -P httpd_can_network_connect 1 等)。