我在服务器上运行一个 httpd 服务,
我有防火墙
和台式机上的互联网浏览器。
在服务器上,我有一个规则,只有防火墙才能访问服务器:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -s firewall -j ACCEPT
我应该在防火墙上设置什么规则,桌面上的浏览器可以连接到防火墙,并且防火墙将连接到桌面服务器以获取http页面并将页面返回到桌面?换句话说,我想在桌面上打开一个浏览器,它将通过防火墙从服务器获取页面:
server <-> firewall <-> desktop
我的下一步是防火墙,如果所有机器都在同一网络上,它就可以工作,但我不知道这是否是最好的方法:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination server
iptables -t nat -A POSTROUTING -s desktop -j MASQUERADE
请问有什么建议吗?我也对不同类型的场景感到好奇:所有计算机都位于同一网络上,而桌面位于不同网络上。非常感谢
答案1
无论受影响系统的地址是什么,DNAT 和 SNAT 都会起作用。如果 DNATting 系统恰好是其子网的路由器,并且 DNAT 目标位于子网之外,则不需要 SNAT,因为应答数据包无论如何都会到达系统。但忽略这种情况更容易。
你的代码很奇怪
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination server
iptables -t nat -A POSTROUTING -s desktop -j MASQUERADE
问题是 SNAT (MASQUERADE) 仅限于desktop
作为源,但 DNAT 则不然。我宁愿这样做:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination server
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -j MASQUERADE