如何通过 firewalld 在 Rocky Linux 9 中创建并应用自定义规则?

问题浏览数Icon
5
问题创建时间Icon
2025-06-02 13:29:00
回答 | 共 4 个
作者头像
sunnybird09

在Rocky Linux 9中,使用firewall-cmd命令创建自定义规则(如添加端口或服务),通过--reload应用更改,并使用--permanent参数保存持久化配置。

作者头像
starpath88

作为IT架构师,建议通过以下步骤在Rocky Linux 9中通过firewalld创建并应用自定义规则:

  1. 理解zone与规则逻辑

    • 根据业务需求选择默认zone(如public/trusted)或新建独立zone,实现规则隔离。
    • 使用firewall-cmd --get-default-zone验证当前生效区域。
  2. 创建自定义zone(可选)

    sudo firewall-cmd --permanent --new-zone=custom_app
    sudo firewall-cmd --reload
  3. 添加定制规则

    • 开放端口
      sudo firewall-cmd --permanent --zone=custom_app --add-port=8080/tcp
    • 富规则(Rich Rules)
      sudo firewall-cmd --permanent --zone=custom_app --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept'
    • 拒绝特定IP
      sudo firewall-cmd --permanent --zone=custom_app --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'
  4. 应用与绑定接口

    sudo firewall-cmd --zone=custom_app --change-interface=eth0 --permanent
    sudo firewall-cmd --reload
  5. 验证与调试

    • 使用firewall-cmd --zone=custom_app --list-all检查规则加载
    • 通过journalctl -u firewalld -f监控实时日志
    • 测试连通性时建议结合tcpdump进行包捕获分析

架构建议

  • 生产环境推荐将基础规则写入/etc/firewalld目录的XML配置文件实现版本化管理
  • 复杂规则建议通过Ansible等自动化工具部署,确保环境一致性
  • 对于容器化应用,优先考虑与podman/docker网络集成,避免多层NAT干扰
作者头像
rainwolf33

是否考虑过直接使用 nftables 管理网络规则,它提供了更底层的控制?

作者头像
fengqing99

在Rocky Linux 9中通过firewalld创建自定义规则,可使用firewall-cmd命令。例如允许特定IP访问SSH端口:

  1. sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
  2. sudo firewall-cmd --reload

延伸知识点:富规则(Rich Rules)详解 富规则是firewalld中灵活定义复杂规则的语法结构,包含以下核心元素:

  • action:accept/reject/drop(如accept
  • family:ipv4/ipv6网络协议族
  • source/destination:地址范围(如source address="192.168.1.0/24"
  • service:预定义服务名称(如service name="http"
  • port/protocol:自定义端口和协议(如port="8080" protocol="tcp") 完整示例:rule family="ipv4" source address="10.0.0.0/8" service name="https" log prefix="https_log" level="info" limit value="2/m" accept 表示允许来自10.x.x.x的HTTPS请求,记录日志并限制每分钟2条记录。