前言
firewalld 是 CentOS 7 / RHEL 7 及更新版本默认的防火墙管理工具,基于 zone 模型提供动态管理能力,相比旧版 iptables 上手门槛更低。本文覆盖从安装到端口放行的完整操作流程。
一、安装 firewalld
yum install firewalld -y
注意:CentOS 7 及以上版本通常已预装。如果系统用的是 dnf(CentOS 8+ / Fedora),将 yum 替换为 dnf 即可。
二、启停管理
启动与查看状态
# 启动防火墙
systemctl start firewalld
# 查看运行状态
systemctl status firewalld.service
systemctl status 输出中关注 Active: active (running) 表示已运行。
停止与禁用
# 临时关闭(重启后恢复)
systemctl stop firewalld.service
# 永久禁用(禁止开机自启)
systemctl disable firewalld
重要区别:stop 只影响当前运行态,重启后会恢复;disable 控制开机自启。生产环境建议用 disable 而非直接卸载。
三、开启端口
添加端口规则
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
参数说明
参数含义--zone作用域,public 为默认公共区域--add-port端口与协议,格式 端口号/协议(tcp / udp)--permanent写入永久配置,不加此参数仅当前会话有效,重启后丢失
使规则生效
firewall-cmd --reload
--reload 会重新加载配置,不会中断已有连接,比 iptables 的 restart 更加安全。
完整操作流程
# 1. 开放端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
# 2. 重载配置使其生效
firewall-cmd --reload
# 3. 验证端口是否已开放
firewall-cmd --zone=public --list-ports
输出示例:
443/tcp 8081/tcp
四、常用检查命令
查看已开放的所有端口
firewall-cmd --zone=public --list-ports
查看完整规则列表(含服务、端口、富规则)
firewall-cmd --zone=public --list-all
检查某个端口是否已开放
firewall-cmd --zone=public --query-port=443/tcp
返回 yes 表示已开放,no 表示未开放。
查看连接状态(netstat)
netstat -an | grep 443
参数:
参数含义-a显示所有连接和监听端口-n以数字形式显示地址和端口(不解析域名)
现代系统推荐用 ss 替代 netstat:ss -tlnp | grep 443
五、Zone 简介
firewalld 预置了多个 zone,安全等级从高到低:
Zone信任级别适用场景drop最低丢弃所有入站包,无任何回复block很低拒绝所有入站,返回拒绝消息public默认不信任其他计算机,仅开放指定端口external中等NAT 网关场景,开启 IP 伪装dmz中等隔离区,允许部分入站work较高工作环境,基本信任home较高家庭环境internal较高内部网络trusted最高接受所有连接
日常管理通常使用 public 即可。
查看当前默认 zone
firewall-cmd --get-default-zone
切换默认 zone
firewall-cmd --set-default-zone=home
总结速查
操作命令安装yum install firewalld -y启动systemctl start firewalld查看状态systemctl status firewalld.service停止systemctl stop firewalld.service永久禁用systemctl disable firewalld开放端口firewall-cmd --zone=public --add-port=443/tcp --permanent重载配置firewall-cmd --reload查看已开放端口firewall-cmd --zone=public --list-ports查看完整规则firewall-cmd --zone=public --list-all查询单个端口firewall-cmd --zone=public --query-port=443/tcp查看端口连接ss -tlnp | grep 443
掌握这些命令基本覆盖日常服务器端口管理的全部需求。