在CentOS系统中,关闭防火墙通常使用systemctl stop firewalld命令,而开启则使用systemctl start firewalld命令,但最推荐的做法是通过firewall-cmd配置特定端口而非直接关闭防火墙,以保障服务器安全。
许多刚接触Linux服务器的运维新手或开发者,在面对CentOS系统时,第一反应往往是“怎么关掉防火墙”,这种直觉源于对网络连通性的焦虑,尤其是当远程连接突然中断或Web服务无法访问时,业内专家指出,盲目关闭防火墙并非最佳实践,理解其背后的逻辑并掌握精准的控制命令,才是解决网络问题的根本途径,本文将深入解析CentOS防火墙的管理机制,提供从基础开关到高级配置的完整操作指南,帮助你在保障安全的前提下,顺畅地管理网络服务。
CentOS防火墙版本差异与核心工具
在深入命令之前,必须明确你使用的CentOS版本,CentOS 6及更早版本使用iptables作为默认防火墙工具,而CentOS 7、8以及CentOS Stream系列则全面转向了firewalld,这一转变不仅是工具的替换,更是管理理念的升级,firewalld支持动态更新规则,无需重启服务即可生效,极大地提升了运维效率。
检查当前防火墙状态
在尝试任何操作之前,确认防火墙的当前状态是必不可少的第一步,你可以使用以下命令来查看firewalld服务的运行状态:
- 查看服务状态:
systemctl status firewalld - 查看防火墙运行状态:
firewall-cmd --state
如果输出显示active (running),说明防火墙正在运行;如果显示inactive (dead),则说明防火墙已关闭,通过systemctl is-enabled firewalld可以查看防火墙是否设置为开机自启,这一细节对于服务器重启后的安全性至关重要,许多因服务器重启导致的安全漏洞,往往源于管理员忽略了自启设置。
基础命令:开启与关闭防火墙

对于急需恢复网络连接的场景,直接开关防火墙是最快的方法,以下是针对CentOS 7及以上版本的标准操作:
-
关闭防火墙:
- 临时关闭(重启后失效):
systemctl stop firewalld - 永久关闭(禁止开机自启):
systemctl disable firewalld - 同时执行上述两条命令,可实现彻底关闭。
- 临时关闭(重启后失效):
-
开启防火墙:
- 临时开启:
systemctl start firewalld - 永久开启(设置开机自启):
systemctl enable firewalld
- 临时开启:
需要注意的是,stop和disable的区别在于是否保留开机自启配置,在生产环境中,仅使用stop是危险的,因为服务器一旦重启,防火墙将重新启用,可能导致之前的配置失效或引发新的连接问题,建议根据实际需求选择是否禁用自启。
精准控制:开放特定端口而非全开
直接关闭防火墙虽然能解决连通性问题,但会暴露整个系统的安全风险,更专业的做法是仅开放业务所需的端口,这种“最小权限原则”是网络安全的基础共识,通过firewall-cmd命令,你可以精确地控制哪些端口可以被外部访问。
常用端口操作命令
假设你需要开放Web服务常用的80端口和443端口,操作步骤如下:
-
添加端口规则:
- 命令格式:
firewall-cmd --zone=public --add-port=端口号/协议 --permanent - 示例:
firewall-cmd --zone=public --add-port=80/tcp --permanent - 示例:
firewall-cmd --zone=public --add-port=443/tcp --permanent
- 命令格式:
-
重载配置生效:
- 添加规则后,必须重载防火墙配置才能生效:
firewall-cmd --reload
- 添加规则后,必须重载防火墙配置才能生效:
-
验证端口是否开放

:
- 命令:
firewall-cmd --zone=public --query-port=80/tcp - 如果返回
yes,表示端口已成功开放;返回no则表示未开放。
- 命令:
区域(Zone)的概念与应用
firewalld引入了“区域”的概念,用于定义不同信任级别的网络环境,默认区域通常是public,适用于大多数互联网连接场景,对于内网环境,可以使用internal区域,其默认信任度更高。
- 查看当前区域:
firewall-cmd --get-active-zones - 指定区域操作:在添加端口时,明确指定
--zone=public可以避免因默认区域变更导致的配置遗漏。
对于需要长期稳定运行的业务,建议将常用端口添加到--permanent配置中,这样即使防火墙服务重启,规则依然保留,这种持久化配置是生产环境的标准做法。
常见问题排查与高级技巧
在实际操作中,即使执行了正确的命令,端口仍可能无法访问,这通常涉及规则重载、服务定义以及日志排查等方面,掌握这些高级技巧,能显著提升故障排除效率。
服务名称代替端口号
除了使用端口号,firewalld还支持直接使用服务名称,这要求系统已安装对应的服务定义文件(通常位于/usr/lib/firewalld/services/)。
- 添加HTTP服务:
firewall-cmd --zone=public --add-service=http --permanent - 添加HTTPS服务:
firewall-cmd --zone=public --add-service=https --permanent
这种方式更加直观,且不易出错。http服务默认对应80端口,https对应443端口,使用服务名称管理防火墙规则,是许多资深运维人员的首选方案。
端口转发与富规则
对于需要复杂网络策略的场景,如端口转发或基于IP的限制,可以使用富规则(Rich Rules)。

-
端口转发示例:将外部8080端口转发到内部80端口。
- 命令:
firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100
- 命令:
-
IP限制示例:仅允许特定IP访问SSH服务。
- 命令:
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.5" service name="ssh" accept' --permanent
- 命令:
这些高级功能使得firewalld不仅能满足基本的端口开放需求,还能应对复杂的安全策略,据统计,采用富规则进行精细化访问控制的服务器,其遭受恶意扫描的比例显著低于仅开放端口的服务器。
安全性与最佳实践总结
管理CentOS防火墙不仅仅是执行几条命令,更是一种安全意识的体现,直接关闭防火墙虽然在短期内解决了连通性问题,但长期来看,它使服务器暴露在巨大的风险之中,业内共识认为,始终开启防火墙并仅开放必要端口,是服务器安全管理的基石。
在具体操作路径上,建议遵循以下原则:
- 默认拒绝,按需开放:不要依赖默认规则,明确列出允许的服务和端口。
- 持久化配置:使用
--permanent参数保存规则,并定期重载配置。 - 定期审计:使用
firewall-cmd --list-all定期检查当前生效的规则,确保没有遗漏或错误配置。 - 日志监控:启用防火墙日志,监控被拒绝的连接请求,及时发现潜在的攻击行为。
通过掌握这些命令和策略,你可以构建一个既安全又灵活的服务器网络环境,防火墙不是阻碍,而是保护,正确配置防火墙,能让你的业务在安全的轨道上稳定运行,避免因安全疏忽导致的重大损失。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/414565.html
