すべてをVPNサーバーに転送する、という言い方は大きく異なる二つのルールを指し得ます。一方は宛先アドレスを変えて受信ポートを維持し、もう一方はポートも単一のリスナーに書き換えます。露出は同じではなく、判断はルーターの画面が使うラベルではなく三つの条件で決まります。

第一の条件:ルールはどのフィールドを変えるのか?

宛先アドレス変換と宛先ポート変換は別々の操作です。ルールは前者だけを実行することも、両方を同時に実行することもでき、その違いがターゲットホスト上のどのサービスに到達できるかを決めます。ほとんどのベンダーの画面はその選択を一つのラベルで隠しています。基になるルールを読むことだけが、どちらを得たのかを知る方法です。

メニューのラベルではなく、実際のルールを読んでください。DMZや全ポートと表示する画面は意図を表すもので、パケットの経路ではありません。Netfilter NATのドキュメントは二つの変換を区別しており、目の前のルーターが家庭用機器であっても、これが正しい考え方です。

二つのフィールド、二つの異なる問い。

第二の条件:保持されたポートでは何が待ち受けているのか?

ルールが受信ポートを維持する場合、到着したすべてのポートはVPNホストの同じ番号に届けられ、そのホストの入力ポリシーに従います。これには、待ち受けていることを忘れていたサービスも含まれます。ルールがそれらのサービスを作ったわけではなく、今ではルールがそこへの経路になっています。

ルールがポートを書き換える場合は逆になり、多くの外側ポートが一つのリスナーに集約されて、そのルールを通じてホスト上の他の何にも到達できません。固定ポートへの書き換えは、広い範囲の外側ポートが一致したからといって、すべてのローカルサービスへのアクセスになるわけではありません。二つの設計は異なる方向に失敗し、その失敗の仕方があなたの選ぶものです。その失敗とともに生きられる方を選んでください。

選ぶ前にリスナーを棚卸ししてください。

第三の条件:外側の入口はどれだけ広いのか?

選択した一つのポートを公開するのは範囲を公開するより狭く、どちらもすべてを受け入れるより狭くなります。外側の広さと内側の変換は独立した選択であり、混乱の多くは一方を変えながら他方を説明することから生じます。

通常のVPN入口では、設計が実際に必要とするトランスポートとリスナーを公開してください。その後、ルーターの実際のマッピング、ターゲットホスト自身の入力ルール、そしてIPv6リスナーが同じサービスを公開しているかどうかという三つを確認してください。一つのアドレスファミリーで狭く見えるルールが、もう一方では広いことがあります。

変換後のエンドポイントを、プロトコル、外側ポート、内側アドレス、内側ポートまで完全に書いてください。

どちらのルールも与えないもの

どちらの設計も、サービスに脆弱性がないことを証明せず、可用性も守りません。認証、更新、復旧は、ポートマッピングがどれほど狭くても対象に残ります。狭いマッピングは到達可能な面を減らしますが、リスナーを安全にはしません。

すでに別の正当なサービスを支えている広いルールは単なる誤りではなく依存関係なので、削除する前に棚卸しをしてその所有者を通じて置き換えてください。そうしないと、変更はセキュリティ修正による障害に見えます。同じ注意は、何かが静かに依存している固定ポートへの書き換えにも当てはまります。

露出の分析は、何が何に到達できるかについてであり、画面のラベルについてではありません。

変換後のエンドポイントを手に決める

ルールの結果を「公開UDPポートXはアドレスYのポートZに到達します」という一文で書いてください。次に、YでどのサービスがZに応答できるのか、それを誰が所有しているのかを問います。

nft list ruleset

答えが意図した一つのリスナーであれば、ルールは役割を果たしています。

答えが複数であれば、画面がそう呼んだかどうかに関わらず、あなたはホスト全体への転送を選んでいます。

関連記事