Linux防火墙firewalld规则配置从入门到实战
准备:检查firewalld服务状态和区域
在开始配置firewalld规则之前,先确认你的系统是否已经安装并运行了firewalld。
大多数CentOS 7/8和RHEL系统默认都带有这个防火墙服务。
打开终端(可以直接用SSH连接服务器控制台),依次执行以下命令:
systemctl status firewalld
如果看到 active (running) 的绿色字样,说明服务已启动。
如果显示 inactive 或 dead,需要先启动服务并设置开机自启:
systemctl start firewalld
systemctl enable firewalld
下面查看当前默认区域(zone)。
firewalld 通过区域管理不同的网络接口,常用区域有 public、internal、trusted 等。
默认区域通常是 public,我们大部分规则都加在这个区域:
firewall-cmd --get-default-zone
记住当前默认区域名称,后面添加规则时如果不指定区域,就会加到默认区域。
操作:添加、删除与查看firewalld规则的核心命令
1. 开放某个端口(例如开放Web服务8080端口)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
参数说明:
--zone=public指定区域,如果默认区域就是public可以省略。--add-port=8080/tcp表示开放TCP协议的8080端口。UDP协议则写/udp。--permanent表示永久生效,不加这条参数规则只会临时生效,重启后丢失。
添加完后必须重载防火墙才能让规则生效:
firewall-cmd --reload
2. 开放服务(如http、https、ssh)
firewalld 内置了很多常见服务的定义文件,用服务名比端口号更直观:
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload
3. 查看已开放的规则
查看某个区域的所有开放端口和服务:
firewall-cmd --zone=public --list-all
输出中可以看到 ports 和 services 列表。
也可以只查看端口:
firewall-cmd --zone=public --list-ports
4. 移除一个规则
假如误开放了一个端口,可以这样删除:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
对于服务也是类似,将 --add-service 换成 --remove-service。
避坑:注意防火墙规则被其他安全软件或服务覆盖
很多新手配置完firewalld规则后依然无法访问端口,可能踩了这几种坑:
- 系统还有iptables服务:如果同时运行iptables和firewalld,规则可能冲突。建议只保留一个防火墙管理工具,停止iptables:
systemctl stop iptables && systemctl disable iptables。 - 云平台安全组:阿里云、腾讯云等云服务器除了系统防火墙,还在控制台有“安全组”规则。如果安全组没放通对应端口,即使firewalld放通也访问不了。需要去云平台控制台检查入站/出站规则。
- SELinux干扰:某些端口或服务被SELinux限制,可以用
ausearch -m avc -ts recent查看是否有SELinux拒绝日志,临时关闭测试:setenforce 0。如果确认是SELinux问题,再调整策略。 - 忘记reload:加了
--permanent后必须执行firewall-cmd --reload,或者重启服务才能生效。如果只是临时测试不加--permanent可以立即生效,但重启失效。
验证:测试配置是否生效
在服务器本地测试端口是否监听
netstat -tlnp | grep 8080
或者用 ss 命令:
ss -tlnp | grep 8080
看到 LISTEN 表示服务在监听。
从外部访问测试
在另一台电脑(或相同服务器的另一个终端)通过 telnet 或 curl 测试:
telnet 你的服务器IP 8080
或者用 curl:
curl http://你的服务器IP:8080
如果连接成功或返回页面内容,说明firewalld规则配置正确。
如果连接超时或拒绝,请回头检查云平台安全组和SELinux状态。
遇到问题时,可以查看防火墙日志帮助定位:
journalctl -u firewalld -f
实时显示firewalld日志,能看到被拒绝的连接记录。
总结
只要按照本文步骤检查服务状态、用正确的命令添加规则并重载、排查常见干扰因素,零基础用户也能顺利完成Linux防火墙firewalld规则配置。
如果后续需要更复杂的策略(比如限制来源IP、端口转发等),可以继续研究 --add-rich-rule 参数,不过日常开放服务端口已经足够。
建议将常用命令保存成脚本,方便快速部署新服务器。