使用 firewall-cmd --add-forward-port=port=外部端口:proto=tcp:toport=内部端口:toaddr=目标IP
配置端口映射,启用masquerade并重载防火墙 (--permanent
参数保存,--reload
生效)。
如何通过 firewalld 在 Rocky Linux 9 中配置端口映射?
在Rocky Linux 9中通过firewalld配置端口映射,需结合NAT规则与端口转发。步骤如下:
-
启用IP转发:编辑
/etc/sysctl.conf
,设置net.ipv4.ip_forward=1
,执行sysctl -p
生效。 -
配置外部接口伪装:
firewall-cmd --zone=public --add-masquerade --permanent
-
添加端口转发规则(例如将外部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
-
重载规则:
firewall-cmd --reload
注意:
- 若目标地址与防火墙同主机,可省略
toaddr
参数。 - 使用
--permanent
确保规则持久化。 - 优先通过
firewall-cmd --list-all-zones
确认接口所属Zone。 - 若转发失败,检查SELinux上下文或临时禁用SELinux排错。
更多回答
在Rocky Linux 9中通过firewalld配置端口映射的步骤如下:
-
启用IP转发
- 修改
/etc/sysctl.conf
:net.ipv4.ip_forward=1
- 执行
sysctl -p
生效
- 修改
-
配置防火墙规则
# 开启伪装(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
调整策略
要在Rocky Linux 9中通过firewalld配置端口映射,需使用firewall-cmd
工具。例如,将80端口的请求转发到192.168.1.100的8080端口:
- 启用IP转发:
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p
- 添加端口映射:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.100'
- 重载防火墙:
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
验证配置。
-
开启IP转发:
sudo sysctl -p```
-
添加防火墙伪装(NAT):
sudo firewall-cmd --permanent --zone=public --add-masquerade
-
配置端口映射(示例:将公网IP的80端口映射到192.168.1.100:8080):
--add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100```
-
重新加载配置:
sudo firewall-cmd --reload
-
验证规则:
sudo firewall-cmd --list-all
(确认masquerade和forward-port存在)
在Rocky Linux 9中通过firewalld配置端口映射(DNAT)需遵循以下实战经验:
-
基础准备
- 确认firewalld状态:
systemctl status firewalld
- 启用IP伪装(NAT前置条件):
firewall-cmd --permanent --zone=public --add-masquerade
- 确认firewalld状态:
-
端口映射(示例将外部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'
-
重载配置:
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