如何配置 iptables 以将特定服务路由到特定站点?

如何配置 iptables 以将特定服务路由到特定站点?

这可能不是最好的问题标题。我会尽力解释得更好。另外,我不是防火墙专家。

我有一个基于 Debian 的 Linux 机器/路由器(如果有什么不同的话,我称之为 Dreamplug)。防火墙部分是我 10 多年前在 RH4 中实现的,后来几年移植到 CentOS 5、6,几年前又移植到这个 Dreamplug(简称为 DP)。

长话短说:iptables 规则允许在 DP 上运行特定服务,有些服务向公众开放,有些服务则为私有。此外,规则还会将一些公共服务转发到几个 LAN 服务器。更重要的是,DP 控制互联网访问,自从我实施了这项措施后,我只有两个选择:要么工作站可以访问互联网(所有内容),要么根本不访问。它对 LAN 和 WAN 都这样做。我通过为每个工作站设置 SNAT 和为允许从 LAN 访问互联网的工作站设置 FORWARD 规则来实现这一点。

现在我的情况是,我有一个工作站,根据政策,它处于无互联网区域,但与所有政策一样,它现在“需要”访问 Dropbox(因为他们就是这样解决我网络之外的一些其他问题的,所以 lansync 不是一个选项,除非我为此启动另一个 VM,但这有点过头了)。

因此,我需要以某种方式允许特定的 ip + 端口组合进出特定的工作站,而不是针对 LAN IP 的几个 FORWARD 规则。

我猜我需要对每个 ip+port 进行 SNAT,但由于某种原因我没有成功。我尝试了最基本的 SNAT,

iptables -t nat -A POSTROUTING -s WS_ip -o eth0 -j SNAT --to-source DP_IP

但没有运气。

eth0 是互联网。eth1 是 LAN,WS_IP 在 LAN 中,DP_IP 在 eth0 上

只要我不必重写防火墙,我愿意接受其他解决方案,因为我有相当多的本地和远程脚本来处理这个防火墙及其实施方式。

谢谢。

答案1

这比我想象的要简单得多。

我不记得在我读过的任何教程中看到过这一点,这就是为什么我直到现在才想到这种可能性。

实际上,FORWARD 链允许与任何其他链(输入/输出)进行相同的过滤,无论具有什么可能的细节。

简而言之,在尝试了所有类型的 SNAT 均未成功后,我想,让我们以与其他链相同的方式尝试 FORWARD 规则,例如:

*filter
:partinet - [0:0]
:dropbox - [0:0]
-A partinet -p icmp -j ACCEPT

-A dropbox -p tcp -d 162.125.32.129 -j ACCEPT
-A dropbox -p tcp -s 162.125.32.129 -j ACCEPT
-A dropbox -p tcp -d 162.125.17.131 -j ACCEPT
-A dropbox -p tcp -s 162.125.17.131 -j ACCEPT

-A FORWARD -s 192.168.1.x -j partinet
-A FORWARD -d 192.168.1.x -j partinet
-A FORWARD -s 192.168.1.x -j dropbox
-A FORWARD -d 192.168.1.x -j dropbox

COMMIT

您希望允许 ICMP,因为 Windows 和其他应用程序可能使用它(也可能是 HTTP)来检查互联网连接。至少对于 Win7 来说,ICMP 就足够了。

因此,这是完成这项工作的最低限度的 iptables 脚本。您可以进一步按目标端口 (443) 进行过滤。您显然需要维护 IP 列表。手动执行并不是一件有趣的事情。当它变得烦人时,我会考虑将其自动化。

相关内容