Linux firewalld 防火墙的详细用法及示例,涵盖规则管理、端口控制、服务配置等核心操作:


二、firewalld 防火墙 (CentOS/RHEL 系)

1. 基础操作

# 查看状态
sudo firewall-cmd --state # 检查运行状态
sudo firewall-cmd --list-all # 显示所有规则(含区域、服务、端口)

# 启用/禁用
sudo systemctl start firewalld # 启动
sudo systemctl enable firewalld # 开机自启
sudo systemctl stop firewalld # 停止

2. 区域(Zone)管理

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

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

# 修改默认区域(如设为 `dmz`)
sudo firewall-cmd --set-default-zone=dmz

3. 规则管理

开放端口/服务

# 永久开放 TCP 80 端口
sudo firewall-cmd --permanent --add-port=80/tcp

# 开放预定义服务(如 http)
sudo firewall-cmd --permanent --add-service=http

# 允许来自特定 IP 的 SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" service name="ssh" accept'

# 重新加载配置(必须执行!)
sudo firewall-cmd --reload

阻止 IP/端口

# 阻止单个 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'

# 阻止整个网段
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" drop'

# 关闭端口
sudo firewall-cmd --permanent --remove-port=3306/tcp

删除规则

# 删除已开放的端口
sudo firewall-cmd --permanent --remove-port=80/tcp

# 删除服务规则
sudo firewall-cmd --permanent --remove-service=http

# 删除富规则(需完全匹配原规则)
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="203.0.113.5" service name="ssh" accept'

4. 高级功能

端口转发(NAT)

# 将 8080 端口转发到 192.168.1.10:80
sudo firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10
sudo firewall-cmd --reload

IP 伪装(Masquerade)

# 启用 IP 伪装(用于 NAT)
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload

临时与永久规则

# 临时开放端口(重启后失效)
sudo firewall-cmd --add-port=9000/tcp

# 将临时规则转为永久
sudo firewall-cmd --runtime-to-permanent

四、注意事项

  1. 规则顺序:firewalld 使用优先级机制。
  2. 持久化:firewalld 需加 --permanent 后执行 --reload
  3. 服务依赖:确保防火墙允许的端口与服务的实际监听端口一致。
  4. 测试规则:修改后使用 telnetnmap 验证端口是否开放。