Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
6.2. nftables テーブル、チェーン、およびルールの作成および管理
本セクションでは、
nftables
ルールセットを表示する方法と、その管理方法を説明します。
6.2.1. nftables ルールセットの表示
nftables
のルールセットには、テーブル、チェーン、およびルールが含まれます。本セクションでは、このルールセットを表示する方法を説明します。
ルールセットを表示するには、以下のコマンドを実行します。
# nft list ruleset table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport http accept tcp dport ssh accept } }
注記
デフォルトでは、
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 list tables table inet example_table
関連情報
- アドレスファミリーの詳細は、
nft (8)
man ページのAddress
family セクションを参照してください。 - テーブルで実行できるその他のアクションの詳細は、
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 ; }'
重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。さらに、一部のシェルは中括弧も解釈するので、中括弧とその中のものはティック('
)で引用します。このチェーンは、着信パケットをフィルターリングします。priority
パラメーターは、nftables
が同じフック値を持つチェーンを処理する順序を指定します。優先度の値が低いほど優先されます。policy
パラメーターは、このチェーンのルールのデフォルトアクションを設定します。サーバーにリモートでログインし、デフォルトのポリシーを をドロップ
するように設定すると、他のルールでリモートアクセスが許可されていない場合は、すぐに切断されることに注意してください。 - 必要に応じて、すべてのチェーンを表示します。
# nft list chains table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; } }
関連情報
- アドレスファミリーの詳細は、
nft (8)
man ページのAddress
family セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
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
代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22
の代わりにssh
を使用できます。サービス名は、/etc/services
ファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
# nft list table inet example_table table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; ... tcp dport ssh accept } }
関連情報
- アドレスファミリーの詳細は、
nft (8)
man ページのAddress
family セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
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
代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22
の代わりにssh
を使用できます。サービス名は、/etc/services
ファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
# nft list table inet example_table table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport ssh accept ... } }
関連情報
- アドレスファミリーの詳細は、
nft (8)
man ページのAddress
family セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)
man ページのRules
セクションを参照してください。
6.2.6. nftables チェーンの特定の位置へのルールの挿入
本セクションでは、
nftables
チェーンで、既存のルールの前後にルールを追加する方法を説明します。これにより、正しい場所に新しいルールを配置することができます。
前提条件
- ルールを追加するチェーンが存在する。
手順6.8 nftables チェーンの特定の位置へのルールの挿入
- nft -a list ruleset コマンドを使用して、ハンドルを含む example_table のすべてのチェーンとそのルールを表示します。
# nft -a list table inet example_table table inet example_table { # handle 1 chain example_chain { # handle 1 type filter hook input priority filter; policy accept; tcp dport 22 accept # handle 2 tcp dport 443 accept # handle 3 tcp dport 389 accept # handle 4 } }
-a
を使用すると、ハンドルが表示されます。次の手順で新しいルールを配置するときに、この情報が必要です。 - example_table の example_chain チェーンに新しいルールを挿入します。
- ハンドル 3 の前に、ポート 636 で TCP トラフィックを許可するルールを挿入するには、次のコマンドを実行します。
# nft insert rule inet example_table example_chain position 3 tcp dport 636 accept
- ハンドル 3 の後ろに、ポート 80 で TCP トラフィックを許可するルールを追加するには、次のコマンドを実行します。
# nft add rule inet example_table example_chain position 3 tcp dport 80 accept
- 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
# nft -a list table inet example_table table inet example_table { # handle 1 chain example_chain { # handle 1 type filter hook input priority filter; policy accept; tcp dport 22 accept # handle 2 tcp dport 636 accept # handle 5 tcp dport 443 accept # handle 3 tcp dport 80 accept # handle 6 tcp dport 389 accept # handle 4 } }
関連情報
- アドレスファミリーの詳細は、
nft (8)
man ページのAddress
family セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)
man ページのRules
セクションを参照してください。