在 Rocky Linux 中,如何通过 firewalld 配置区域并管理防火墙?

问题浏览数Icon
39
问题创建时间Icon
2025-03-20 03:42:00
回答 | 共 5 个
作者头像
COCO999

在Rocky Linux中通过firewalld管理防火墙的核心在于理解区域(Zone)机制与规则优先级。根据经验,建议遵循以下步骤:

  1. 区域规划

    • 预先定义不同网络场景(如public/dmz/internal)的zone,使用firewall-cmd --get-zones查看默认zone列表
    • 通过firewall-cmd --set-default-zone=internal设置默认zone,避免直接修改public zone
  2. 服务管理

    • 优先使用预置服务(firewall-cmd --get-services)而非直接开放端口,如firewall-cmd --add-service=http --permanent
    • 对自定义服务建议新建service XML文件到/etc/firewalld/services
  3. 规则持久化

    • 所有临时规则必须通过--runtime-to-permanent固化,避免服务重启失效
    • 定期备份/etc/firewalld目录,特别是在批量修改前
  4. 高级防护

    • 使用rich rule处理复杂场景,如firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh log prefix="ssh_attempt" level=notice accept'
    • 启用panic-on模式前需确认应急访问通道
  5. 排错流程

    • 检查firewall-cmd --state与journalctl -u firewalld
    • 使用--timeout参数测试临时规则效果
    • 当规则冲突时,zone优先级顺序为:绑定接口的zone > 默认zone

最佳实践是保持最小开放原则,通过nmap localhost定期验证规则有效性。对生产环境建议采用ansible等工具进行配置管理,避免人工操作失误。

作者头像
fengyun22

在Rocky Linux中,使用firewall-cmd命令配置区域(如设置默认区域、添加服务)并通过--reload--runtime-to-permanent管理规则,使用systemctl启停firewalld服务即可。

作者头像
thunderwing77
  1. 查看当前区域及配置

    firewall-cmd --get-active-zones          # 查看活动区域
    firewall-cmd --get-default-zone         # 查看默认区域
    firewall-cmd --zone=public --list-all   # 查看指定区域规则
  2. 修改默认区域

    firewall-cmd --set-default-zone=internal  # 设置默认区域(临时)
    firewall-cmd --permanent --set-default-zone=internal  # 永久生效
    firewall-cmd --reload                    # 重载配置
  3. 分配接口到区域

    firewall-cmd --zone=internal --change-interface=eth0  # 临时分配接口
    firewall-cmd --permanent --zone=internal --add-interface=eth0  # 永久分配
  4. 管理服务/端口

    firewall-cmd --zone=public --add-service=http        # 开放HTTP服务(临时)
    firewall-cmd --zone=public --add-port=8080/tcp       # 开放端口(临时)
    firewall-cmd --permanent --zone=public --add-service=http  # 永久生效
    firewall-cmd --reload
  5. 应急处理

    firewall-cmd --panic-on               # 阻断所有连接(紧急模式)
    firewall-cmd --panic-off              # 关闭紧急模式
    firewall-cmd --list-lockdown-whitelist # 查看应急白名单
  6. 保存与重载

    firewall-cmd --runtime-to-permanent   # 将临时规则保存为永久
    firewall-cmd --reload                 # 应用永久配置

验证命令

firewall-cmd --list-all-zones            # 查看所有区域详细规则
firewall-cmd --check-config             # 检查配置合法性
作者头像
frostmoon88

是否考虑过直接使用nftables进行规则管理,它提供了更底层的流量控制与更简洁的语法?

作者头像
cloudfeng99

在Rocky Linux中,通过firewalld管理防火墙需遵循以下核心步骤:

  1. 区域配置

    • 使用firewall-cmd --get-zones查看所有区域,firewall-cmd --get-default-zone确认当前默认区域。
    • 设置默认区域:firewall-cmd --set-default-zone=public(例如设为public)。
  2. 服务与端口管理

    • 允许HTTP/HTTPS服务:firewall-cmd --zone=public --add-service=http --add-service=https --permanent
    • 开放自定义端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent
  3. 源IP控制

    • 绑定源IP到特定区域:firewall-cmd --zone=trusted --add-source=192.168.1.0/24
  4. 高级操作

    • 创建自定义区域:firewall-cmd --new-zone=custom_zone --permanent,需重载生效(firewall-cmd --reload)。
    • 启用应急模式阻断所有流量:firewall-cmd --panic-on,恢复用--panic-off
  5. 持久化与验证

    • 所有修改需加--permanent参数并执行firewall-cmd --reload持久化配置。
    • 验证规则:firewall-cmd --list-allfirewall-cmd --list-ports

注意:建议先在非生产环境测试规则,避免误操作导致服务中断。复杂场景可结合多个区域与富规则(rich rules)实现精细控制。