我正在使用 iptables(1.1.1.1 => 2.2.2.2)进行 NAT 流量转发,命令如下:
iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to 1.1.1.1
除了一件事之外,它运行正常:如果我检查 apache 日志,在服务器 2.2.2.2 上执行防火墙规则等,看起来所有流量都来自 1.1.1.1。
当然,这有点道理,因为 1.1.1.1 将流量转发到 2.2.2.2,但我认为 NAT 会传递包中的原始 IP“请求者”?
有没有办法让到 2.2.2.2 的流量具有“真实”的原始 IP?
目前,设置良好的防火墙规则和其他安全措施非常困难,因为无论原始流量实际上来自哪里,所有流量似乎都来自 1.1.1.1。
答案1
Apache 永远不会看到 NAT 后面的 IP。端点系统 2.2.2.2 对 1.1.1.1 之外的任何内容都一无所知。获取原始请求者 IP 的唯一方法是嵌入某种 javascript 或客户端代码,该代码在客户端上运行等效代码,ipconfig
并将ifconfig
输出作为 POST 的一部分传递给 Web 服务器。然而,这通常是不被接受的。