iptables 路由通过防火墙

iptables 路由通过防火墙

我在服务器上运行一个 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

相关内容