在 Linux 运维中,防火墙配置是服务器安全和服务可访问性的基础能力。firewalld 是很多主流发行版中常见的动态防火墙管理工具,适合用来开放端口、允许服务访问、限制来源以及管理不同网络区域策略。
一、firewalld 是什么?
firewalld 是 Linux 下常见的防火墙管理服务,底层通常基于 nftables 或 iptables,通过更易用的方式对网络访问策略进行统一管理。
它的核心特点包括:
日常管理时,通常配合 firewall-cmd 命令使用。
二、语法与参数
firewall-cmd 的日常使用,核心就是围绕“查看状态、查看规则、开放端口、开放服务、永久生效、重载配置”这几类操作展开。
常见参数和用法如下:
firewall-cmd --state:查看防火墙是否运行firewall-cmd --get-active-zones:查看当前活动区域firewall-cmd --list-all:查看当前区域详细规则firewall-cmd --list-ports:查看当前区域已开放端口firewall-cmd --get-default-zone:查看默认 zonefirewall-cmd --set-default-zone=public:设置默认 zonefirewall-cmd --add-port=80/tcp:临时开放 80 端口firewall-cmd --remove-port=80/tcp:关闭指定端口firewall-cmd --add-service=http:按服务名放行firewall-cmd --remove-service=http:取消放行服务firewall-cmd --add-source=192.168.1.0/24:允许指定来源firewall-cmd --permanent --add-service=http:永久放行 HTTP 服务firewall-cmd --reload:重载规则使永久配置生效
示例:
firewall-cmd --statefirewall-cmd --list-allfirewall-cmd --list-portsfirewall-cmd --permanent --add-port=3306/tcpfirewall-cmd --permanent --add-service=httpsfirewall-cmd --reload
三、最常用命令组合
1. 查看防火墙状态
如果返回 running,说明 firewalld 服务正在运行。
2. 查看当前活动区域
firewall-cmd --get-active-zones
可以看到当前网卡接口绑定到了哪个 zone,比如 public、internal 等。
3. 查看当前区域规则
这条命令常用于快速确认已经放行了哪些服务、端口和来源。
4. 查看当前已开放端口
firewall-cmd --list-ports
如果只想快速看当前 zone 已经放行了哪些端口,这条命令比 --list-all 更直接。
5. 开放指定端口
firewall-cmd --add-port=8080/tcp
这类操作默认只对当前运行时配置生效,系统重启后可能失效。
6. 永久开放端口并重载
firewall-cmd --permanent --add-port=8080/tcpfirewall-cmd --reload
这是生产环境中更常见的写法。
四、实战示例
1. 开放 Web 服务端口
firewall-cmd --permanent --add-service=httpfirewall-cmd --permanent --add-service=httpsfirewall-cmd --reload
相比直接开放端口,按服务名放行更直观,也更方便维护。
2. 放行应用自定义端口
firewall-cmd --permanent --add-port=8080/tcpfirewall-cmd --reload
适用于 Java、Go、Node.js 等应用监听的自定义端口。
3. 删除不再使用的端口
firewall-cmd --permanent --remove-port=3306/tcpfirewall-cmd --reload
服务下线或迁移后,建议及时关闭不再需要的端口。
4. 只允许指定来源访问
firewall-cmd --permanent --add-source=192.168.1.0/24firewall-cmd --reload
适合内网管理、数据库白名单等场景。
5. 查看某个 zone 的规则
firewall-cmd --zone=public --list-all
当机器存在多个 zone 时,明确指定 zone 更稳妥。
五、运行时配置与永久配置的区别
firewalld 有两套配置:
常见原则:
- 修改永久配置后,记得执行
firewall-cmd --reload
例如:
firewall-cmd --add-port=9090/tcpfirewall-cmd --permanent --add-port=9090/tcpfirewall-cmd --reload
六、firewalld 与 iptables 的区别
firewalld:更偏向高层管理,支持 zone 和动态更新iptables:更底层、更细粒度,但配置和维护复杂度更高
在现代 Linux 发行版中,日常服务器运维通常优先使用 firewalld;如果需要非常复杂的规则控制,才会进一步接触底层规则工具。
七、常见问题与建议
为什么明明开放了端口,外部还是访问不到? 除了防火墙规则,还要检查服务是否真的监听该端口、监听地址是否正确,以及云平台安全组是否已放行。
为什么加了规则,重启后失效? 大概率是只修改了运行时配置,没有加 --permanent。
开放端口和开放服务有什么区别? 开放服务更语义化,例如 http、https、ssh;开放端口更直接,适合自定义应用。
修改完永久配置后为什么没生效? 因为还没有执行 firewall-cmd --reload。
生产环境怎么更稳妥? 先 --list-all 看清当前规则,再逐步添加或删除,避免误封 SSH 等关键访问通道。
八、总结
firewalld 是 Linux 服务器防火墙管理的常用工具。建议优先熟练掌握以下几条:
firewall-cmd --statefirewall-cmd --get-active-zonesfirewall-cmd --list-allfirewall-cmd --permanent --add-port=8080/tcpfirewall-cmd --permanent --add-service=httpfirewall-cmd --reload
掌握这些基础命令后,大多数“查看防火墙状态、开放端口、放行服务、持久化规则”的场景都能顺利处理。