Checkpoint 上的手动 NAT(将所有 http 请求重定向到本地 Web 服务器)

Checkpoint 上的手动 NAT(将所有 http 请求重定向到本地 Web 服务器)

我们的内部网络中有一个代理服务器,我想将所有互联网 http 请求重定向到本地网络中的 Web 服务器。它就像一个网络公告牌,上面写着“没有可用的直接连接。设置您的代理等。”例如:

  • 用户启动计算机
  • 打开浏览器
  • 尝试打开 www.google.com
  • 应该在本地网络上看到 Web 服务器输出
  • 尝试互联网上的其他网站
  • 应该在本地网络上看到 Web 服务器输出
  • 设置代理
  • 尝试连接到网站
  • 网站应该加载

我在 Checkpoint 防火墙中添加了一个简单的手动 NAT 规则来转换地址,但它根本不起作用。这是我的地址转换规则

Source Destination Service T.Source T.Destination T.Service
MY_PC  A_GOOGLE_IP ALL     ORIGINAL INT_WEB_SRV   ORIGINAL

然后当我 ping 时A_GOOGLE_IP,回复来自,正如我所料。但是,当我尝试 从浏览器INT_WEB_SRV连接时(A_GOOGLE_IPhttp://A_GOOGLE_IP),SYN_SENT 没有回复,因此超时。当我查看 的防火墙日志时INT_WEB_SRV,我可以看到来自 MY_PC 的传入连接请求被接受,并且没有被拒绝。顺便说一句,查看INT_WEB_SRV(http://INT_WEB_SRV) 从浏览器。

我的理解是,检查点 NGX R60 处的 NAT 规则不包括返回数据包。我肯定需要一些帮助。

答案1

当遇到 NAT 问题时,我总是首先打开几个 SSH 会话并在内部和外部接口上执行 tcpdump。

就像是:

tcpdump -i eth0 proto ICMP

或者

tcpdump -i eth0 host A_GOOGLE_IP

并观察 Nat'd IP 地址是多少。这至少应该给你一个起点!

答案2

检查点中的返回流量应该进行网络地址转换。流量是否显示在 Web 服务器上的服务器日志中?此外,值得使用 fw monitor,以确保检查点正确进行网络地址转换,并双向传递流量,例如

fw monitor -e 'accept (src=<host address> and dport=80) or (dst=<host address> and sport=80);'

这应该显示每个数据包的 4 行,包括 NAT 前和 NAT 后的地址。

答案3

如果内部服务器与客户端位于同一子网,则需要执行 SNAT 以及 DNAT,因为现在,它的工作方式如下。

iptables -t nat -A PREROUTING -i LAN_IFACE -d A_GOOGLE_IP -j DNAT --to-destination INT_WEB_SRV
  • 客户端 PC 向 A_GOOGLE_IP 发送 TCP SYN
  • 路由器将其 DNAT 到 INT_WEB_SRV
  • INT_WEB_SRV 看到来自 LAN IP 的请求并直接回复
  • 客户端收到来自 INT_WEB_SRV IP 而非 A_GOOGLE_IP 的回复

如果你使用 SNAT,那么它的工作原理如下:

iptables -t nat -A PREROUTING -i LAN_IFACE -d A_GOOGLE_IP -j DNAT --to-destination INT_WEB_SRV
iptables -t nat -A POSTROUTING -s LAN_RANGE/mask -d INT_WEB_SRV -j SNAT --to-source ROUTER_IP
  • 客户端 PC 向 A_GOOGLE_IP 发送 TCP SYN
  • 路由器将其 DNAT 到 INT_WEB_SRV,用自己的 IP 替换源 IP
  • INT_WEB_SRV 看到来自路由器的请求并对其进行回复。
  • 路由器将数据包进行 DNAT 处理并发送到客户端 PC,并将源 IP 替换为 A_GOOGLE_IP
  • 客户端认为它已连接到 A_GOOGLE_IP

但是,如果您想要做的只是强制每个人都使用代理,只需将所有传出的 HTTP 连接 DNAT 到代理服务器(您将获得所谓的透明代理),客户端就不需要更改其计算机上的设置。

相关内容