XYCOVO CONSOLE KURISU · WEB 渗透 / AI 辅助攻防 ONLINE
#028 · 2025-01-10✓ PASS

Firewalld 防火墙

RHEL9 环境下 Firewalld 防火墙的完整配置指南,涵盖 Zone、Service、Port 管理、Panic 模式及富规则。
linux网络安全firewalld防火墙AUTHOR: KURISU

Firewalld 是 RHEL9 默认的动态防火墙,基于 Zone 和 Service 简化流量管理,底层使用 nftables。


一、Firewalld 概述

Firewalld 是一个动态可定制的防火墙守护进程,修改规则无需重启服务。它使用 Zone(区域)Service(服务) 的概念:

  • Zone:预定义的规则集,网络接口可以分配到不同 Zone
  • Service:预定义规则,覆盖特定服务所需的端口和协议
# 查看当前后端
grep FirewallBackend /etc/firewalld/firewalld.conf
# FirewallBackend=nftables (默认)

二、Zone 区域管理

预定义区域

区域说明
block拒绝所有入站连接,返回 ICMP 拒绝消息
dmz非军事区,有限访问内部网络
drop丢弃所有入站数据包,无任何通知
external外部网络,用于路由器,启用伪装
home家庭网络,信任其他计算机
internal内部网络,主要信任其他计算机
public公共区域(默认),不信任其他计算机
trusted信任区,接受所有网络连接
work工作区域,基本信任其他计算机

区域操作

# 查看所有区域
firewall-cmd --get-zones

# 查看默认区域
firewall-cmd --get-default-zone

# 查看当前区域所有设置
firewall-cmd --list-all

# 查看指定区域
firewall-cmd --list-all --zone=home

# 修改默认区域
firewall-cmd --set-default-zone=dmz

# 创建自定义区域
firewall-cmd --new-zone=testzone --permanent
firewall-cmd --reload

三、Service 服务管理

服务是端口、协议、目标地址的集合,添加服务可自动打开所需端口。

# 查看所有预定义服务
firewall-cmd --get-services

# 查看当前区域允许的服务
firewall-cmd --list-services

# 添加服务
firewall-cmd --add-service=http
firewall-cmd --add-service=https --permanent

# 移除服务
firewall-cmd --remove-service=ftp

# 使运行时设置永久生效
firewall-cmd --runtime-to-permanent

# 重新加载
firewall-cmd --reload

自定义服务

# 创建新服务
firewall-cmd --new-service=myapp --permanent

# 编辑服务配置文件
vim /etc/firewalld/services/myapp.xml

服务 XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>Custom Application Service</description>
  <port protocol="tcp" port="8080"/>
  <port protocol="udp" port="8081"/>
</service>

四、Port 端口管理

# 查看已开放端口
firewall-cmd --list-ports

# 开放端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=3306/tcp --permanent

# 开放端口范围
firewall-cmd --add-port=8000-8100/tcp

# 关闭端口
firewall-cmd --remove-port=8080/tcp

五、紧急 Panic 模式

在遭受攻击时,立即切断所有网络流量:

# 启用紧急模式(所有网络流量停止)
firewall-cmd --panic-on

# 关闭紧急模式(恢复永久设置)
firewall-cmd --panic-off

# 查看紧急模式状态
firewall-cmd --query-panic

警告:启用 Panic 模式后只能通过物理访问或串行控制台恢复!


六、Rich Rules 富规则

富规则提供更精细的流量控制:

# 允许特定 IP 访问特定端口
firewall-cmd --add-rich-rule='
  rule family="ipv4"
  source address="192.168.1.100"
  port protocol="tcp" port="22" accept'

# 限制连接速率
firewall-cmd --add-rich-rule='
  rule family="ipv4"
  service name="ssh"
  limit value="5/m"
  accept'

# 记录并丢弃
firewall-cmd --add-rich-rule='
  rule family="ipv4"
  source address="10.0.0.0/8"
  log prefix="DROP_NET: " level="info"
  drop'

七、端口转发与伪装

# 启用伪装(NAT)
firewall-cmd --add-masquerade --permanent

# 端口转发:外部 8080 → 内部 80
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80

# 转发到其他主机
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10

八、服务控制命令

# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

# 开机自启
systemctl enable firewalld
systemctl disable firewalld

# 屏蔽服务(禁止启动)
systemctl mask firewalld
systemctl unmask firewalld

# 查看状态
systemctl status firewalld
firewall-cmd --state

九、最佳实践

  1. 最小权限原则:只开放必需的服务和端口
  2. 定期审计firewall-cmd --list-all 检查当前规则
  3. 配置持久化:修改后执行 --runtime-to-permanent 或使用 --permanent
  4. SELinux 配合:防火墙与 SELinux 双重防护,setenforce 1
  5. 默认 Zone:生产环境建议使用 publicdmz

← #027 SELinux 安全管理…#029 Kali Linux 入门… →