Linux 本地防火墙中的端口转换 - CentOS 6 中的 iptables

Linux 本地防火墙中的端口转换 - CentOS 6 中的 iptables

某些防火墙型号允许端口转换。意味着使用某种协议将传入(入站)的一个端口更改为其他端口。此外,他们还可以将内部端口再次更改为原始端口的某些外部端口(出站流量)。

这是下面的 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

相关内容