我想设置一些NAT策略,以便某些机器只能出站访问http / https。 他们不应该能够进行端口扫描或从他们的机器的其他任何东西。
目前我的NAT规则是:
-A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 10.10.1.10 -A POSTROUTING -s 10.10.1.10 -j SNAT --to-source 1.2.3.4
我有这个共同的规则:
-A POSTROUTING -o eth0 -j MASQUERADE
1.2.3.4是公共IP,10.10.1.10是内部IP。
这允许直接通过所有入站和出站访问NAT。
我尝试了以下的POSTROUTING规则而不是上面的规则:
-A POSTROUTING -s 10.10.1.10 -p tcp --dport 80 -j SNAT --to-source 1.2.3.4:80
但是,这似乎并不奏效。 添加规则后,我仍然可以从工作站使用RDP。
回顾一下,我的目标是让某些工作站只能通过http / https访问Internet。 所有其他出站stream量应该被阻止。 所有的交通应该被允许。 我希望networking中的所有其他工作站都使用现有的NAT策略,以允许所有出站stream量进行NAT。
更新根据@ Zoredache的回复,我现在有以下的出场规则。
-A POSTROUTING -s 10.10.1.10/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 1.2.3.4:80 -A POSTROUTING -s 10.10.1.10/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 1.2.3.4:443 -A POSTROUTING -s 10.10.1.10/32 -p tcp -m tcp --dport 53 -j SNAT --to-source 1.2.3.4:53 -A POSTROUTING -s 10.10.1.10/32 -p tcp -m udp --dport 53 -j SNAT --to-source 1.2.3.4:53 -A POSTROUTING -s 10.10.1.10/32 -j ACCEPT -A POSTROUTING -o eth0 -j MASQUERADE
他们还没有工作,但他们正在接近。 更多在我的回复下面的@ Zoredache。
iptables的关键是第一场胜利。
假设客户机是10.10.1.10那么你只需10.10.1.10顺序看这些规则。 如果第一个规则不匹配,它将传递匹配的MASQ规则。
-A POSTROUTING -s 10.10.1.10 -p tcp --dport 80 -j SNAT --to-source 1.2.3.4:80 -A POSTROUTING -o eth0 -j MASQUERADE
如果您在最终的MASQUERADE规则之前添加另一条规则,导致NAT不发生。 由于来自10.10.1.10的数据包不会被注定为tcp / 80或tcp / 443,它们将与接受规则匹配,这意味着它们不会被SNAT / MASQ规则翻译。
-A POSTROUTING -s 10.10.1.10 -p tcp --dport 80 -j SNAT --to-source 1.2.3.4:80 -A POSTROUTING -s 10.10.1.10 -p tcp --dport 443-j SNAT --to-source 1.2.3.4:443 -A POSTROUTING -s 10.10.1.10 -j ACCEPT -A POSTROUTING -o eth0 -j MASQUERADE