VPN認証のレルム:どのアカウント名前空間が勝つのか
レルムはログインを一つのIDシステムへ振り分けるもので、国ではありません。名前の形式を確定し、プロキシを通してリクエストを追跡し、何が応答したかを記録します。
VPNのログインは必ず何らかのアカウント名前空間に着地し、そのどれを選ぶかを決めるのがレルムです。レルムは国やサーバーの所在地、信頼レベルについては何も語りません。同じユーザー名が別々のレルムに存在しうるため、正しいパスワードが誤ったアカウントを認証してしまうことがあります。本ランブックでは、まず識別子の形式を確定し、次にリクエストを実際に応答したシステムまで追跡します。
レルムが選択するもの
ゲートウェイはユーザー名を受け取り、どこで確認するかを決めなければなりません。レルムとは、その名前の一部、あるいは隣接する属性であり、ディレクトリ、RADIUSプール、ローカルアカウントファイルといったデータベースを選びます。MicrosoftのNPSはこれをレルム名と呼んで接続要求をルーティングし、一方、EAPのネットワークアクセス識別子は、RFC 7542においてアットマークの後ろの接尾辞として同じ考え方を担います。どちらもセレクターであり、資格情報が有効かどうかは決めません。
この分離は、大きく異なる二つの障害を生みます。誤ったパスワードでも正しくルーティングするレルムは拒否を一つ返すだけですが、誤ったデータベースへルーティングするレルムは、正しいパスワードを拒否したり、他人のパスワードを受け入れたりしえます。どちらのエラーもレルムに触れないため、最初の診断は常に「どのシステムが応答したかを見極めること」です。
レルムの構文は導入環境に依存します。資格情報なしの名前と属性を求めるサービスもあれば、user@domain を求めるものもあり、ほとんどのガイドが触れないバックスラッシュ形式を期待するものも少数あります。
バックエンドが期待する形式を使う
チュートリアルの接尾辞を試す前に、どの形式を入力すべきか運用担当者に尋ねてください。単純な名前を期待するバックエンドにドメイン修飾名が届くと、通常はパスワード検査ではなく検索で失敗します。二つのディレクトリに同じ短い名前がある場合が、レルムの欠落が最も大きな被害を生むケースです。
管理アカウントを証拠とみなさないでください。サービスを管理するWebコンソールはローカルファイルに対して認証するかもしれませんが、トンネルはまったく別のディレクトリを検査します。実際のユーザーが使う資格情報で、実際のユーザーが使うインターフェース上でテストしてください。コンソールへのログイン成功は、ゲートウェイがVPN認証に適用するレルムについて何も語りません。
ブラウザやメールクライアントは以前の識別子をキャッシュし、黙って再送することがあります。報告されたユーザー名が入力したものと異なる場合、まずそのキャッシュを確認してください。
プロキシを通してリクエストを追跡する
FreeRADIUSのフロントエンドでは、レルムはプロキシ設定で宣言され、宣言された接尾辞がどのホームサーバーにリクエストを届けるかを決めます。どのレルムにも一致しないリクエストは既定でローカルに処理されるため、変更する前にそのファイルを読んでください。
grep -n -A4 '^realm' /etc/freeradius/3.0/proxy.conf
radtest '[email protected]' 'wrong-password' 10.20.30.10 0 testing123
journalctl -u freeradius --since '-10 min' | grep -iE 'realm|stripped'
grepはどの接尾辞が存在し、それぞれがどのプールを対象にしているかを示します。radtest呼び出しはレルム付きの名前と意図的に誤ったパスワードを送るので、拒否されればルーティングと資格情報の検査の両方が実行された証拠になります。その試行前後のジャーナル行は、プロキシ前に名前が削除されたか、どのホームサーバーが受け取ったかを示します。ログにレルムの一致がまったく見当たらなければ、リクエストはローカルサーバーから出ておらず、問題はパスワードではなく接尾辞です。
入力が実行ごとに異なる場合にのみログがルーティングと資格情報の失敗を切り分けるため、一度に一つだけ変更して試行を繰り返してください。共有シークレットは、ファイルやプロンプトからの読み取りに対応するツールでは、シェル履歴に残さないようにしてください。
試行を漏えいさせずに記録する
管理者が行動できる形で障害を書きます。書くべきは、インターフェース、識別子の形式、レルムの有無、そして正確で秘密ではないエラーです。実在のユーザー名は公開報告から外してレルムを残し、すべての識別子を同じプレースホルダーに伏せるのは、まさに探している不整合を隠すことになります。ゲートウェイ、プロキシ、ディレクトリは別々のログを保持するため、タイムスタンプも重要です。
次に打ち間違える人が同じチケットを開くため、勝った形式をユーザー向けに文書化してください。パスワードリセットは、誤った名前空間に着地し続けるリクエストを直しません。レルムはルーティングの決定であり、ルーティングの決定は正しく名付けることで直ります。