IPtables NAT疑惑者:为什么来自防火墙主机的stream量不是来自某个指定的源地址,而是被NAT转换的?

我运行一个小型的networking,其中一个Linuxnetworking/邮件服务器也提供了一个窗口集合的NAT的NAT。 其中一台Windows机器显然行事不端(ZeroAccess僵尸networking,尽pipe使用Norton PowerEraser无法find任何问题,并且在数周内只能在/ var / syslog中find3个出站端口16465数据包)。 出于某种原因,设置防火墙规则来丢弃所有传出的16465数据包也不能解决问题,但这是一个无关紧要的问题。

这个问题导致邮件服务器被列入黑名单,例如spamhaus.org。 由于我无法find感染的Windows主机,所以我想到了使用IP别名通过不同的IP地址发送NATstream量的想法。

外部接口:

eth0: 216.82.212.230 eth0:1 72.48.103.182 

内部接口:

 eth1: 172.18.90.1 

在我的防火墙规则中,我改变了

 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 216.82.212.230 

 iptables -t nat -A POSTROUTING -s 172.18.90.0/24 -o eth0 -j SNAT --to 72.48.103.182 

问题是现在一切似乎都是72.48.103.182,包括来自邮件服务器的stream量。 如果我从防火墙主机ssh ssh到另一台外部机器,连接被确定为来自72.48.103.182。

这对我来说没有意义,因为我特别指定了应该是NAT的源IP。 本来我没有“-s 172.18.90.0/24”,尝试上面的行,得到完全一样的结果。

对发生什么事情有任何想法? 我不是想象中的iptables专家,但是在发布到serverfault之前已经努力尝试研究这个。

=======================

 root@www:etc# ip ro 216.82.212.0/24 dev eth0 proto kernel scope link src 216.82.212.230 72.48.103.0/24 dev eth0 proto kernel scope link src 72.48.103.182 172.18.90.0/24 dev eth1 proto kernel scope link src 172.18.90.1 default via 216.82.212.254 dev eth0 src 72.48.103.182 metric 100 default via 216.82.212.254 dev eth0 metric 100 

“魔术”部分不是SNAT规则或NAT表格,而是这个路由表项:

 default via 216.82.212.254 dev eth0 src 72.48.103.182 metric 100 

它告诉你的内核使用72.48.103.182出站本地启动的连接(只要套接字没有明确地绑定到一个特定的地址创build),如果目的地可以通过这条路线 – 这将是所有的“外部“目的地,因为这是您的默认路线。 你应该重新定义它

 default via 216.82.212.254 dev eth0 src 216.82.212.230 metric 100 

得到预期的行为。

好吧, 所以我想 – 你的服务器只是使用这个IP作为outogoing之一。 其实你根本不需要2个默认路由,甚至是误导。 你只能使用一个:

ip ro add default via 216.82.212.254

您使用的别名不需要特殊的默认路由条目,因为您的ISP使用您的接口的主链路(地址)很可能会将其路由回去。