在CentOS 7系统中,防火墙管理主要通过firewalld服务实现,相比传统的iptables,firewalld支持动态规则更新、区域管理(zone)和更丰富的配置选项,以下是CentOS 7防火墙的核心命令及使用场景,涵盖基础操作、区域管理、端口服务控制、富规则配置等内容,并附常见问题解答。

防火墙基础操作
-
启动与停止服务
- 启动防火墙:
systemctl start firewalld
- 停止防火墙:
systemctl stop firewalld
- 设置开机自启:
systemctl enable firewalld
- 禁用开机自启:
systemctl disable firewalld
- 查看服务状态:
systemctl status firewalld
- 启动防火墙:
-
运行时状态与配置
- 查看防火墙运行状态:
firewall-cmd --state
- 重新加载配置(不中断连接):
firewall-cmd --reload
- 查看默认区域:
firewall-cmd --get-default-zone
- 设置默认区域:
firewall-cmd --set-default-zone=public
- 查看防火墙运行状态:
区域(Zone)管理
区域是firewalld的核心概念,根据网络环境(如 trusted、public、dmz 等)定义不同的信任级别。
- 查看所有区域:
firewall-cmd --get-active-zones
- 查看指定区域详情:
firewall-cmd --zone=public --list-all
- 将接口绑定到区域:
firewall-cmd --zone=public --add-interface=eth0
- 移除接口绑定:
firewall-cmd --zone=public --remove-interface=eth0
- 设置区域默认目标(如 ACCEPT、DROP):
firewall-cmd --zone=public --set-target=DROP
常见区域说明:
| 区域名称 | 默认策略 | 适用场景 |
|----------|----------|----------|
| public
| 拒绝入站,允许出站 | 公共网络(如互联网) |
| trusted
| 允许所有 | 可信网络(如内网) |
| block
| 拒绝所有连接 | 严格隔离的隔离区 |
| dmz
| 限制性访问 | 非军事区(如对外服务器) |

端口与服务控制
-
开放/关闭端口
- 临时开放(重启后失效):
firewall-cmd --zone=public --add-port=8080/tcp
- 永久开放:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 查看已开放端口:
firewall-cmd --zone=public --list-ports
- 关闭端口:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
- 临时开放(重启后失效):
-
管理预定义服务
- 查看所有预定义服务:
firewall-cmd --get-services
- 开启HTTP服务:
firewall-cmd --zone=public --add-service=http --permanent
- 关闭SSH服务:
firewall-cmd --zone=public --remove-service=ssh --permanent
- 查看所有预定义服务:
常见服务端口映射:
| 服务名称 | 协议 | 端口 | 用途 |
|----------|------|------|------|
| ssh
| TCP | 22 | 安全远程登录 |
| http
| TCP | 80 | Web服务 |
| https
| TCP | 443 | 加密Web服务 |
| ftp
| TCP | 21 | 文件传输 |
富规则(Rich Rules)高级配置
富规则用于实现更精细的控制,如基于IP、协议、端口的复杂策略。

- 示例1:拒绝特定IP访问80端口
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="80" protocol="tcp" reject' --permanent
- 示例2:允许192.168.1.0/24网段访问所有服务
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent
- 删除富规则:通过
--remove-rich-rule
参数,规则内容需与添加时完全一致。
日志与调试
- 启用区域日志:
firewall-cmd --zone=public --set-target=DROP && firewall-cmd --zone=public --add-service=http
- 查看防火日志:
journalctl -u firewalld
- 调试模式(临时开启详细日志):
firewall-cmd --debug
防火墙规则持久化
默认情况下,临时规则(无--permanent
)会在重启后失效,生产环境建议始终使用--permanent
参数,并通过firewall-cmd --reload
使规则立即生效。
相关问答FAQs
Q1: 如何解决防火墙阻止SSH连接的问题?
A1: 首先检查SSH服务是否已开放:firewall-cmd --zone=public --list-services
,若未开放,执行firewall-cmd --zone=public --add-service=ssh --permanent
并重载规则,若问题依旧,检查富规则或区域目标是否为DROP
,可通过firewall-cmd --zone=public --set-target=ACCEPT
调整默认策略。
Q2: 如何将防火墙规则从临时切换为永久?
A2: 临时规则需手动添加--permanent
参数后重新执行,临时开放的端口8080
需改为:firewall-cmd --zone=public --add-port=8080/tcp --permanent
,然后执行firewall-cmd --reload
使永久规则生效,临时规则会在重启后自动失效,建议生产环境始终使用永久规则。