6.4. nftables コマンドを使用したセットの使用
nftables フレームワークは、セットをネイティブにサポートします。たとえば、ルールが複数の IP アドレス、ポート番号、インターフェイス、またはその他の一致基準に一致する必要がある場合など、セットを使用できます。
6.4.1. nftables での匿名セットの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
匿名セットには、ルールで直接使用する
{ 22, 80, 443 } などの中括弧で囲まれたコンマ区切りの値が含まれます。IP アドレスやその他の一致基準に匿名セットを使用することもできます。
匿名セットの欠点は、セットを変更する場合はルールを置き換える必要があることです。動的なソリューションの場合は、「nftables で名前付きセットの使用」に従って名前付きセットを使用します。
前提条件
inetファミリーに example_chain チェーンと example_table テーブルが存在する。
手順6.13 nftables での匿名セットの使用
- たとえば、ポート
22、80、および443への着信トラフィックを許可するルールを example_table の example_chain に追加するには、次のコマンドを実行します。nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept# nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.2. nftables で名前付きセットの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、変更可能な名前付きセットに対応します。名前付きセットは、テーブル内の複数のルールで使用できる要素の一覧または範囲です。匿名セットに対する別の利点として、セットを使用するルールを置き換えることなく、名前付きセットを更新できます。
名前付きセットを作成する場合は、セットに含まれる要素のタイプを指定する必要があります。以下のタイプを設定できます。
- 192.
0.2.1 や192.0.2.0/24 など、IPv4 アドレスまたは範囲を含むセットの場合はipv4_addr。 - 2001:db8:
1::1 や 2001:db8:1::1/64 など、IPv6アドレスまたは範囲を含むセットの場合はipv6_addr。 52:54:00:6b:66:42 など、メディアアクセス制御(MAC)アドレスの一覧を含むセットの場合はether_addr。tcpなど、インターネットプロトコルタイプの一覧を含むセットの場合はinet_proto。sshなどのインターネットサービスの一覧を含むセットの場合はinet_service。- パケット
マークの一覧を含むセットの場合は mark。パケットマークは、任意の正の 32 ビットの整数値にすることができます(0から2147483647)。
前提条件
- example_chain チェーンと example_table テーブルが存在する。
手順6.14 nftables で名前付きセットの使用
空のファイルを作成します。以下の例では、
IPv4アドレスのセットを作成します。- 複数の
IPv4アドレスを保存できるセットを作成するには、次のコマンドを実行します。nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4アドレス範囲を保存できるセットを作成するには、次のコマンドを実行します。nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。- 必要に応じて、セットを使用するルールを作成します。たとえば、次のコマンドは、example_set の
IPv4アドレスからのパケットをすべて破棄するルールを example_table の example_chain に追加します。nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow example_set が空のままなので、ルールには現在影響がありません。 IPv4 アドレスを example_set に追加します。
- 個々の
IPv4アドレスを保存するセットを作成する場合は、次のコマンドを実行します。nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }# nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4範囲を保存するセットを作成する場合は、次のコマンドを実行します。nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }# nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IP アドレス範囲を指定する場合は、上記の例の192.0.2.0/24など、CIDR(Classless Inter-Domain Routing)表記を使用することもできます。
6.4.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
セットの詳細は、man ページの
nft (8) の Sets セクションを参照してください。