当前位置:首页>Linux>Linux命令每日一清单021:firewalld--动态防火墙管理命令速查表

Linux命令每日一清单021:firewalld--动态防火墙管理命令速查表

  • 2026-09-16 12:27:01
Linux命令每日一清单021:firewalld--动态防火墙管理命令速查表

firewalld是Linux系统中新一代的动态防火墙管理工具,在Fedora、RHEL、CentOS及其衍生发行版中作为默认防火墙使用。与传统的iptables不同,firewalld采用区域(zone)和运行时/永久配置分离的设计,支持无需中断现有连接即可动态修改防火墙规则。

firewalld通过firewall-cmd命令行工具进行管理,将网络接口划分为不同的信任区域,每个区域可以独立配置允许的服务、端口、协议等。这种设计使得防火墙管理更加灵活和直观,尤其适合桌面环境、服务器以及复杂网络场景。掌握firewalld是系统管理员保障网络安全的核心技能。

1. 基本命令

命令说明
firewall-cmd --state
检查firewalld是否运行
sudo systemctl start firewalld
启动firewalld服务
sudo systemctl stop firewalld
停止firewalld服务
sudo systemctl enable firewalld
设置开机自启
sudo systemctl disable firewalld
禁用开机自启
sudo firewall-cmd --reload
重新加载规则(不中断连接)
sudo firewall-cmd --complete-reload
完全重载(重置所有连接)

2. 运行时配置与永久配置

默认情况下,firewall-cmd的修改仅影响运行时配置,重启或reload后会丢失。使用--permanent选项持久化规则,然后通过--reload激活。

命令说明
sudo firewall-cmd --add-service=http
允许HTTP服务(仅运行时)
sudo firewall-cmd --add-service=http --permanent
允许HTTP服务(永久生效)
sudo firewall-cmd --reload
激活永久配置
sudo firewall-cmd --runtime-to-permanent
将当前运行时配置保存为永久

3. 区域管理

区域定义了网络连接的信任级别,每个网络接口属于一个区域。

命令说明
firewall-cmd --get-zones
列出所有可用区域
firewall-cmd --get-default-zone
显示默认区域
sudo firewall-cmd --set-default-zone=public
设置默认区域
firewall-cmd --get-active-zones
显示活跃区域及其接口
firewall-cmd --zone=public --list-all
列出区域所有配置
sudo firewall-cmd --zone=public --change-interface=eth0
将接口分配到区域(运行时)
sudo firewall-cmd --zone=public --add-interface=eth0 --permanent
永久分配接口到区域
sudo firewall-cmd --zone=public --remove-interface=eth0
从区域移除接口

常用区域说明:

区域说明
public
公共场所,不接受其他连接,信任范围内连接
trusted
接受所有网络连接
home
家庭网络,信任大部分计算机
work
工作网络,信任大部分计算机
internal
内部网络,信任其他计算机
dmz
隔离区域,仅允许特定服务
block
拒绝所有传入连接
drop
丢弃所有传入连接(无响应)

4. 服务管理

服务是预定义的端口/协议组合,定义文件位于/usr/lib/firewalld/services/。

命令说明
firewall-cmd --get-services
列出所有预定义服务
firewall-cmd --zone=public --list-services
列出区域允许的服务
firewall-cmd --info-service=http
查看服务的端口和协议
sudo firewall-cmd --zone=public --add-service=http --permanent
永久允许HTTP服务
sudo firewall-cmd --zone=public --remove-service=http --permanent
永久移除HTTP服务
sudo firewall-cmd --zone=public --add-service={http,https}
同时添加多个服务

5. 端口管理

当没有预定义服务时,直接开放指定端口。

命令说明
firewall-cmd --zone=public --list-ports
列出区域开放端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
开放TCP 8080端口
sudo firewall-cmd --zone=public --add-port=4000-4500/tcp --permanent
开放端口范围
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
开放UDP 53端口
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
关闭端口

6. 富规则

富规则提供更精细的控制能力,支持源地址、目标地址、端口、协议、动作等条件组合。

命令说明
firewall-cmd --zone=public --list-rich-rules
列出区域富规则
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent
允许来自子网的流量
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10" reject' --permanent
拒绝来自IP的流量
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept' --permanent
允许子网访问SSH
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" drop' --permanent
丢弃来自内网段的流量
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="203.0.113.10" reject' --permanent
移除富规则

7. 地址伪装(NAT)

地址伪装允许内部网络通过防火墙主机访问外部网络,是实现NAT的核心功能。

命令说明
firewall-cmd --zone=public --query-masquerade
检查是否启用伪装
sudo firewall-cmd --zone=public --add-masquerade --permanent
启用地址伪装
sudo firewall-cmd --zone=public --remove-masquerade --permanent
禁用地址伪装
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" masquerade'
为特定子网启用伪装

8. 端口转发

将到达防火墙某个端口的流量转发到其他主机或端口。

命令说明
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
本机端口转发(80->8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 --permanent
转发到其他主机
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080 --permanent
转发到其他主机和端口
sudo firewall-cmd --zone=public --list-forward-ports
列出端口转发规则

注意: 端口转发需要先启用地址伪装(masquerade)。

9. 日志管理

控制被拒绝数据包的日志记录,帮助调试防火墙问题。

命令说明
firewall-cmd --get-log-denied
显示当前日志记录设置
sudo firewall-cmd --set-log-denied=all
记录所有被拒绝的数据包
sudo firewall-cmd --set-log-denied=unicast
仅记录单播被拒绝包
sudo firewall-cmd --set-log-denied=off
关闭被拒绝包日志

10. 常用服务器配置示例

# Web服务器基线配置:

命令说明
sudo firewall-cmd --set-default-zone=public
设置默认区域为public
sudo firewall-cmd --zone=public --add-service=ssh --permanent
允许SSH访问
sudo firewall-cmd --zone=public --add-service=http --permanent
允许HTTP
sudo firewall-cmd --zone=public --add-service=https --permanent
允许HTTPS
sudo firewall-cmd --reload
激活配置
firewall-cmd --zone=public --list-all
验证配置

# 数据库服务器配置:

命令说明
sudo firewall-cmd --zone=internal --add-source=192.168.1.0/24 --permanent
将内部子网分配到internal区域
sudo firewall-cmd --zone=internal --add-service=mysql --permanent
允许MySQL服务
sudo firewall-cmd --zone=public --remove-service=mysql
禁止公网访问MySQL

11. 常用选项速查

选项说明
--state
检查firewalld状态
--reload
重新加载永久规则
--permanent
永久修改(需要reload生效)
--runtime-to-permanent
运行时规则保存为永久
--zone
指定区域
--add-service
添加服务
--remove-service
移除服务
--list-services
列出服务
--add-port
添加端口
--remove-port
移除端口
--list-ports
列出端口
--add-rich-rule
添加富规则
--list-rich-rules
列出富规则
--add-masquerade
启用地址伪装
--query-masquerade
查询伪装状态
--add-forward-port
添加端口转发

12. 故障排查

问题解决方法
FirewallD is not running
启动服务:sudo systemctl start firewalld
规则修改后未生效
添加--permanent后需执行--reload
接口没有分配到正确区域
使用--get-active-zones检查;用--change-interface重新分配
端口仍然无法访问
检查是否有其他规则阻止;查看--list-all确认规则已添加
永久规则丢失
检查是否使用了--runtime-to-permanent保存;确认--permanent选项正确使用
富规则语法错误
使用--add-rich-rule时注意引号匹配;检查IP地址格式
端口转发无效
确认已启用masquerade;检查目标主机可达性

温馨提示: 配置防火墙时建议遵循“最小权限原则”——只开放必要的服务/端口。在生产环境修改规则时,先使用运行时测试(不加--permanent),确认无误后再保存为永久配置。修改SSH相关规则时务必小心,避免把自己锁在外面。使用--list-all定期检查当前生效的规则,确保符合预期。

本文PDF格式下载:

  关注公众号(haopython),请回复: LLTFWD

最新文章

随机文章