centos 7默认使用firewalld而非iptables,二者不可同时运行,否则导致规则冲突、端口不通;启用firewalld需systemctl start firewalld并firewall-cmd --reload生效,永久开放端口须加--permanent参数且必须reload验证。

CentOS 7 及以后系统默认用 firewalld,不是 iptables;两者不能同时运行,强行共存会导致规则冲突、端口实际不通。
firewalld 服务启停与开机自启控制
临时启停只影响当前会话,重启后恢复原状;永久禁用必须组合两步操作。
-
systemctl start firewalld:立即启动,但重启后失效 -
systemctl stop firewalld:立即停止,重启后仍可能自动拉起(如果设了开机启动) -
systemctl enable firewalld:设置开机自启,需重启或手动start才生效 -
systemctl disable firewalld:移除开机自启,但不会停止正在运行的服务——得再补一句systemctl stop firewalld - 彻底禁用(连手动启动都拦住):
systemctl mask firewalld,解除用systemctl unmask firewalld
iptables 替换 firewalld 的实操要点
CentOS 7+ 默认没装 iptables-services,直接 systemctl start iptables 会报 Unit iptables.service not found。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先停掉并禁用
firewalld:systemctl stop firewalld && systemctl disable firewalld - 再装服务包:
yum install iptables-services(注意不是只装iptables) - 装完才能启用:
systemctl enable iptables && systemctl start iptables - 规则保存必须显式执行:
service iptables save或iptables-save > /etc/sysconfig/iptables,否则重启后规则全丢
开放端口时 --permanent 不加就白干
firewall-cmd --add-port=8080/tcp 这种不带 --permanent 的命令,只在当前运行时有效;一旦 reload 或重启,端口就关上了,非常容易误以为“配置成功了”。
- 正确姿势:
firewall-cmd --zone=public --add-port=8080/tcp --permanent - 加完必须 reload:
firewall-cmd --reload(否则不生效) - 验证是否真开了:
firewall-cmd --query-port=8080/tcp返回yes才算落地 - 删端口同理:
firewall-cmd --remove-port=8080/tcp --permanent && firewall-cmd --reload
检查状态别只看 systemctl,要交叉验证
systemctl status firewalld 显示 active (running),不代表规则已加载;firewall-cmd --state 返回 running 才说明防火墙引擎真在工作。
- 查当前生效的端口:
firewall-cmd --list-ports(不带--permanent) - 查完整规则集:
firewall-cmd --list-all,里面会显示ports:和services:两栏 - 如果
firewall-cmd --state报错或返回not running,哪怕systemctl显示 active,也说明 daemon 没真正接管规则
最常被忽略的是:改完 firewalld 规则后忘 --reload,或换用 iptables 前没 mask 掉 firewalld,结果两个服务抢着管 netfilter,连接表现忽通忽断,排查起来极难定位。










