2 つのサブネットからのパケットがファイアウォール eth1 に送信されます。
10.111.12.0/24 および 10.10.100.0/24
次のように iptables ルールを設定します。
iptables -A INPUT -i eth1 ! -s 10.111.12.0/24 -j DROP
iptables -A INPUT -i eth1 ! -s 10.10.100.0/24 -j DROP
しかし、10.10.100.0/24 は 10.111.12.0/24 ではなく、最初のルールに一致するため、最初のルールでは 2 番目のルールをチェックできません。これを修正するにはどうすればよいでしょうか?
答え1
最も簡単な方法は、許可されたパケットをマークし、後でマークされていないすべてのパケットをドロップすることです。
iptables -t mangle -A PREROUTING -i eth1 -s 10.111.12.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i eth1 -s 10.10.100.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i eth1 -m mark ! --mark 1 -j DROP
通過する必要がある/通過したい他のパケットがある可能性があることを考慮する必要があります。
答え2
ここではチェーンが便利な方法です。チェーンはサブルーチンや関数のような働きをします。RETURN は、そのパケットの制御が前のチェーンに戻り、ルールが引き続き評価されることを意味します。
# create a new chain
iptables -t filter -N in_validnet
# all incoming packets on eth1 are evaluated by the chain
iptables -t filter -A INPUT -i eth1 -j in_validnet
# packets from these networks are returned for further evaluation
iptables -A in_validnet -s 10.111.12.0/24 -j RETURN
iptables -A in_validnet -s 10.10.100.0/24 -j RETURN
# everything else gets dropped
iptables -A in_validnet -j DROP