Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
6.5.2. nftables での名前付きマップの使用
nftables
フレームワークは、名前付きマップに対応します。テーブルの複数のルールでこれらのマップを使用できます。匿名マップに対する別の利点は、名前付きマップを使用するルールを置き換えることなく、名前付きマップを更新できることです。
名前付きマップを作成する場合は、要素のタイプを指定する必要があります。
- 一致する部分に
192.0.2.1
などのIPv4
アドレスが含まれるマップの場合はipv4_addr
。 - 一致する部分に
2001:db8:1::1
などのIPv6
アドレスが含まれるマップの場合はipv6_addr
。 52:54:00:6b:66:42
などのメディアアクセス制御 (MAC
) アドレスを含むマップの場合はether_addr
。- 一致する部分に
tcp
などのインターネットプロトコルタイプが含まれるマップの場合はinet_proto
。 - 一致する部分に
ssh
や22
などのインターネットサービス名のポート番号が含まれるマップの場合はinet_service
。 - 一致する部分にパケットマークが含まれるマップの場合は
mark
。パケットマークは、任意の正の 32 ビットの整数値 (0
~2147483647
) にできます。 - 一致する部分にカウンターの値が含まれるマップの場合は
counter
。カウンター値は、正の値の 64 ビットであれば任意の値にすることができます。 - 一致する部分にクォータ値が含まれるマップの場合は
quota
。クォータの値は、64 ビットの整数値にできます。
この例では、送信元の IP アドレスに基づいて着信パケットを許可または破棄する方法を説明します。名前付きマップを使用すると、このシナリオを構成するのに必要なルールは 1 つだけで、IP アドレスとアクションがマップに動的に保存されます。この手順では、マップからエントリーを追加および削除する方法についても説明します。
手順6.16 nftables での名前付きマップの使用
- テーブルを作成します。たとえば、
IPv4
パケットを処理する example_table という名前のテーブルを作成するには、次のコマンドを実行します。# nft add table ip example_table
- チェーンを作成します。たとえば、example_table に、example_chain という名前のチェーンを作成するには、次のコマンドを実行します。
# nft add chain ip example_table example_chain { type filter hook input priority 0 \; }
重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。 - 空のマップを作成します。たとえば、
IPv4
アドレスのマッピングを作成するには、次のコマンドを実行します。# nft add map ip example_table example_map { type ipv4_addr : verdict \; }
- マップを使用するルールを作成します。たとえば、次のコマンドは、両方とも example_map で定義されている
IPv4
アドレスにアクションを適用するルールを、 example_table の example_chain に追加します。# nft add rule example_table example_chain ip saddr vmap @example_map
IPv4
アドレスと対応するアクションを example_map に追加します。# nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }
以下の例では、IPv4
アドレスのアクションへのマッピングを定義します。上記で作成したルールと組み合わせて、ファイアウォールは192.0.2.1
からのパケットを許可し、192.0.2.2
からのパケットを破棄します。- 必要に応じて、別の IP アドレスおよび action ステートメントを追加してマップを拡張します。
# nft add element ip example_table example_map { 192.0.2.3 : accept }
- 必要に応じて、マップからエントリーを削除します。
# nft delete element ip example_table example_map { 192.0.2.1 }
- 必要に応じて、ルールセットを表示します。
# nft list ruleset table ip example_table { map example_map { type ipv4_addr : verdict elements = { 192.0.2.2 : drop, 192.0.2.3 : accept } } chain example_chain { type filter hook input priority filter; policy accept; ip saddr vmap @example_map } }