防火墙(端口主机重定向)

防火墙(端口主机重定向)

参考链接

[root@localhost ~]# firewall-cmd --direct --get-all-rules
ipv4 filter FORWARD 0 -s 172.30.0.0/21 -d 172.30.0.0/21 -j ACCEPT
ipv4 filter FORWARD 1 -s 172.30.254.0/24 -d 172.30.0.0/21 -j ACCEPT
ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 80 -j DNAT --to-destination 172.30.6.18
ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 443 -j DNAT --to-destination 172.30.6.18
ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 21 -j DNAT --to-destination 172.30.6.14
ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 20000:20020 -j DNAT --to-destination 172.30.6.14
ipv4 nat POSTROUTING 0 -m policy --pol ipsec --dir out -j ACCEPT


ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 80 -j DNAT --to-destination 172.30.6.18

这个规则是一个 iptables NAT 规则,它用于在数据包进入网络堆栈之前修改数据包的目标地址和端口。具体来说,这个规则是一个端口转发规则,将传入到本地主机 80 端口的 TCP 流量重定向到 IP 地址为 172.30.6.18 的主机上。
让我们来分解这个规则:

ipv4:表示这是一个 IPv4 规则。
nat:表示这个规则应用于 NAT 表。
PREROUTING:表示这个规则应用于 PREROUTING 链,即数据包到达路由之前的处理。
0:规则的序号,0 表示这是第一个规则。
-i ens3:表示数据包进入的网络接口为 ens3。
-p tcp:表示这个规则应用于 TCP 协议的数据包。
--dport 80:表示数据包目标端口是 80。
-j DNAT:表示如果匹配了规则条件,将执行目标地址转换 (DNAT)。
--to-destination 172.30.6.18:将数据包的目标地址转换为 172.30.6.18。
这个规则的效果是,当进入网络接口 ens3 的 TCP 数据包目标端口是 80 时,会被转发到 IP 地址为 172.30.6.18 的主机上。

请注意,这种类型的规则通常用于实现端口转发或负载均衡等网络转发和代理功能。确保你理解规则的含义和影响,以及在设置之前进行必要的测试。

怎么将传入到本地主机 443 端口的 TCP 流量重定向到 IP 地址为 172.30.6.18 的主机上

iptables命令生成

sudo iptables -t nat -A PREROUTING -i <input_interface> -p tcp --dport 443 -j DNAT --to-destination 172.30.6.18

用firewall-cmd命令生成以上规则

[root@localhost ~]# firewall-cmd --direct --get-all-rules
ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 80 -j DNAT --to-destination 172.30.6.18
[root@localhost ~]#firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -i ens3 -p tcp --dport 80 -j DNAT --to-destination 172.30.6.18
[root@localhost ~]#firewall-cmd --reload

举例说明

eg:在数据包进入 eth0 接口且目标端口为 9089 的情况下,将数据包的目标地址转换为 192.168.122.1

[root@test ~]# firewall-cmd --direct --get-all-rules

#添加规则
[root@test ~]# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -i eth0 -p tcp --dport 9089 -j DNAT --to-destination 192.168.122.1
[root@test ~]# firewall-cmd --direct --get-all-rules
ipv4 nat PREROUTING 0 -i eth0 -p tcp --dport 9089 -j DNAT --to-destination 192.168.122.1

#删除规则
[root@test ~]# firewall-cmd --permanent --direct --remove-rule ipv4 nat PREROUTING 0 -i eth0 -p tcp --dport 9089 -j DNAT --to-destination 192.168.122.1
success
[root@test ~]# firewall-cmd --reload 
success
[root@test ~]# firewall-cmd --direct --get-all-rules
[root@test ~]# 

在上述命令中,将 <input_interface> 替换为实际的网络接口名称,即数据包进入的接口。

例如,如果数据包是通过 eth0 进入的,命令将如下所示:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 172.30.6.18


请注意,上述规则是在 iptables 的 NAT 表的 PREROUTING 链中添加的。这将会在数据包到达路由之前修改目标地址。如果你想让规则永久生效,你可以使用保存规则的方法,如 iptables-save 命令,根据你的系统环境可能有所不同。

另外,请确保你理解这些规则的影响,以及你的网络设置和需求。不正确的规则设置可能会导致网络连接问题。最好在实际生产环境之前在测试环境中验证这些规则的有效性。
posted @ 2023-08-15 10:41  赵财进宝  阅读(99)  评论(0编辑  收藏  举报