CentOS9 firewall防火墙

来源:Linux 教程 / 时间:2026-09-03

一 Firewalld基础概念
Firewalld的核心概念是区域(zone) 每个区域定义了不同的信任级别和默认规则
常用区域包括:public(公共区域 默认拒绝入站) internal(内部区域 信任度较高) dmz(隔离区域 允许特定端口) trusted(信任区域 接受所有连接)
理解区域的概念是正确配置firewalld的基础


二 安装与基本操作
# 安装firewalld

yum install -y firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
systemctl stop firewalld

# 查看状态和默认区域

firewall-cmd --state
firewall-cmd --get-default-zone
firewall-cmd --list-all


# 查看所有区域

firewall-cmd --get-zones


三 端口开放与服务管理
使用firewall-cmd命令管理端口和服务规则
推荐使用预定义服务名(如http https ssh)代替端口号 firewalld会自动映射服务到对应端口
临时规则立即生效但重启后丢失 永久规则需添加–permanent参数并reload
常见服务包括HTTP(80/tcp) HTTPS(443/tcp) MySQL(3306/tcp)等

四 区域流量控制
# 设置默认区域为public

firewall-cmd --set-default-zone=public

# 将网卡绑定到特定区域

firewall-cmd --zone=internal --add-interface=eth1

# 允许HTTP流量通过

firewall-cmd --zone=public --add-service=http --permanent

# 开放自定义端口 3000

firewall-cmd --zone=public --add-port=3000/tcp --permanent


# 重载规则使永久规则生效

firewall-cmd --reload

五 富规则(Rich Rule)配置
富规则允许更精细的流量控制 支持根据源IP 目的端口 协议类型和日志记录等条件进行过滤
例如只允许特定IP访问SSH端口 对可疑连接记录日志 限制单个IP的连接速率等
富规则语法类似iptables但更易读

六 IP白名单与黑名单配置
# 创建白名单区域(只允许指定IP访问)

firewall-cmd --permanent --new-zone=whitelist
firewall-cmd --permanent --zone=whitelist --add-source=10.0.0.0/24
firewall-cmd --permanent --zone=whitelist --add-service=ssh
firewall-cmd --permanent --zone=whitelist --add-service=https


# 添加IP黑名单(拒绝特定IP)

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" drop'
firewall-cmd --reload


七 端口转发与地址伪装
Firewalld支持端口转发功能 可以将外部请求的端口转发到内部服务器的其他端口或不同IP地址
配合地址伪装(masquerade)功能 可以实现NAT转发 适用于搭建内部服务和访问外部网络的场景
配置时需确保ip_forward内核参数已启用


八 日志记录与审计
启用防火墙日志记录功能可以帮助安全审计和故障排查
通过配置富规则中的log选项记录被拒绝的连接 将日志输出到系统日志或独立日志文件
结合logwatch或auditd进行日志分析 定期审查防火墙规则的有效性和完整性


九 防火墙策略批量导出与导入
# 导出当前防火墙规则

firewall-cmd --list-all-zones > firewall_backup.txt
cp /etc/firewalld/zones/*.xml /backup/firewalld/

# 批量添加允许的IP列表

for ip in 10.0.0.{1…50}; do
firewall-cmd --permanent --zone=trusted --add-source=$ip
done
firewall-cmd --reload

十 与Fail2ban联动防护
Fail2ban与firewalld配合使用可以实现暴力破解自动防御
Fail2ban监控登录日志 检测到多次认证失败后自动调用firewall-cmd临时封禁攻击者IP
配置灵活的封禁时长和白名单机制 在保障安全的同时避免误封正常用户


十一 Firewalld工作原理深入理解
Firewalld的运行时配置和永久配置分离是其最核心的设计理念
运行时配置立即生效但重启后丢失 永久配置写入XML文件在重启或reload后生效
通过firewall-cmd --runtime-to-permanent命令可以将当前运行时规则持久化
理解这一机制对防火墙运维至关重要 避免在动态调整规则时意外导致规则丢失


十二 多区域协作策略
企业网络中一台服务器可能同时提供面向公网的服务和内网管理接口 这时需要配置多个区域协作
例如将外网网卡绑定到public区域只开放80和443端口 内网网卡绑定到internal区域开放SSH和数据库端口
通过精细的区域划分和区域间规则控制 实现最小权限的网络访问控制原则


十三 防火墙选型与运维管理综合建议
firewalld适合中小规模服务器 配置简单且与RHEL/CentOS生态集成良好
iptables/nftables适合需要精细控制的场景 规则编写灵活但学习曲线较陡
商用防火墙适合大规模企业边界部署 性能高但成本较高
综合建议将Linux软件防火墙用于服务器内部隔离 边界部署专业防火墙或云安全组 构建纵深防御体系

# 查看防火墙状态

systemctl status firewalld

# 启动防火墙
systemctl start firewalld

# 关闭防火墙

systemctl start firewalld

# 重启防火墙

systemctl restart firewalld

# 开机启动防火墙

systemctl enable firewalld

# 开机关闭防火墙

systemctl disable firewalld

#查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)

firewall-cmd --list-all

#查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)

firewall-cmd --list-all-zones

#重新加载配置文件,更新防火墙规则

firewall-cmd --reload

# 查看已开放的端口

firewall-cmd --list-port

# 添加开放80端口

firewall-cmd --zone=public --add-port=80/tcp —-permanent

# 删除80端口

firewall-cmd --zone=public --remove-port=80/tcp —permanent

标签: 防火墙 Centos
客服