Nftables 基本リンク削除の問題

Nftables 基本リンク削除の問題

ファイアウォールルールの基本的な削除方法がありたいです。テスト目的でいくつかのルールを作成しました。

table bridge vmbrfilter {
    chain forward {
        type filter hook forward priority -100; policy drop;
        ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept;
        ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept;
    }
}

192.168.1.1ただし、間のトラフィックは192.168.1.10ブロックされたままです。構文の問題であることを確認するために、次のことを試しました。

table bridge vmbrfilter {
    chain forward {
        type filter hook forward priority -100; policy accept;
        ip saddr 192.168.1.10 ip daddr 192.168.1.1 drop;
        ip saddr 192.168.1.1 ip daddr 192.168.1.10 drop;
    }
}

ただし、これは2つのIP間のトラフィックを正常にブロックしました。だから私はなぜ私のacceptルールが守られないのかわかりません。ウィキペディアは次nftablesのように述べています。

削除決定は、パケットが基本チェーンの終わりに達するとパケットが削除されることを意味します。

しかし、accept私のチェーンには一致する必要がある規則があります。

私が間違って理解したのでしょうか?助けてくれてありがとう。

修正する:ABのARPルール提案が役に立ちました。しかし、VLANタグがファイアウォールルールに問題を引き起こしていることがわかりました。 ARP ルールは、タグ付きトラフィックが物理 NIC を通過するのを許可し、ARP 応答はブリッジを通過しますが、物理 NIC から出るとブロックされます。

答え1

イーサネット経由のIPv4は次のように依存します。アドレス解決プロトコル後でユニキャストパケットを送信できるように、ピアのイーサネットMACアドレスを確認してください。

ARP要求をフィルタリングすると例外がないため、これらの要求は成功せず、通常の3秒タイムアウト後に標準の「ホストへのパスなし」を取得します。前の手順が失敗したため、192.168.1.10から192.168.1.1へ、または192.168.1.1から192.168.1.10に送信されたIPv4パケットはありません。

したがって、今このルールを追加し、後で本当に必要に応じて微調整する方法を確認してください。

nft add rule bridge vmbrfilter forward ether type arp accept

ブリッジがVLANを認識しているか(vlan_filtering=1)、そうでない場合(たとえば、ブリッジがフレームで機能しているが実際にはフレームについてより多くのことがわからない場合)、2つの異なるVLANの2つのフレームが同じMACアドレスを持つ場合、それは悪い可能性があります。 ) 以下は、フレーム内で VLAN タグ付き ARP パケットを許可するルールです。

nft add rule bridge vmbrfilter forward ether type vlan vlan type arp accept

ただし、いずれにせよ IP が適切でない場合、同じ問題が発生します。これには、VLAN 設定に関する追加情報が必要です。

これは、タグ付きフレームとタグ付けされていないフレームを許可するルールのセットであり、繰り返しルールが必要です。 ARPにはそれをフィルタリングする追加の式がないため、プロトコル/タイプを自動的に選択するには明示的なvlan type arp

table bridge vmbrfilter        # for idempotency
delete table bridge vmbrfilter # for idempotency

table bridge vmbrfilter {
    chain forward {
        type filter hook forward priority -100; policy drop;
        ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept
        ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept
        ether type arp accept

        ether type vlan ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept
        ether type vlan ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept
        ether type vlan vlan type arp accept
    }
}

以前のバージョンもありますnftables(例:OPの0.9.0)必須フィルタ式は、追加のフィルタがない場合は出力から省略できます(たとえば、この回答にはありません:ether type vlan arp htype 1(display truncated)vs vlan id 10 arp htype 1)。したがって、その出力を次のように再使用しないでください。構成ファイルに入力します。それでも違いがわかります。 を使用すると、追加のフィルタ式があることがわかりますnft -a --debug=netlink list ruleset

私が知っている限り、プロトコルのランダムカプセル化/カプセル化解除は現在サポートされていません。nftablesしたがって、ルールの重複は避けられないようです(VLANとVLAN以外のケースで同じフィールドがどのように検索されるかを調べるには、バイトコードを見てください。異なるオフセット)。

関連情報