Linux防火墙配置指南:firewalld与iptables开关教程

作者:技术拾光

时间:2026-05-18

浏览:510

在CentOS 7/8/Stream等操作系统中配置防火墙时,用户通常使用systemctl命令管理firewalld服务,并通过firewall-cmd --state检查状态。一个关键注意事项是:设置永久规则时,必须使用--permanent参数,随后执行--reload,并确保网络接口已正确关

文章目录

在CentOS 7/8/Stream等操作系统中配置防火墙时,用户通常使用systemctl命令管理firewalld服务,并通过firewall-cmd --state检查状态。一个关键注意事项是:设置永久规则时,必须使用--permanent参数,随后执行--reload,并确保网络接口已正确关联到对应的防火墙区域,否则配置可能无法应用。

Linux防火墙配置指南:firewalld与iptables开关教程

firewalld服务的启动、停止与状态检查

CentOS 7/8/Stream及Fedora等系统默认启用firewalld防火墙。该服务采用运行时配置与永久配置分离的双层机制。直接执行systemctl stop firewalld仅会清除内存中的规则并停止进程,而/etc/firewalld/目录下的配置文件保持不变。若未禁用开机自启,系统重启后服务将自动恢复并加载原有规则。

  • 确认服务是否真正运行,应检查firewall-cmd --state命令是否返回running。仅凭systemctl status firewalld显示active (running)并不足够,可能存在规则为空或区域配置错误的情况。
  • 停止服务前,需确认是否有其他应用依赖它。例如,fail2ban等工具默认使用firewallcmd-ipset动作,随意停止firewalld会导致IP封锁功能失效。
  • 若要永久禁用服务,必须执行两步操作:先运行systemctl stop firewalld,再执行systemctl disable firewalld。忽略第二步将导致服务在系统重启后自动恢复。

使用iptables替代firewalld的配置步骤

若希望切换回传统的iptables,并非安装即可完成。在CentOS 7及后续版本中,iptables-services软件包提供的是一个兼容层,其底层实际调用nftables(除非显式切换至iptables-legacy)。因此,启用iptables前,必须确保firewalld已彻底停止且未设置开机启动,否则两者冲突可能导致规则混乱。

  • 安装命令应为yum install -y iptables-services,而非单独的iptables软件包(后者不包含systemd服务单元)。
  • 启用服务后,需执行systemctl enable iptables以确保规则在重启后保留。仅运行iptables-sa ve > /etc/sysconfig/iptables可保存规则,但不会自动加载。
  • 临时添加的规则(如iptables -I INPUT -p tcp --dport 22 -j ACCEPT)若未执行iptables-sa ve,将在关机后丢失。

开放端口时--permanent与--reload的正确顺序

使用firewall-cmd开放端口时,--permanent参数仅修改磁盘上的配置文件,不影响当前运行的策略;--reload命令则将磁盘配置加载至内核。顺序错误可能导致规则无法生效。

  • 标准操作流程为:先执行firewall-cmd --permanent --add-port=80/tcp,再运行firewall-cmd --reload。
  • 常见错误是先执行--reload再添加规则,这样规则仅存在于运行时内存中,再次重载后会消失。
  • firewall-cmd --query-port=80/tcp命令查询的是运行时状态,而非磁盘配置。返回“no”并不表示永久配置中未添加该规则。
  • 通过脚本批量开放端口时,建议统一使用--permanent参数操作,最后执行一次--reload,避免频繁重载影响性能。

iptables与firewalld共存的风险与注意事项

两者不应同时管理同一张表。firewalld默认使用nftables作为后端,而新版系统中传统的iptables命令实为iptables-nft的别名。若手动运行iptables-legacy的同时启用firewalld,可能导致规则互相覆盖、命令输出不一致,甚至网络中断。

  • 检查当前底层驱动:运行ls /proc/sys/net/netfilter/,若有输出则表明nftables处于活跃状态;执行iptables -V,若输出包含“nf_tables”,则说明其使用nft后端。
  • 如需混合使用,必须明确指定命令路径,例如iptables-legacy -L与iptables-nft -L。但生产环境中强烈不建议这样做。
  • 在生产环境切换防火墙方案前,务必在测试环境验证。除检查命令返回外,建议使用ss -tlnp | grep :端口号及实际telnet测试连通性。

实际部署中最易忽略的是firewalld的区域绑定与接口归属问题。即使正确开放了端口,若网卡未关联至public区域,或被错误分配至drop区域,流量仍会被丢弃。检查当前活跃区域可使用firewall-cmd --get-active-zones,更改接口所属区域则用firewall-cmd --zone=public --change-interface=eth0。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›