許可ルールを誤った位置に置くと、許可ルールが存在しないのと同じように振る舞います。nftables では insert と add のどちらを選ぶかで、参照ルールのどちら側に新しい文が入るかが決まり、ハンドルは行番号ではなく稼働中のルールセット内のルールを指します。位置を誤ると、パケットは先にドロップに到達します。

以下の比較では、固定のピアをひとつと外部リスナーのやり取りをひとつだけ使います。意図的に狭くしてありますので、チェーン全体の置き換えは、別のリスク特性を持つ別の変更です。

ふたつの配置、ふたつの異なる結果

insert は参照ルールの前にルールを置きます。add はその後に置きます。参照ルールがフローの最終ドロップである場合、ルール本文が同一でも、このふたつのコマンドは逆の結果を生みます。

位置を省略した場合には独自の既定動作があり、これも、何に固定されているかを読まずにフォーラムのコマンドをコピーすべきでない理由です。固定先が判断のすべてです。コマンドを打つ前に、意図する側を書き留めてください。ファイル上では insert と add は一語しか違いません。

配置は特定のチェーン内のルールに対する相対位置です。同じ文を別のチェーンや別の hook 優先度へ移すと、ルールの構文が正しく見えても、どのパケットを見るかが変わります。

ハンドルは行番号ではなくルールを識別する

42 のようなハンドルは、現在のルールセット状態における識別子です。四十二番目のルールではなく、ホスト間、再構築間、設定を再読み込みする管理ツール間で安定しません。

固定先を選ぶ前に、チェーンと実際の最終ドロップを特定します。次に、ドロップを示す同じ一覧の中でそのルールのハンドルを確認し、番号とルールを一緒に読めるようにします。古い一覧から読んだハンドルは、すでに別のルールのものかもしれません。変更を適用するセッションで読み直してください。

iptables --version
nft -a list ruleset

iptables のバージョンは、どのバックエンドが使われているかを示します。iptables-nft のルールセットと、独立して管理されるネイティブテーブルは共存できるため、ひとつのフロントエンドの一覧が自動的に完全なフィルタリング像になるわけではありません。チェーンを選ぶ前に両方の表示を確認してください。

実際にドロップするチェーンとルールを見つける

input hook、チェーンの優先度、このリスナーフローを拒否するルールを読みます。inet テーブルは両方のアドレスファミリーを扱えますが、個々のルールは依然として IPv4 にしか一致しないことがあります。

承認済みのピアをひとつ選び、例としてドキュメント用範囲の 198.51.100.25 を使います。レビュー済みのネイティブファイルでは、ハンドル 42 の前に外部許可を置けます:

insert rule inet filter input handle 42 iifname "eth0" ip saddr 198.51.100.25 udp dport { 500, 4500 } counter accept

確認後にファミリー、テーブル、チェーン、ハンドル、入力インターフェース、ピアを置き換えます。この例は nft 1.0.9 で文書化されたハンドル位置の形式を使っており、入力ファイルに属し、コマンドを対話的に打つ場合の中括弧の引用は別の課題です。

設定の所有者を明確に保ちます。ルールを再構築する管理ツールは実行時の編集を上書きすることがあり、古いハンドルをハードコードした起動スクリプトは失敗するか、誤ったルールに結び付きます。

許可はスコープを持ち、ドロップは最終的である

許可の判定は現在の経路で評価を終えますが、後から適用されるベースチェーンがパケットをドロップすることはあります。ドロップの判定は最終的です。だからこそ、増え続ける許可カウンターはフローが成功した証拠になりません。

ひとつのチェーンを切り離して見るのではなく、関連するすべての hook 優先度を調べます。パケットは input フィルターを通過しても、別の優先度にある別のテーブルの hook で拒否されることがあります。フローを見られるすべてのベースチェーンを列挙してください。

そのルールが扱うのは外部リスナーのやり取りだけです。トランスポートでカプセル化された ESP、ネイティブ ESP、IPv6 ピア、トンネル内で復号された通信には、それぞれ独自のポリシーが必要です。 これはサイト VPN の完全なファイアウォールではない。

ファイルを確認し、次に稼働中の結果を検証する

適用する前に、レビュー済みファイルで構文とトランザクションの確認を実行します。確認モードは nft が変更を解析して準備できるかを報告しますが、適用はせず、別の hook がパケットを許可することも証明しません。ファイルは所有者が適用するまで提案のままです:

nft -c -f reviewed-vpn-rule.nft

所有者の管理された手順で適用し、復旧アクセスを確保します。ルールが誤っていると、先に通そうとしたドロップが、修正に使う経路まで断つことがあります。

変更後、新たに許可されたピアの試行を観察し、承認済みピア外の送信元が引き続き拒否されることを確認したうえで、永続ルールはルールセットを所有する管理ツールへ移してください。実行時のハンドルは現在のオブジェクトを特定するだけで、起動をまたいで識別するものではないからです。

関連記事