IPTables - 特定の範囲からのトラフィックのみを許可する

IPTables - 特定の範囲からのトラフィックのみを許可する

定義されたサブネット以外からの Web サーバーへのすべてのトラフィックをブロックしようとしています。多数の投稿を確認し、iptables は正しく設定されていると信じていましたが、何らかの理由で、ルールセットで定義したサブネットの外部からサイトにアクセスできてしまいます。私が何を間違えたのか、誰か教えていただけませんか? ルール 3 を削除すると、サイトにアクセスできなくなることがわかりました。サイト自体は 10.10.0.0/16 にあります。

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

目標は、ホワイトリストに登録されたさまざまなパブリック IP を追加し、サイトをロックダウンして、一部のユーザーのみがアクセスできるようにすることです。

次のようにルールが追加されました:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

答え1

ルールの順序iptablesの問題。使用することでiptables -Aルールが追加されます最後にルールセットの。ただし、iptables -I行番号を指定しない限り (指定していません)、ルールセットの上にルールが挿入されます。結果として、ルールは意図した順序で評価されません。

以下は、以下の設定例です。この郵便受け重複を避けるために、事前にルールをフラッシュしてください。

iptables -P FORWARD DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

3 番目のルールは重要です。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

そうしないと、サーバーは開始した接続に対する応答 (DNS 要求など) を取得できなくなります。

ちなみに、iptablesはIPv4では動作しますが、IPv6では動作しません。そのため、サーバーがIPv6対応の場合、クライアントが次のように接続する可能性があります。IPv6. IP アドレスではなくホスト名で接続し、ホスト名がサーバー上の有効な IPv6 アドレスに解決される場合、これが可能です。おそらくご存知でしょうが、iptables が IPv6 トラフィック (および攻撃) をフィルターすることを知らない人はまだたくさんいます。ip6tables設定に適切であれば、同様のルールも追加します。

関連情報