Iptables 规则,两个接口之间转发

Iptables 规则,两个接口之间转发

我在配置我的 ubuntu 服务器防火墙时遇到了一些困难...我的情况是这样的:

eth0 -> 互联网

eth1->lan1

eth2 -> lan2

我希望 lan1 中的客户端无法与 lan2 中的客户端通信,除非是某些特定服务。例如,我希望 lan1 中的客户端可以通过 ssh 连接到 lan2 中的客户端,但仅此而已。禁止任何其他通信。

因此,我在 iptables 中添加了以下规则:

#Block all traffic between lan, but permit traffic to internet
iptables -I FORWARD -i eth1 -o ! eth0 -j DROP
iptables -I FORWARD -i eth2 -o ! eth0 -j DROP
# Accept ssh traffic from lan1 to client 192.168.20.2 in lan2
iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport 22 -d 192.168.20.2 -j ACCEPT

这不起作用。执行 iptables -L FORWARD -vi 会看到:

    Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    33   144 DROP       all  --  eth1 !eth0   anywhere             anywhere
    0     0 DROP       all  --  eth2 !eth0   anywhere             anywhere
23630   20M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth1   any     anywhere             anywhere
  175  9957 ACCEPT     all  --  eth1 any     anywhere             anywhere
  107  6420 ACCEPT     all  --  eth2 any     anywhere             anywhere
    0     0 ACCEPT     all  --  pptp+  any     anywhere             anywhere
    0     0 ACCEPT     all  --  tun+   any     anywhere             anywhere
    0     0 ACCEPT     tcp  --  eth1 eth2  anywhere             server2.lan tcp dpt:ssh

所有数据包均被丢弃,最后一条规则的数据包数量为 0 ...

我该如何修改我的配置?谢谢。

问候 Marco

答案1

您的 DROP 位于链的前端(将首先处理)。您需要将 DROP 放在允许 SSH 访问的规则之后,以便使用 SSH 规则。

类似这样的事情应该可以工作:

#Accept ssh traffic from lan1 to client 192.168.20.2 in lan2
iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport 22 -d 192.168.20.2 -j ACCEPT

#Block all traffic between lan, but permit traffic to internet
iptables -A FORWARD -i eth1 -o ! eth0 -j DROP
iptables -A FORWARD -i eth2 -o ! eth0 -j DROP

(使用 -A 将这些规则附加到链的末尾)

相关内容