firewalld 详解
firewalld 是 Linux 系统中一个动态防火墙管理工具,取代了传统的 iptables
,提供更灵活、动态的规则配置,支持运行时修改且无需重载服务。以下是其核心概念、常用操作及示例指南:
一、核心概念
-
区域(Zone)
定义网络环境的信任级别,不同区域绑定不同规则。常用预置区域:public
:默认区域,适用于不信任的公共网络。home
:家庭网络,允许部分服务(如SSH、打印机)。internal
:内部网络,信任度高于home
。trusted
:允许所有流量。
-
服务(Service)
预定义规则集合(如http
、ssh
),包含端口和协议,简化配置:sudo firewall-cmd --list-services # 查看允许的服务
-
端口与协议
支持手动开放端口(TCP/UDP):sudo firewall-cmd --add-port=8080/tcp # 开放TCP 8080端口
-
富规则(Rich Rules)
复杂规则配置,支持IP、端口范围、限速等:sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
-
直接规则(Direct Rules)
直接调用底层iptables/ip6tables
命令(高级使用):sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 9090 -j ACCEPT
二、常用命令
功能 | 命令示例 |
---|---|
查看状态 | sudo firewall-cmd --state |
默认区域 | sudo firewall-cmd --get-default-zone |
修改默认区域 | sudo firewall-cmd --set-default-zone=internal |
列出所有区域 | sudo firewall-cmd --list-all-zones |
添加服务 | sudo firewall-cmd --zone=public --add-service=http |
开放端口 | sudo firewall-cmd --zone=public --add-port=443/tcp |
重载配置 | sudo firewall-cmd --reload |
永久生效 | 添加 --permanent 参数,随后重载:sudo firewall-cmd --permanent --add-port=8080/tcp |
三、配置示例
-
允许 HTTP/HTTPS 流量
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd --reload
-
限制 SSH 访问(仅允许 192.168.1.0/24 网段)
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent sudo firewall-cmd --reload
-
转发端口(将80端口转发到内部8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent sudo firewall-cmd --reload
四、注意事项
-
防止锁定
测试规则前确保允许当前SSH连接,或设置宽限期:sudo firewall-cmd --panic-on # 紧急模式(阻断所有流量) sudo firewall-cmd --panic-off # 恢复
-
备份配置
备份/etc/firewalld/
目录下的配置文件(如zones/
和services/
)。 -
日志与监控
查看防火墙日志(通常位于/var/log/messages
或journalctl -u firewalld
)。
五、总结
firewalld 通过动态管理、区域划分和预定义服务简化了防火墙配置,适合需要灵活调整规则的场景(如服务器、多网络环境)。掌握核心概念与常用命令后,可高效保障系统安全,避免网络攻击。
👉 提示: 使用 man firewall-cmd
或 firewall-cmd --help
获取更多参数细节。
以下是对 firewalld 常用命令的详细解析,涵盖基础配置、服务管理、端口操作及高级规则的定义。通过这些命令可以高效管理 Linux 系统的防火墙策略。
firewalld 常用命令
一、基础状态与配置
1. 查看防火墙状态
firewall-cmd --state
- 功能:检查
firewalld
是否正在运行。 - 输出:
running
(运行中)或not running
(未运行)。
2. 查看默认区域
firewall-cmd --get-default-zone
- 功能:显示当前默认的防火墙区域(如
public
、home
、internal
)。 - 典型场景:确认新网络接口自动绑定的区域。
3. 修改默认区域
firewall-cmd --set-default-zone=internal
- 功能:将默认区域更改为
internal
(或其他预定义区域)。 - 注意:修改会立即生效,但不影响已绑定的接口。
4. 列出所有区域详情
firewall-cmd --list-all-zones
- 功能:显示所有区域(
zones
)的详细配置(服务、端口、来源IP等)。 - 简化版:使用
--zone=public --list-all
查看特定区域。
二、服务与端口管理
1. 允许服务通过防火墙
firewall-cmd --zone=public --add-service=http
- 功能:在
public
区域允许http
服务(预定义端口80/tcp)。 - 永久生效:添加
--permanent
参数,并执行firewall-cmd --reload
。
2. 移除已允许的服务
firewall-cmd --zone=public --remove-service=ssh
- 功能:在
public
区域移除对ssh
服务的放行。 - 紧急场景:若误封了SSH,通过物理控制台或KVM恢复。
3. 开放自定义端口
firewall-cmd --zone=public --add-port=8080/tcp
- 功能:手动开放TCP端口
8080
。 - 多端口:支持范围
3000-4000/udp
。
4. 查看已开放的端口
firewall-cmd --zone=public --list-ports
三、IP与网络规则
1. 允许特定IP访问
firewall-cmd --zone=public --add-source=192.168.1.10
- 功能:允许来自
192.168.1.10
的所有流量通过public
区域。 - 网段支持:使用
192.168.1.0/24
表示整个子网。
2. 拒绝某IP的流量
firewall-cmd --zone=public --add-source=10.0.0.5 --set-target=DROP
- 功能:将来自
10.0.0.5
的流量全部丢弃。
四、高级规则(Rich Rules)
适用于复杂场景,支持端口、IP、协议等多条件组合。
1. 限速规则(如每秒允许2个连接)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"port port="22" protocol="tcp"limit value="2/s" accept'
2. 拒绝某个IP访问特定端口
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4"source address="203.0.113.50"port port="80" protocol="tcp"reject'
五、端口转发与NAT
1. 将外部80端口转发到内部8080
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
- 要求:启用IP伪装(
masquerade
)以实现NAT:
firewall-cmd --zone=public --add-masquerade
六、临时与永久规则
1. 临时规则(测试用)
- 若不添加
--permanent
,规则将在重启后失效。 - 示例:临时允许MySQL端口:
firewall-cmd --zone=public --add-port=3306/tcp
2. 永久规则(需重载生效)
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
- 注意:直接修改配置文件(
/etc/firewalld/
)后也需重载。
七、应急操作
1. 紧急阻断所有流量
firewall-cmd --panic-on
- 恢复命令:
firewall-cmd --panic-off
八、命令总结表
类别 | 命令示例 |
---|---|
服务管理 | firewall-cmd --add-service=ftp --permanent |
端口管理 | firewall-cmd --remove-port=9090/udp |
IP规则 | firewall-cmd --add-source=172.16.0.0/16 --zone=trusted |
富规则 | firewall-cmd --add-rich-rule='rule family="ipv6" drop' --permanent |
重载配置 | firewall-cmd --reload |
九、注意事项
- 操作顺序:建议先测试临时规则,确认无误后再保存为永久规则。
- 防锁定:修改远程服务(如SSH)规则时,确保留有恢复途径。
- 日志监控:通过
journalctl -u firewalld
跟踪防火墙行为。
掌握这些命令后,可灵活应对服务器部署、网络隔离、端口转发等典型场景。