依頼はいつも同じ形で届く。承認されていないトンネルを運ぶから端で IPsec を閉じよ、というものだ。そして最初の苦情は、Wi-Fi 経由の通話ができなくなった人のところから来る。二つの事実は同時に正しく、どちらも制御を捨てる理由にはならない。ファイアウォールに必要なのは、名指しされた機能、限定された送信元、文書化された宛先、そして担当者を備えたサービス例外である。五つの手順で、来年見知らぬ人が見直せるルールになる。

プロトコルに名前を付ける前に、サービスに名前を付ける

SIP サービスの固定電話と、通信事業者の Wi-Fi Calling を行う端末は同じネットワークプロファイルを共有しておらず、ファイアウォール用語としての VoIP はどちらも説明しない。ポートと宛先のデータは、サービスを運用するベンダーや通信事業者から得るべきで、別の電話システムに属する記憶のポート一覧からではない。これが機能を守るルールと、言葉を守るルールの違いだ。

Apple の サービスポートのリファレンス には Wi-Fi Calling 用として UDP 500 と 4500 が載っており、これは大半の一律 IPsec 遮断が落とすまさにその組である。変更記録には、そのポートの隣に機能名を書く。参照したリファレンスの版か日付も添える。ベンダーの表は書き換えられるからだ。存在理由であるサービスを名指ししたルールは見直せるが、プロトコル区分を名指ししたルールは見直せない。

例外は恩恵ではなく契約として書く

例外には、許可する機能、それを使う端末クラス、必要なトランスポート、責任者が文書化する宛先を記す。所有者と見直し日も持たせる。通信事業者の端点も端末モデルも、ファイアウォールチームに知らせずに変わるからだ。見直しはチーム名ではなく、チームより長く残る個人に割り当てる。記録だけで第三者がルールを再導出できる程度に、文言を具体的に保つ。

例外は他のエッジポリシーと同じサイクルに載せる。事業者が宛先を移したり、端末モデルが入れ替わったりしたら、次の障害ではなく見直しで気づけるようにする。通話が壊れたと報告した人と輪を閉じる。その人だけが、遮断が閉じるはずだったトンネルを開け直さずに修正を確認できる。その確認も日付とともに記録に残す。

一時的な電話の修正と銘打った恒久的な許可は、二年後には弁護できない。特定されたサービスに結びついた許可には、意図して更新する期限がある。

送信元の範囲を正直に定める

例外を管理端末セグメントに限ることは、建物内のすべてのノート PC にプロトコルを開けるよりはるかに強い。ネットワークがそのセグメントを識別できないなら、端末を認識しているかのような示唆ではなく、その事実を書く。最も安く良い結果は、別の理由ですでに存在する境界を再利用することだ。例外は新しい制御を発明するのではなく、既存の制御を受け継ぐ。アドレスによる絞り込みは端末認証ではなく、変更記録もそう示してはならない。

送信元アドレスやハードウェアアドレスは、物理端末の証明ではない。どちらかに意味があるかは、そのセグメント内の他の制御に完全に依存する。ルールの根拠が MAC アドレスにあるなら、配布前に利用者がそれを変えるのを何が妨げるかを確認する。

ポートルールが言えないことを受け入れる

ポートはトランスポートの端点を識別するもので、業務上の意図ではない。承認済みの通話サービスと未承認のトンネルが同じ UDP 4500 を通るなら、ポート基準のルールでは両者を分けられない。分けられると主張するルールは正確に見えてそうではなく、自らの形を認めるルールより悪い。これは仕組みの限界であり、書いた人の誤りではない。

それをルールの隣に書き、例外をネットワークが持つ強制手段、たとえば端末管理や許可宛先リストと組み合わせる。そのうえで、道具が許す限り狭く例外を表現する。たとえばセグメントとポートの組を名指しし、一般遮断をその後に置く nftables のルールである。

nft add rule inet edge forward ip saddr 10.40.0.0/24 udp dport { 500, 4500 } counter accept
nft add rule inet edge forward udp dport { 500, 4500 } counter drop

nftables は順に評価し最初の一致で止まるので、限定した許可は一般遮断より上に置かなければならない。順序を逆にすると、例外は黙って何もしない。

機能と遮断を検証する

承認済みの検証を通常の Wi-Fi 通話で、例外の対象となる端末クラスから実行し、除外したクライアントが依然として失敗することを確認する。いかなる状況でも緊急通話を試験項目にしてはならない。そのうえで配布したルールを点検する。カウンタがゼロで止まっていれば、例外が一度も一致しなかった最速の証拠になる。

nft -a list chain inet edge forward

試験には再接続かネットワーク変更を含め、すでに接続済みの状態ではなく端末がネットワークに参加する冷えた開始から繰り返す。通話が失敗し続けるのにカウンタが動くなら、問題はファイアウォールを離れ、事業者の宛先リストに属している。

関連記事