ルールについて
表のチェーンにルールを追加できます。 ルールは、様々な基準に基づいてパケットを照合し、受入れ、ドロップ、拒否などのアクションを適用する命令で構成されます。 これらの手順には、次のような要素が含まれます:
- セット。照合に使用されるエレメントのコレクションです。
- 式。パケットの一致または操作方法を定義するルールの構成要素です。 次に例を示します。
- プロトコル固有の一致(ip、ip6、tcp、udpなど)。
- アドレス・マッチング(saddr、daddr)。
- ポート・マッチング(sport、dport)。
- ネットワーク・インタフェースが一致します(iifname、oifname)。
- マップ。セットに似ていますが、ある値を別の値にマップできます。 マップは、より複雑な照合または変換シナリオに使用されます。
- 評決マップ。パケット・コンテンツに基づいて評決を変更でき、より動的なポリシー・ディシジョンが可能になります。
- カウンタ。ルールに一致するパケットの数を追跡し、ルールを含むリスト
nftコマンドの実行時に表示します。 カウンタは、ルールが機能しているかどうかをテストする便利な方法です。 - 割当て制限。アクションが変更される前にルールを通過できるデータ量を制限します(たとえば、
acceptからdrop)。 - フロー・テーブル。高速パス・パケット転送を可能にし、特定のトラフィックの通常のパケット処理をバイパスしてパフォーマンスを向上させます。
- 文。パケット処理動作を変更する
log,reject,jump,gotoなどの操作が含まれます。
チェーンに追加されたルールは、上から下、左から右に評価されます。
これらの手順の構成の詳細は、nft(8)マニュアル・ページを参照してください。
ルールの作成 - 例
この項では、チェーン内で作成されるルールの一般的な例を示します。
ローカル・トラフィックを許可
次のコマンドは、ローカル・トラフィックがループバック・インタフェース(iff lo)を介して入力できるようにする
inetファミリのmychain内のmytableにルールを作成します:
sudo nft add rule inet mytable mychain iif lo accept既存の接続または既存の接続に関連する受信トラフィックを許可
このコマンドは、既存の接続の一部または関連するすべての受信トラフィックを受け入れる
mytableのmychainチェーンにルールを追加します:sudo nft add rule inet mytable mychain ct state established, related accept前述の例では次のようになります。
ctは、nf_conntrackモジュールの一部であるIPv4、IPv6またはinetの接続トラッキング・ヘルパーです。 このモジュールは通常、ほとんどのシステムでデフォルトでロードされます。 次のコマンドを使用して、システムへのすべての接続の状態を一覧表示できます:sudo cat /proc/net/nf_conntrack使用可能な接続状態は次のとおりです:NEW: パケットが新しい接続を開始したか、またはパケットを受信および送信していない接続に関連付けられています。ESTABLISHED: パケットは、パケットを受信および送信した接続に関連付けられます。RELATED: パケットは新しい接続を開始していますが、既存の接続に関連付けられています。INVALID: パケットは既知の接続に関連付けられていません。
state established, relatedは、コマンドがESTABLISHEDまたはRELATED状態の接続にのみ適用されることを示します。acceptは、適切な状態のパケットを受け入れることができることを示します。
これは、発信トラフィックへのレスポンスが再度許可されるようにするためのファイアウォール構成の一般的なルールであり、着信接続のすべてのポートを明示的に開く必要なく、webブラウジング、SSH接続などのネットワーク・サービスの通常の操作を可能にします。
受信SSHトラフィックの許可
次に、宛先ポート22のすべての着信TCPトラフィックを受け入れる
mytableのmychainチェーンにルールを追加します。
sudo nft add rule inet mytable mychain tcp dport 22 acceptこのポートは通常、SSHトラフィックに使用され、SSHデーモンがシステム上で設定および実行されていることを前提としています。
すべてのIPv4およびIPv6トラフィックの制限(パニック・ボタン)
次に、すべての受信および送信IPv4およびIPv6を削除し、パニック・ボタンの一種として機能するルールを
mytable表に追加します。
sudo nft add rule inet mytable drop