我的Apache服务器位于具有NAT转换的防火墙后面。 我遇到的问题是我想查看谁实际上正在请求而不是我的防火墙的地址。 很高兴知道防火墙正在工作,但要真正查看stream量模式,我需要查看真实世界的IP地址。
UPDATE
防火墙是一个使用fwbuilder创build的iptable规则的CentOS 5.2框。
iptables响应所有接口上的请求,Squid只在内部接口上运行。
我已经看到这与代理服务器和负载平衡器。 通常情况下,入站stream量通过代理到达Web服务器,但Web服务器的默认网关不是代理服务器。 通过执行反向NAT,Web服务器获取代理的IP而不是客户端的IP。 由于它将有一个到代理的路由(实际上可能在同一个子网内),因此可以确保它始终可以将返回stream量返回给客户端。
对此的一个修复是代理将包含客户端真实IP的自定义HTTP头插入到Web服务器可以parsing的HTTP请求中。 对于Apache来说,修改LogFormat语句以使用%{Custom-Header}而不是%h会变成一个简单的问题。 当然,这取决于你的设备实际上是HTTP感知,并能够插入任意的头文件到GET / POST /等。 要求。 对于代理和负载均衡器来说,这是一个常见的function,但对防火墙来说则不是那么重要。 此外,除非您的设备正在执行SSL终止,否则不会帮助您处理HTTPS请求。 正如凯尔所说,我们需要更多地了解你的防火墙。
在这种情况下,我认为最常见的NAT只是NAT的目的地址。 所以客户端仍然有相同的源地址(公网ip)。 所以我认为我们需要更多地了解防火墙。
举个例子:
Client: 12.12.12.12 Public Website Address: 11.11.11.11 Private Web Server ip: 10.0.0.2 Client --> Your Firewall --> Web Server Client Packet: Src IP:12.12.12.12 Dst IP:11.11.11.11 NAT Firewall: Takes client Packet, changes Dst from 11.11.11.11 to 10.0.0.2. Make entry in table to remember this mapping Web Server (When Client Packet Arrives): Src:12.12.12.12 Dst: 10.0.0.2 Reply Packet from Web Server: Src: 10.0.0.2 Dst: 12.12.12.12 NAT Firewall: Takes Reply Packet, changes Src to 11.11.11.11 after looking at mapping Client (When Packet Arives): Src: 11.11.11.11 Dst: 12.12.12.12
有可能客户端也在NAT后面,但这只是使得它更容易混淆。
从你如何描述它,这个“防火墙”看起来更像是一个反向代理。
NAT通常应用于传出连接,而不是传入连接。 当专用networking中的计算机打开与外部世界的连接时,远程服务器将连接视为来自防火墙的公共IP地址; 但是当远程计算机打开与其中一台内部服务器的连接(通过防火墙上的端口转发)时,它会将连接视为源自其实际公共IP地址。 你所描述的是反向代理的典型行为,而不是NAT防火墙。
您确定没有任何反向代理(如SQUID)在该防火墙上运行并拦截传入的HTTP(S)连接? SQUID也可以作为一个透明的代理,所以它可以在那里,你没有任何知识。 当你发布一个内部网站时,这也是ISA Server的标准行为:即使你认为你只是做一个端口转发,你实际上是反向代理你的web服务器。
如果你有鱿鱼组合,你应该寻找X-Forwarded-For头部,这是专门为了传递信息而实现的。
请注意,这个标头至less与使用原始IP一样不安全,因为两者都可能是伪造的。
您可以通过修改您的LogFormatreplace%h和%{X-Forwarded-For} i来testing是否属于这种情况,然后重新加载您的configuration。