IPv6ルールとip6tableヘルプ

IPv6ルールとip6tableヘルプ

今私のサーバーでいくつかのIPv6ルールを設定する方法を見つけようとしています。私の要件は、ループバックデバイスとローカルIPアドレス(この場合はリンクローカル)のエコー要求を無効にし、ポート22、80、および443を開くことです。 IPv4の場合、すべてが正常ですが、INPUTチェーンシーケンスに従うip6tablesに問題があるようです。これが私が今持っているものです:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d ::1/128 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d fe80::/64 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -j ACCEPT
COMMIT

私の現在の犯人はです-A INPUT -j REJECT。チェーンにリストされていないすべてのアイテムを暗黙的に拒否すると予想されます。しかし、これは本当ではないようで、IPv4ルールを使用する従来の一般的なiptableとは異なる動作をするようです。誰かが私に解決策を教えてもらえますか? Ubuntu 14.04サーバーです

答え1

まず、ルールが何をしようとしているのかを見て、ルールが機能しない理由を見てみましょう。

-A INPUT -i lo -j ACCEPT

ICMPv6 トラフィックを含むループバック インターフェイスに到着するすべてのトラフィックが処理されます。

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

非常に正常です。

-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j ACCEPT

作成したとおり、このルールは(すべてのインターフェイスへの)ping要求のみを許可します。他のすべてのICMPv6パケットは、最終的な明示的なREJECTによって拒否されます。

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

非常に正常です。

-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d ::1/128 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d fe80::/64 -j REJECT --reject-with icmp6-port-unreachable

これらのルールは、ホストがローカルホストとリンクローカルネットワークアドレスにpingを送信するのを防ぎます(リンクローカルアドレス範囲は/ 10です。.)

-A OUTPUT -j ACCEPT

非常に正常です。

しかし、あなたは「私の要求はループバックデバイスとローカルIPアドレスのエコー要求を無効にする(この場合はリンクローカル)[...]"すべてのトラフィックで動作するこのようなものを見つけるでしょう。

次のようにルールチェーンを作成することをお勧めします。

-A INPUT -i lo -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -d fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -p icmpv6 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

書き換え規則に関するいくつかの観察事項:

  1. 私はACCEPTルールの前にREJECTルールを配置し、より広いフィルタの前により狭いフィルタを置くことを好みます。これにより、より広いフィルタが許可されるため、誤って何かが通過するのを防ぎます。これは厳密で迅速なルールではありませんが、何が起こっているのかをより簡単に視覚化するのに役立ちます。
  2. ルールはINPUTチェーンで処理されるため、OUTPUTチェーンはもう必要ありません。
  3. あなたの要求にもかかわらず、ローカルコンピュータだけがそのインターフェイスに送信できるため、ループバックインターフェイスのpingを無効にする理由は何であるかわかりません。しかし、ちょうど観察してみてください:これを行う必要がある特別な必要がある場合は大丈夫です。

関連情報