
定義されたサブネット以外からの 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
設定に適切であれば、同様のルールも追加します。