如何通过 firewalld 在 Rocky Linux 9 中配置端口映射?

问题浏览数Icon
38
问题创建时间Icon
2025-06-14 05:49:00
作者头像
frostwave66

要在Rocky Linux 9中通过firewalld配置端口映射,需使用firewall-cmd工具。例如,将80端口的请求转发到192.168.1.100的8080端口:

  1. 启用IP转发:echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p
  2. 添加端口映射:firewall-cmd --permanent --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.100'
  3. 重载防火墙:firewall-cmd --reload

延伸知识点:Firewalld的富规则(Rich Rules) 富规则允许针对复杂场景定制流量控制,包含源/目标地址、端口、协议等条件。语法结构为: rule [family=ipv4/ipv6] [source/destination address] [port] [protocol] [action]

示例:

  • 允许特定IP访问SSH:--add-rich-rule='rule family=ipv4 source address=192.168.1.50 service name=ssh accept'
  • 拒绝来自10.0.0.0/24的80端口流量:--add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=80 protocol=tcp reject' 规则需通过--permanent永久保存,--reload后生效。富规则优先级按添加顺序执行,建议通过--list-rich-rules验证配置。

更多回答

作者头像
fengling01

在Rocky Linux 9中通过firewalld配置端口映射,需结合NAT规则与端口转发。步骤如下:

  1. 启用IP转发:编辑 /etc/sysctl.conf,设置 net.ipv4.ip_forward=1,执行 sysctl -p 生效。

  2. 配置外部接口伪装

    firewall-cmd --zone=public --add-masquerade --permanent
  3. 添加端口转发规则(例如将外部80端口映射到内网192.168.1.100的8080端口):

    firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent
  4. 重载规则

    firewall-cmd --reload

注意

  • 若目标地址与防火墙同主机,可省略 toaddr 参数。
  • 使用 --permanent 确保规则持久化。
  • 优先通过 firewall-cmd --list-all-zones 确认接口所属Zone。
  • 若转发失败,检查SELinux上下文或临时禁用SELinux排错。
作者头像
eceagle33

使用 firewall-cmd --add-forward-port=port=外部端口:proto=tcp:toport=内部端口:toaddr=目标IP 配置端口映射,启用masquerade并重载防火墙 (--permanent 参数保存,--reload 生效)。

作者头像
pixelglow12

在Rocky Linux 9中通过firewalld配置端口映射的步骤如下:

  1. 启用IP转发

    • 修改 /etc/sysctl.confnet.ipv4.ip_forward=1
    • 执行 sysctl -p 生效
  2. 配置防火墙规则

    
    # 开启伪装(NAT)
    sudo firewall-cmd --zone=public --add-masquerade --permanent

添加端口映射(例:将外部80端口映射到192.168.1.100:8080)

sudo firewall-cmd --zone=public \ --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 \ --permanent

重载配置

sudo firewall-cmd --reload


3. **验证配置**
```bash
firewall-cmd --list-all --zone=public  # 查看masquerade和forward-port规则
curl http://公网IP:80                   # 测试映射是否生效

注意

  • 若目标地址在本地,可省略 toaddr
  • 映射外部端口需确保未被其他服务占用
  • 若存在SELinux限制,需配合 semanage 调整策略
作者头像
firestone77
  1. 开启IP转发:

    
    sudo sysctl -p```
  2. 添加防火墙伪装(NAT): sudo firewall-cmd --permanent --zone=public --add-masquerade

  3. 配置端口映射(示例:将公网IP的80端口映射到192.168.1.100:8080):

    
    --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100```
  4. 重新加载配置: sudo firewall-cmd --reload

  5. 验证规则: sudo firewall-cmd --list-all (确认masquerade和forward-port存在)

作者头像
longjian01

在Rocky Linux 9中通过firewalld配置端口映射(DNAT)需遵循以下实战经验:

  1. 基础准备

    • 确认firewalld状态:systemctl status firewalld
    • 启用IP伪装(NAT前置条件):firewall-cmd --permanent --zone=public --add-masquerade
  2. 端口映射(示例将外部80映射到192.168.10.20:8080)

    firewall-cmd --permanent --zone=public \
    --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.10.20'
  3. 重载配置:firewall-cmd --reload

常见挑战及解决方案:

  • 转发失败:检查net.ipv4.ip_forward=1(/etc/sysctl.conf)
  • 规则不持久化:必须使用--permanent参数并reload
  • SELinux拦截:临时setsebool -P zebra_write_config 1
  • 物理/虚拟交换机限制:检查网桥设备的firewalld zone绑定
  • 多网卡路由:推荐配合策略路由工具(iproute2)使用

验证方法:

  • 抓包验证:tcpdump -ni [接口名] port 80
  • 外部测试:curl -I http://公网IP
  • 规则检查:firewall-cmd --list-rich-rules