firewalld
Firewalld 是 Linux 中用于管理防火墙规则的工具,主要用于 RHEL 7+、CentOS 7+、Fedora 等基于 systemd 的系统。相比传统的 iptables
和 ip6tables
,它提供了更高级的抽象(如“区域”和“服务”),并支持动态更新规则而无需重启服务。
🔍 一、Firewalld 基础概念
1. 区域(Zones)
Firewalld 将网络接口划分为多个 预定义区域,每个区域对应不同的信任级别。
示例区域:
drop
:丢弃所有流量(最严格)block
:拒绝所有流量(类似 drop,但会返回 ICMP 拒绝信息)public
(默认):用于公共网络(如咖啡厅、公司网络)home
:家庭网络trusted
:完全信任的网络接口work
:办公环境
2. 服务(Services)
预定义的服务(如 HTTP、SSH 等),每个服务对应一组端口/协议。
示例:
# 查看可用服务 firewall-cmd --get-services
3. 端口与协议
可手动添加任意端口(TCP/UDP)到区域。
🛠️ 二、Firewalld 的基本使用
1. 安装 Firewalld(如未安装)
# 在 CentOS/RHEL/Fedora 上
sudo yum install firewalld
2. 启动并启用防火墙
# 启动服务
sudo systemctl start firewalld
# 设置开机自启
sudo systemctl enable firewalld
# 检查状态
sudo firewall-cmd --state
sudo systemctl status firewalld
📌 三、常见操作命令
1. 查看当前配置
# 查看所有区域(默认是 public)
firewall-cmd --get-zones
# 查看当前活动的区域和接口
firewall-cmd --get-active-zones
# 查看某个区域的规则
firewall-cmd --zone=public --list-all
2. 添加/删除规则
添加端口(如开放 80 端口 HTTP)
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# --permanent 表示永久生效,重启后不丢失
sudo firewall-cmd --reload # 重新加载配置
添加服务(如开放 SSH)
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
删除规则
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
sudo firewall-cmd --reload
3. 直接操作特定区域
将某接口(如 eth0)分配到
home
区域:
sudo firewall-cmd --zone=home --change-interface=eth0
永久生效后需要重新加载或重启 firewalld。
🚀 四、高级功能
1. 端口转发(Port Forwarding)
将某个端口的流量从一个接口转发到另一个 IP/端口:
# 将 public 区域的 eth0 接收的 80 端口转发到 192.168.1.100:8080(TCP)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:8080
2. 网络地址转换(NAT)
# 将 eth0 接口的流量 NAT 到 192.168.1.100 的 IP 地址(伪装源地址)
sudo firewall-cmd --zone=public --add-masquerade
3. IP 伪装(Masquerading)
# 启用 IP 伪装,用于 NAT 网络(如家庭路由器)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload
🔒 五、安全建议
默认拒绝所有流量:
sudo firewall-cmd --set-default-zone=drop
定期检查规则:
sudo firewall-cmd --list-all-zones
避免开放不必要的端口/服务,如非必须不开放
80/tcp
、443/tcp
等。
🔄 六、Firewalld 与 iptables 的关系
Firewalld 是基于 iptables/nftables 的抽象层。
它会自动生成对应的
iptables
/nftables
规则,并通过firewall-cmd
控制这些规则。
Comment