firewalld

Firewalld 是 Linux 中用于管理防火墙规则的工具,主要用于 RHEL 7+CentOS 7+Fedora 等基于 systemd 的系统。相比传统的 iptablesip6tables,它提供了更高级的抽象(如“区域”和“服务”),并支持动态更新规则而无需重启服务。


🔍 一、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

🔒 五、安全建议

  1. 默认拒绝所有流量

    sudo firewall-cmd --set-default-zone=drop
    
  2. 定期检查规则

    sudo firewall-cmd --list-all-zones
    
  3. 避免开放不必要的端口/服务,如非必须不开放 80/tcp443/tcp 等。


🔄 六、Firewalld 与 iptables 的关系

  • Firewalld 是基于 iptables/nftables 的抽象层。

  • 它会自动生成对应的 iptables/nftables 规则,并通过 firewall-cmd 控制这些规则。


📚 七、参考资料


Comment

华计科技: 中华自主研发设计

华计科技为您提供咨询服务,IT技术支持和项目开发: (+86) 156 2654 0671

联系我们