我在配置我的 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 将这些规则附加到链的末尾)