6.2. nftables テーブル、チェーン、およびルールの作成および管理
本セクションでは、
nftables ルールセットを表示する方法と、その管理方法を説明します。
6.2.1. nftables ルールセットの表示 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
nftables のルールセットには、テーブル、チェーン、およびルールが含まれます。本セクションでは、このルールセットを表示する方法を説明します。
ルールセットを表示するには、以下のコマンドを実行します。
注記
デフォルトでは、
nftables は事前にテーブルを作成しません。これにより、テーブルのないホストに設定されたルールセットを表示すると、nft list ruleset コマンドは出力を表示しません。
6.2.2. nftables テーブルの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
nftables のテーブルは、チェーン、ルール、セット、およびその他のオブジェクトのコレクションを含む名前空間です。本セクションでは、テーブルの作成方法を説明します。
各テーブルには、アドレスファミリーが定義されている必要があります。テーブルのアドレスファミリーは、テーブルプロセスのアドレスタイプを定義します。テーブルを作成する際に、以下のいずれかのアドレスファミリーを設定できます。
ip: IPv4 パケットのみに一致します。アドレスファミリーを指定しないと、これがデフォルトになります。ip6: IPv6 パケットのみに一致します。inet: IPv4 パケットと IPv6 パケットの両方に一致します。ARP: IPv4 アドレス解決プロトコル(ARP)パケットに一致します。bridge: ブリッジデバイスを通過するパケットと一致します。netdev: ingress からのパケットに一致します。
手順6.4 nftables テーブルの作成
- nft add table コマンドを使用して、新しいテーブルを作成します。たとえば、
IPv4パケットおよびIPv6パケットを処理する example_table という名前のテーブルを作成するには、次のコマンドを実行します。nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、ルールセットのテーブルを一覧表示します。
nft list tables table inet example_table
# nft list tables table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - テーブルで実行できるその他のアクションの詳細は、
nft (8)man ページのTablesセクションを参照してください。
6.2.3. nftables チェーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
チェーンは、ルールのコンテナーです。次の 2 つのルールタイプが存在します。
- ベースチェーン - ネットワークスタックからのパケットのエントリーポイントとしてベースチェーンを使用できます。
- 通常のチェーン:
jumpターゲットとして通常のチェーンを使用し、ルールをより適切に整理できます。
この手順では、既存のテーブルにベースチェーンを追加する方法を説明します。
前提条件
- 新しいチェーンを追加するテーブルが存在する。
手順6.5 nftables チェーンの作成
- nft add chain コマンドを使用して、新しいチェーンを作成します。たとえば、example_table に、example_chain という名前のチェーンを作成するには、次のコマンドを実行します。
nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'# nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。さらに、一部のシェルは中括弧も解釈するので、中括弧とその中のものはティック(')で引用します。このチェーンは、着信パケットをフィルターリングします。priorityパラメーターは、nftablesが同じフック値を持つチェーンを処理する順序を指定します。優先度の値が低いほど優先されます。policyパラメーターは、このチェーンのルールのデフォルトアクションを設定します。サーバーにリモートでログインし、デフォルトのポリシーを をドロップするように設定すると、他のルールでリモートアクセスが許可されていない場合は、すぐに切断されることに注意してください。 - 必要に応じて、すべてのチェーンを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのChainsセクションを参照してください。
6.2.4. nftables チェーンの最後に対するルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、既存の nftables チェーンの最後にルールを追加する方法を説明します。
前提条件
- ルールを追加するチェーンが存在する。
手順6.6 nftables チェーンの最後に対するルールの追加
- 新しいルールを追加するには、nft add rule コマンドを使用します。たとえば、example_table の example_chain に、ポート 22 の TCP トラフィックを許可するルールを追加するには、次のコマンドを実行します。
nft add rule inet example_table example_chain tcp dport 22 accept
# nft add rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22の代わりにsshを使用できます。サービス名は、/etc/servicesファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。
6.2.5. nftables チェーンの先頭へのルールの挿入 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、既存の
nftables チェーンの先頭にルールを追加する方法を説明します。
前提条件
- ルールを追加するチェーンが存在する。
手順6.7 nftables チェーンの先頭へのルールの挿入
- 新しいルールを挿入するには、nft insert rule コマンドを使用します。たとえば、ポート
22で TCP トラフィックを許可するルールを example_table の example_chain に挿入するには、次のコマンドを実行します。nft insert rule inet example_table example_chain tcp dport 22 accept
# nft insert rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22の代わりにsshを使用できます。サービス名は、/etc/servicesファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。
6.2.6. nftables チェーンの特定の位置へのルールの挿入 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、
nftables チェーンで、既存のルールの前後にルールを追加する方法を説明します。これにより、正しい場所に新しいルールを配置することができます。
前提条件
- ルールを追加するチェーンが存在する。
手順6.8 nftables チェーンの特定の位置へのルールの挿入
- nft -a list ruleset コマンドを使用して、ハンドルを含む example_table のすべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -aを使用すると、ハンドルが表示されます。次の手順で新しいルールを配置するときに、この情報が必要です。 - example_table の example_chain チェーンに新しいルールを挿入します。
- ハンドル 3 の前に、ポート 636 で TCP トラフィックを許可するルールを挿入するには、次のコマンドを実行します。
nft insert rule inet example_table example_chain position 3 tcp dport 636 accept
# nft insert rule inet example_table example_chain position 3 tcp dport 636 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ハンドル 3 の後ろに、ポート 80 で TCP トラフィックを許可するルールを追加するには、次のコマンドを実行します。
nft add rule inet example_table example_chain position 3 tcp dport 80 accept
# nft add rule inet example_table example_chain position 3 tcp dport 80 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。