nftables は、サービスが IPv6 で検証されるのを防ぎます。

nftables は、サービスが IPv6 で検証されるのを防ぎます。

私は長いサービスリストでサーバーを設定しましたが、IPv4ですべてがうまく動作しています。しかし、IPv6についてテストしても何も解決されませんでした。すべてを無効にした後、動作を開始してnftables再度オンにし、試行錯誤を経て-->問題を引き起こした2行を識別できました(下記参照)。

# Accept related or established, drop bad, accept everything else
add rule inet filter INPUT ct state related,established accept
add rule inet filter INPUT tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 drop
--> add rule inet filter INPUT tcp flags & (fin|syn|rst|ack) != syn ct state new drop
--> add rule inet filter INPUT tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg drop
add rule inet filter INPUT iifname "lo" accept

私はTCPについて正しく訓練されていませんが、実際に私が学んだのは問題に陥るだけです。したがって、私がここでやっていることを説明するのに役立ちます。私が理解したことは、すべての関連/確立トラフィックとループバックインターフェイスに関連するすべてのトラフィックを許可することです。私はただ「新しい」要求を見ています...

syn私の問題は、私がand以外のTCPフラグを実際に理解していないことですack3ウェイTLSハンドシェイク)、ここに追加した他のものは、私が見ているチュートリアルで共通しているようです。私の心配は、それらを置いたり取り出すことが何を意味するのか、そして私が何を開いているのか理解していないということです。私の目標は、IPv4およびIPv6トラフィックを許可しながら、すべてのトラフィックを削除することです。悪いまたは無関係パケットが通過できません。

これは最終的に商用製品につながるので、よりよく理解したいのですが、指示が必要です。誰もがこの問題を解決するのに役立つことができればとても感謝します。


編集する:これらのどれも問題ではなく、問題を引き起こしたルールは実際にはルールであり、icmpIPv6がnb-*正しく機能するためにいくつかのルールが必要であることがわかりました。回答に詳細をお知らせします。

答え1

質問の更新で指摘したように、私が投稿したルールが犯人ではないことがわかりました。実際の問題は、ICMPトラフィック、特にIPv6に直接関連するタイプに関連しています。私のICMPルールは...

add rule inet filter INPUT ct state new icmp type { echo-request, echo-reply } accept
add rule inet filter INPUT ct state new icmpv6 type { echo-request, echo-reply } accept

ただし、IPv6を正しく実行するにはいくつかのことが必要です。隣人が見つけました。関連規則(nd-*)。私は「素晴らしいオンライン市民」の一環として、いくつかの他のタイプと一緒にこれらを含めました。私はこの質問が実際に攻撃を軽減するために重要であると考えていました。

新しいICMPルールは次のとおりです。

add rule inet filter INPUT ip protocol icmp icmp type { destination-unreachable, echo-reply, echo-request, source-quench, time-exceeded } accept
add rule inet filter INPUT ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, echo-reply, echo-request, nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert, packet-too-big, parameter-problem, time-exceeded } accept

問題の元の規則は、実際に悪意のある行動を軽減することだったようです...

クリスマス攻撃この規則は緩和するためのものです。クリスマス攻撃または、すべてのTCPパケットビットを有効にします。タイプそうでない場合は、「クリスマスツリー」のように点灯して、これらの要求に対するオペレーティングシステムの応答の微妙な違いを分析して、悪意のある行為者に対する追加の攻撃ベクトルを特定するのに役立ちます。

add rule inet filter INPUT tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg drop

強制SYN確認私が正しく理解したら、これはリソースの枯渇によるサービス拒否など、リソースへの攻撃の一部である可能性がある最初のSYNパケットの前に他の役に立たないパケットを排除することで処理負荷を軽減するのに役立ちます。

add rule inet filter INPUT tcp flags & (fin|syn|rst|ack) != syn ct state new drop

この投稿私の足を見つけ、より良い理解を探し始めるのに役立ちました。

これが他の人に答えへの近道を与えることを願っています! :)

答え2

nftablesルールを単純化したいかもしれません。これが私が持っているものです:

table inet Filter {
        chain Input {
                type filter hook input priority 0
                policy drop
                iif lo accept

                ct state established,related counter accept
                ct state invalid counter drop

                #Your other rules here

                # this rule exists to avoid junk in syslog
                ct state new tcp flags & (fin|syn|rst|ack) != syn counter drop
        }
}

必要でない場合は、counterどこからでも削除できます。

答え3

IP6 ルールが IP4 ルールによって壊れたくない場合は、「inet」を「ip」に変更してください。 nftables は、IP4("ip")、IP6("ip6")、IP4 と IP6("inet") の両方に適用されるルールを受け入れます。目標は、TCPおよびUDPルールを一箇所で一貫して処理できることです。この機能は後でバグと呼ばれていました。

関連情報