Linux运维防火墙firewalld
Linux 防火墙 firewalld 安装与端口管理指南
| 6 分钟阅读
前言
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 |
掌握这些命令基本覆盖日常服务器端口管理的全部需求。