SaddrとDaddrに対して同じnftableセットを再利用するには?

SaddrとDaddrに対して同じnftableセットを再利用するには?

ルータを使用できるコンピュータをホワイトリストに追加するには、次のnftables設定を使用します。

table bridge filter {
    set authorized {
        typeof ether saddr
        flags constant
        elements = {
            aa:aa:aa:aa:aa:aa,
            ff:ff:ff:ff:ff:ff
        }
    }

    set authorized2 {
        typeof ether daddr
        flags constant
        elements = {
            aa:aa:aa:aa:aa:aa,
            ff:ff:ff:ff:ff:ff
        }
    }

    chain input {
            type filter hook input priority 0; policy drop;
            ether saddr @authorized accept
            ether daddr @authorized2 accept
    }

}

タイプを除いて、2つのグループは同じです。

saddr両方に対して1つのセットのみを指定して使用し、daddr重複したMACアドレスを防ぐ方法はありますか?

答え1

単純さ:マニュアルページで確認できるのとtypeof ether saddr同じタイプtypeof ether daddrnft(8):

イーサネットヘッダー表現

ether {daddr | saddr | type}

表 37. イーサネットヘッダー表現タイプ

キーワード 説明する タイプ
お父さん 宛先MACアドレス エーテルの住所
サドル ソースMACアドレス エーテルの住所
タイプ エーテル型 エーテル型

これは、以下の3つの同等の方法のいずれかを使用して単一のコレクションを定義し、同じ結果が得られることを意味します。以前は視覚的な区別はありませんでした。nftables0.9.4最初の列の定義を使用する新しいキーワードは、typeof3 番目の列の定義を使用するキーワードの代替として導入されます。type

  • 生のキーワードtype(正確なタイプについては文書を確認する必要があります)

    type ether_addr
    
  • または、新しいtypeofキーワード(これを使用するルールで語彙をある程度再利用できます)

    • 誰でも

      typeof ether saddr
      
    • または

      typeof ether daddr
      

したがって、最終ルールセットは次のように作成できます。

table bridge filter {
    set authorized {
        typeof ether saddr
        flags constant
        elements = {
            aa:aa:aa:aa:aa:aa,
            ff:ff:ff:ff:ff:ff
        }
    }

    chain input {
            type filter hook input priority 0; policy drop;
            ether saddr @authorized accept
            ether daddr @authorized accept
    }
}

注:現在のルールセットは、このセットのすべてのアイテムまたはこのセットのすべてのアイテムを受け入れます。矛盾両方同時に。またそうだから入力する代わりにフック今後ターゲットMACアドレスが自分のMACアドレスであることをフックが受け入れる必要があることが少し奇妙です。 (もちろん難読化するときに最初のバイトマルチキャストビットを設定しないでください。

関連情報