在 firewalld
中可以通过 富规则(rich rules) 和 端口转发(forward-port) 实现相同功能。以下是详细步骤:
1. 添加白名单IP并允许访问指定端口
假设目标端口为 12345
,白名单IP为 192.168.1.100
和 10.0.0.5
,使用富规则放行白名单IP的流量:
# 添加白名单规则(按需重复添加其他IP)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="12345" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="12345" protocol="tcp" accept'
2. 配置端口转发(非白名单IP流量转到54321)
将非白名单IP的流量从 12345
转发到 54321
:
# 添加转发规则(NAT)
sudo firewall-cmd --permanent --add-forward-port=port=12345:proto=tcp:toport=54321
# 启用防火墙的伪装(NAT必备)
sudo firewall-cmd --permanent --add-masquerade
3. 开放目标端口
确保需要访问的端口在防火墙中开放:
# 开放12345端口(白名单直接访问)
sudo firewall-cmd --permanent --add-port=12345/tcp
# 开放54321端口(转发后的目标端口)
sudo firewall-cmd --permanent --add-port=54321/tcp
---
4. 重新加载防火墙配置
sudo firewall-cmd --reload
5. 验证配置
查看当前生效的规则:
# 检查富规则
sudo firewall-cmd --list-rich-rules
# 检查转发规则
sudo firewall-cmd --list-forward-ports
# 检查开放的端口
sudo firewall-cmd --list-ports
---
最终效果
白名单IP访问
12345
:直接放行。其他IP访问
12345
:流量自动转发到54321
。
注意事项
1. 伪装(Masquerade):端口转发必须启用伪装(类似NAT),否则流量无法正确路由。
2. 规则优先级:富规则的优先级高于转发规则,白名单IP优先匹配放行。
3. 多IP处理:如果白名单IP较多,可以批量生成富规则,或在脚本中循环添加。
4. 临时规则:若未加 --permanent
,规则重启后会失效;正式配置需保留此参数。
通过这种方式,即可用 firewall-cmd
实现基于白名单的端口访问控制和流量转发。