某些防火墙型号允许端口转换。意味着使用某种协议将传入(入站)的一个端口更改为其他端口。此外,他们还可以将内部端口再次更改为原始端口的某些外部端口(出站流量)。
这是下面的 DMZ 外部防火墙模型。假设我希望所有这些都直接使用 iptables 在服务器上发生,而不是使用 DMZ 防火墙。哪些命令可以允许在 CentOS 6 服务器上发生这种情况?
DMZ网络规则模型:
假设我有TCP流量,公共端口是8082,内部端口是8081?例如,DMZ 中的 Tomcat(客户端)将在外部 DMZ 防火墙外部作为端口 8081 发送 TCP 数据包,然后该数据包将通过互联网作为 8082 发送到某个公共 IP。然后反过来,假设来自某个公共 IP 的请求在 8082 上发送到同一台服务器,当它进入该服务器的 DMZ 时,端口将更改为 8081。
- 公共端口 = 8082
- 内部端口 = 8081
iptables网络规则模型:
- 服务器外部端口 = 8082
- Tomcat 正在物理服务器上发送和接收 TCP 请求的端口 = 8081
答案1
您的解决方案是使用iptables
定义 NAT 规则。
对于我的示例,我将引用 $physicalServerIP(本地 IP)和 $publicIP(公共 IP)。
要重定向您的 Tomcat(假设在 $physicalServerIP 上),以便其连接到端口 8081 上的服务器的尝试实际上会发送到端口 8082 上的服务器:
iptables -t nat -A PREROUTING -p tcp -s $physicalServerIP --dport 8081 -j REDIRECT --to-port 8082
到达端口 8082 上的 $publicIP 的传入请求可以发送到端口 8081 上的 $physicalServerIP:
iptables -t nat -A PREROUTING -d $publicIP -p tcp -m tcp --dport 8082 -j DNAT --to-destination $physicalServerIP:8081
要完成前面的 NAT,请指示来自 $physicalServerIP 的数据包通过公共接口上的 NAT 发送(返回):
iptables -t nat -A POSTROUTING -s $physicalServerIP/32 -j SNAT --to-source $publicIP
考虑到这种方法,如果您希望整个 LAN 都通过 NAT,您可以将32
之前的命令更改为24
如果您的 LAN 是 $physicalServerIP/24。
答案2
请尝试以下端口映射命令,它可以帮助您在 8082 上建立连接并在内部映射到端口 8081。
iptables -t nat -I PREROUTING -p tcp --dport 8082 -j REDIRECT --to-ports 8081