web-dev-qa-db-ja.com

IPv6が正しく機能するために不可欠なiptablesルールは何ですか?

しばらくするとIPv6アドレス上のサーバーへの接続が失われ、DHCPv6クライアントパケット(ポート546)がINPUTのデフォルトのDROPポリシーによって破棄されたことが原因であるという問題がありました this =問題に関する私の質問です。私のルールは次のとおりです。

-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s IP_OF_ANOTHER_Host -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-P INPUT DROP

これらのルールは、RELATEDチェーンのデフォルトポリシーがESTABLISHEDであるため、特にOUTPUTおよびACCEPT接続を許可するだけで十分だと思いましたが、DHCPv6クライアントパケットを受け入れるには、このルールを追加する必要がありました。

-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

必要ないかもしれないルールを追加したくないので、ルールをできるだけシンプルにしたいです。

では、IPv6が適切に機能するために設定しなければならない基本的なルールは何ですか? DHCPv6サーバーのポート547も有効にする必要がありますか?そして、すべてのICMPv6パケットを受け入れても大丈夫ですか?

5
Pierre

ネットワークはDHCPv6の代わりにSLAACを使用する可能性があるため、基本的なルールはネットワークに依存します。または、トンネル、ICMP処理などに応じて他の複雑な問題が発生する可能性があります。

-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

dHCPv6クライアントに適しています。 DHCPクライアントはおそらくDHCPサーバーではないので、サーバーポート547トラフィックを受け入れないでください。パケットは、DHCPサーバーからポート547からクライアントのポート546に送信されます。接続追跡は、クライアントがブロードキャストする(またはIPv6で実際にマルチキャストする)ときに適用されず、サーバーは、クライアントがブロードキャストした場所とは無関係のアドレスから応答します。

rootはポートをリッスンするために必要なので、これはかなり安全です<1024したがって、クライアントシステムのランダムユーザーは、デフォルトで悪意のあるサービスを開始できないはずです(たぶん、DoSネットワークにアクセスできますか?)。 fe80はリンクローカルトラフィックであるため、他のサブネット上のリモートの悪意のあるユーザーは、そのポートにトラフィックをルーティングできません(サブネット上に悪意のあるユーザーがいる場合は、おそらく、不正なDHCPサーバーを防止するネットワーク機器)。

ICMPv6は、許可または拒否するものに応じて非常に複雑になる可能性がありますが、おそらく単純なIPv6クライアントの接続追跡のデフォルトで処理できます。詳細は RFC 444 および RFC 489 を参照してください。

5
thrig

Ubuntuで作成されたファイアウォールufwで例を探しました。 ICMPとDHCPの両方を許可すると、他に心配することはほとんどなくなるようです。

https://git.launchpad.net/ufw/tree/conf/before6.rules?id=release/0.35

Thrigが指摘しているように、見るべきICMPコードはたくさんあるようです。現在のルールでは、すべてのICMPを許可することでそうすることを避けています。私は間違いなくこのアプローチの魅力を見ることができます:)。

残念ながらufwはこれらのリファレンスとしては完全には役に立ちません。それは理由を正当化しません。 packet-too-bigは既にRELATEDで承認されていません。しかし、それはRFC4890から取られたiptables6デフォルトのもっともらしいソースのようです。

RFC489 実際には、「重大なセキュリティリスク」-「リダイレクト(タイプ137)」があるとICMPの1つのタイプにのみ言及しています。 ICMPリダイレクトは、複数の独立したルーターがあり、最適に構成されていないローカルネットワークでのみ役立ちます。リダイレクトの処理は必須ではありませんが、ネットワークをできるだけ効率的に使用しません。 ufwは明示的にリダイレクトを許可しません。これに基づいて、ほとんどまたはすべてのICMPを許可し、ICMPリダイレクトを許可しないことが合理的だと思います。

# ok icmp codes for INPUT (rfc4890, 4.4.1 and 4.4.2)
-A ufw6-before-input -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-input -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-input -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
# IND solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
# IND advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
# MLD query
-A ufw6-before-input -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
# MLD report
-A ufw6-before-input -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
# MLD done
-A ufw6-before-input -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
# MLD report v2
-A ufw6-before-input -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
# SEND certificate path solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
# SEND certificate path advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
# MR advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 151 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 152 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR termination
-A ufw6-before-input -p icmpv6 --icmpv6-type 153 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT

# ok icmp codes for OUTPUT (rfc4890, 4.4.1 and 4.4.2)
-A ufw6-before-output -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-output -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-output -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
# IND solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
# IND advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
# MLD query
-A ufw6-before-output -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
# MLD report
-A ufw6-before-output -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
# MLD done
-A ufw6-before-output -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
# MLD report v2
-A ufw6-before-output -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
# SEND certificate path solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
# SEND certificate path advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
# MR advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 151 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 152 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR termination
-A ufw6-before-output -p icmpv6 --icmpv6-type 153 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT

# ok icmp codes for FORWARD (rfc4890, 4.3.1)
-A ufw6-before-forward -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-forward -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-forward -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
# ok icmp codes for FORWARD (rfc4890, 4.3.2)
# Home Agent Address Discovery Reques
-A ufw6-before-input -p icmpv6 --icmpv6-type 144 -j ACCEPT
# Home Agent Address Discovery Reply
-A ufw6-before-input -p icmpv6 --icmpv6-type 145 -j ACCEPT
# Mobile Prefix Solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 146 -j ACCEPT
# Mobile Prefix Advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 147 -j ACCEPT

(ICMPルールの終わり)

# allow dhcp client to work
-A ufw6-before-input -p udp -s fe80::/10 --sport 547 -d fe80::/10 --dport 546 -j ACCEPT

ローカルネットワーク上の何かにavahiを使用する場合は、次のものが必要です。ネットワークサービスに関するポリシーを持つ複数の一般的なディストリビューションでは、デフォルトでネットワークをリッスンするのに十分信頼できるavahiを検討してください。

# allow MULTICAST mDNS for service discovery
-A ufw6-before-input -p udp -d ff02::fb --dport 5353 -j ACCEPT

UPnPはクライアントマシンで役立つ場合がありますが、複雑であり、私はそれについて良いことを聞いていません。

# allow MULTICAST UPnP for service discovery
-A ufw6-before-input -p udp -d ff02::f --dport 1900 -j ACCEPT
3
sourcejedi