VPN ポートを塞いでも不正なトンネルを止められない理由
ポート一覧は 443 やプロトコル番号を使うトンネルを見落とします。好みのポートではなく、端末の権限、承認済みの宛先、観測されたフローを管理してください。
ファイアウォールの規則は、一致した通信を拒否する。許可した接続のあらゆる使い方を拒否するわけではなく、不正トンネル対策の多くはまさにこの隙間で失敗する。五年前に人気だったクライアントのポートを塞いでも、443 を通るものは手つかずのままで、自分の経路を書き換えられる端末については何も語らない。権限と宛先を中心に統制を組み、そのうえで実際に許可しているフローを読む。
ポート一覧が方針にならない理由
ポートはトランスポート層の概念であり、いくつかのトンネル技術はポートをまったく使わない。別の技術は、通過が保証されているという理由で、通常の Web 通信とポートを意図的に共有する。したがって、過去のポートに合わせた規則は、振る舞いの分類ではなく一握りの実装を列挙するだけになる。老朽化にも弱い。プロバイダーが既定値を変えた瞬間、一覧は過去を説明するものになる。
さらに悪いことに、あるポートを塞いだ成功は問題全体が解決した証拠と読まれ、本当に効いたはずの統制を遅らせる。
プロトコル番号とポートは別の名前空間
GRE には IP プロトコル番号 47 が割り当てられている。TCP ポート 47 でも UDP ポート 47 でもなく、ポート向けに書いたフィルターは GRE に届かない。ESP と AH も同じ性質で、プロトコル番号 50 と 51 に位置する。カプセル化された通信は許可された接続の内側に隠れることもあり、カテゴリやシグネチャは助けになるが、それだけで用途を証明することは決してできない。信頼度と網羅性は特定の製品とリリースに属するもので、概念に属するものではない。
nft list ruleset | grep -nE 'gre|esp|ah|47|50|51'
cat /proc/net/protocols | head -20
ss -tn state established '( dport = :443 )'
最初のコマンドは実際に書いた内容を示し、二番目はスタックが知るプロトコル表を示し、三番目は今 Web ポートを使っているセッション数を示す。どれも、そのセッションが何のためのものかは教えてくれない。TLS の傍受は別の判断であり、信頼、プライバシー、クライアント互換性に独自のコストがかかる。特定の宛先を拒否する前提条件でもなければ、トンネルを認識できる保証でもない。
端末が持つ権限を統制する
自分のルーティングテーブルとフィルタリングを変更できる端末は、通常のアプリにはない能力を持つ。接続の受け入れと構成管理こそがその能力を奪うものであり、トンネルがどのポートを使うかとは無関係に働く。
つまり、承認された接続には他の端末のために転送する無制限の許可ではなく宣言された役割が与えられ、インストール権限とネットワーク管理権限は後付けではなく方針の一部になる。
残ったフローを観測する。端末の識別情報、割り当てられた役割、フローのメタデータを関連づけ、分類は判決ではなく限界のある証拠として扱う。
conntrack -L | awk '{print $1, $4, $5}' | sort | uniq -c | sort -rn | head
ip -br addr show
ip route show default
長時間の暗号化セッションや大きなバイト数は悪用の証拠ではない。バックアップ、サポートツール、拠点間リンクは同じに見える。収集は調査の範囲に限定し、見つけたものはそれを所有するプロセスの下で保管する。
例外を明示する
どの環境にも、更新、認証、復旧のために到達可能であり続ける必要のある宛先がある。目的と担当者とともに書き留め、障害のたびに発見するのではなく定期的に見直す。
業務が広範な外部サービスを本当に許可する場合は、宛先のラベルでどの利用も許されると決めつけず、そのサービスが与える権限を評価する。
見直されていない例外は、チケット番号の付いた穴である。名前、理由、見直し日のある例外は判断である。
スローガンではなく書面の計画で受け入れる
受け入れには二つの半分がある。承認された作業は引き続き成功し、特定の禁止事例は権限ある試験で失敗する。どちらも変更前に書かれ、変更後に繰り返されなければならない。
その見直しには、ノート PC で追加された経路がエッジで完璧に機能していたフィルターを無効にしうるため、エンドポイントと方針の変更も含める。
成果物は、残存リスクの既知の一覧を伴う、所有権の明確な出口境界である。いくつかのポートを閉じたことで不正な VPN 利用が終わったと主張することは、それではない。