web-dev-qa-db-ja.com

Iptablesルール、2つのインターフェース間で転送

私は私のubuntuサーバーファイアウォールを構成するのにいくつかの問題があります...私の状況はこれです:

eth0->インターネット

eth1-> lan1

eth2-> lan2

一部の特定のサービスを除いて、lan1のクライアントがlan2のクライアントと通信できないようにしたい。例えば。 lan1のクライアントがlan2のクライアントにSSH接続できるようにしたいのですが、それだけです。その他の通信は禁止されています。

だから、私はこのルールを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 -vを実行すると、次のようになります。

    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です。

構成を変更するにはどうすればよいですか?ありがとうございました。

よろしくマルコ

1
Marco

DROPはチェーンの最前線にあります(最初に処理されます)。 SSHルールのSSHアクセスを許可するルールの後に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

#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を使用して、これらのルールをチェーンの最後に追加します)

3
cjc