检查点手动NAT(将所有http请求redirect到本地Web服务器)

我们在我们的内部networking中有一个代理服务器,我想把所有的Internet http请求redirect到本地networking中的一个Web服务器。 这就像一个networking广告牌,说:“没有直接连接可用,设置您的代理等。 例如:

  • 用户启动计算机
  • 打开浏览器
  • 尝试打开www.google.com
  • 应该在本地networking上看到Web服务器输出
  • 在互联网上尝试另一个网站
  • 应该在本地networking上看到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 ,正如我所料。 但是,当我尝试从浏览器( http:// A_GOOGLE_IP )连接A_GOOGLE_IP ,SYN_SENT没有响应,并进入超时。 当我查看INT_WEB_SRV的防火墙日志时,可以看到来自MY_PC的传入连接请求被接受,并且NO拒绝。 顺便说一下,从浏览器查看INT_WEB_SRV ( http:// INT_WEB_SRV )是没有问题的。

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

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

就像是:

 tcpdump -i eth0 proto ICMP 

要么

 tcpdump -i eth0 host A_GOOGLE_IP 

并观察看看本机IP地址是什么。 那至less应该给你一个开始的地方!

检查点返回的stream量应该是natted。 networking服务器上的服务器日志中是否显示stream量? 此外,它值得使用fw监视器,以确保检查点是正确的natting,并通过双方的交通,类似

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

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

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

 iptables -t nat -A PREROUTING -i LAN_IFACE -d A_GOOGLE_IP -j DNAT --to-destination INT_WEB_SRV 
  • 客户端PC将TCP SYN发送到A_GOOGLE_IP
  • 路由器DNAT到INT_WEB_SRV
  • INT_WEB_SRV发现来自局域网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将TCP SYN发送到A_GOOGLE_IP
  • 路由器将它DNAT到INT_WEB_SRV用它自己的IPreplace源IP
  • INT_WEB_SRV看到来自路由器的请求并回复它。
  • 路由器将数据包DNAT发送到客户端PC,并用A_GOOGLE_IPreplace源IP
  • 客户端认为它已连接到A_GOOGLE_IP

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