フォワードプロキシに認証を入れると、一見すると「ユーザー単位で外部通信を制御できる」ように見えます。しかし、実際にはプロキシ認証、HTTP CONNECT、HTTPS、ブラウザ実装、LDAP、SAML/OIDC の責務が重なり、思ったほど単純ではありません。
書籍
LDAP、SAML、OIDC、認証基盤の設計を整理したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
前提となる構成
ここで考えるのは、特定のインターネット上のサイトへアクセスする際に、送信元 IP 制限を満たすため、クライアント通信を特定のフォワードプロキシへ誘導する構成です。PAC ファイルを配布し、対象 URL だけプロキシを経由させる形は一般的です。
| 要素 | 役割 |
| PAC ファイル | URL に応じてプロキシ利用有無を制御する |
| フォワードプロキシ | クライアントの外部 HTTP/HTTPS 通信を中継する |
| 送信元 IP 制限 | 外部サービス側で許可する接続元を固定する |
| プロキシ認証 | プロキシ利用者を識別する |
プロキシ認証で実現したいこと
ネットワーク的には特定セグメントからのアクセスだけを許可していても、さらにユーザー単位で認証したい、という要件は自然です。LDAP に登録されているユーザーを使いたい、認証情報を平文で流したくない、という発想も妥当です。
- プロキシへの接続元ネットワークを限定する。
- 利用者を LDAP ユーザーで認証する。
- 認証情報を途中経路で読まれないようにする。
- URL 単位でプロキシ経由の有無を制御する。
LDAP 認証の限界
Apache や Squid で LDAP 認証を使うこと自体は可能です。ただし、多くの場合は Basic 認証として扱われます。Basic 認証の認証情報は Base64 エンコードであり、暗号化ではありません。つまり、通信路が保護されていなければ、認証情報を守れているとは言えません。
| 方式 | 意味 |
| Base64 | 文字列表現の変換であり、暗号化ではない |
| Basic 認証 | 単純で実装しやすいが、TLS なしでは認証情報を守れない |
| LDAP | 認証元として使えるが、プロキシ認証そのものの通信路保護とは別問題 |
HTTP と HTTPS でプロキシの意味が変わる
HTTP の場合、プロキシは HTTP リクエストを解釈できます。代理アクセスとして URL、ヘッダー、認証、制御を扱いやすい構造です。
Client --- HTTP --- Proxy --- HTTP --- Web ServerHTTPS の場合、通常のフォワードプロキシは CONNECT でトンネルを作ります。プロキシは宛先ホストとポートを見て中継しますが、TLS の中身は読めません。
Client --- CONNECT --- Proxy --- TCP Tunnel --- Web Server
Client === TLS ================================== Web Serverここで重要なのは、宛先 Web サーバーとの HTTPS と、クライアントがプロキシへ送るプロキシ認証は別の文脈だという点です。宛先が HTTPS だからといって、プロキシ認証そのものが自動的に安全になるわけではありません。
HTTPS プロキシはブラウザで扱いにくい
理屈上は、クライアントとプロキシ間を HTTPS 化した「HTTPS プロキシ」にすれば、プロキシ認証の通信路を保護できます。curl などでは挙動を確認できる場合があります。
Client === HTTPS === Proxy --- CONNECT --- Web Server
Client === TLS ================================ Web Serverしかし、ブラウザ利用では期待通りに動かないことがあります。ブラウザはプロキシとの TLS と、宛先サイトとの TLS を同一の通信文脈で扱う際、実装上の制約や安全性判断により接続を拒否する場合があります。ここはプロキシ製品、ブラウザ、OS の実装差にも強く依存します。
SAML/OIDC はどこに置けるのか
SAML や OIDC は、Web アプリケーションの認証・認可には強力です。Keycloak のような IdP と連携すれば、LDAP を背後に置きつつ、現代的な認証基盤を作れます。
ただし、フォワードプロキシの認証にそのまま自然に適用できるわけではありません。SAML/OIDC はブラウザリダイレクト、トークン、セッションを前提とするため、HTTP CONNECT を中継するプロキシ認証とは責務が異なります。
| 領域 | 向いている認証 |
| Web アプリケーション | SAML / OIDC / OAuth2 |
| プロキシ利用者の簡易認証 | Basic / LDAP / Kerberos など |
| 端末・経路の制御 | ネットワーク制御、証明書、端末管理 |
| 外部通信の制御 | PAC、プロキシ、FW、DNS、CASB など |
本質的な課題
フォワードプロキシ認証の難しさは、「誰を認証するか」と「どの通信を制御するか」が混ざりやすい点にあります。プロキシは通信経路上の中継点であり、Web アプリケーションそのものではありません。
- ユーザー認証をしたいのか。
- 端末を識別したいのか。
- 送信元 IP を固定したいのか。
- URL 単位で通信を振り分けたいのか。
- 外部サービス側の許可条件を満たしたいのか。
- 認証情報を暗号化したいのか。
これらをまとめて「プロキシ認証」で解決しようとすると、構成が不自然になります。特に HTTPS が標準となった現在では、プロキシが見える情報は制限され、ブラウザや TLS の安全性判断にも制約されます。
設計としての落としどころ
現実的には、プロキシ認証だけに過度な意味を持たせず、複数の層で役割を分ける方が自然です。
| 目的 | 現実的な担当 |
| 送信元 IP を固定する | フォワードプロキシ / NAT / 出口制御 |
| 対象 URL だけ経由させる | PAC / 管理対象ブラウザ設定 |
| 利用端末を制限する | 端末管理、証明書、ネットワーク制御 |
| 利用者を識別する | IdP、Web アプリ側認証、ログ相関 |
| 認証情報を守る | TLS、Kerberos、端末管理、プロキシ製品選定 |
まとめ
フォワードプロキシにおける認証は、見た目ほど単純ではありません。LDAP 認証を付ければユーザー認証はできますが、Basic 認証であれば通信路保護が問題になります。HTTPS プロキシで暗号化しようとしても、ブラウザ実装や CONNECT の性質にぶつかることがあります。
SAML/OIDC は強力ですが、Web アプリケーション認証の仕組みであり、フォワードプロキシの認証にそのまま載せるものではありません。プロキシは通信経路、IdP は認証基盤、PAC は経路選択、ネットワーク制御は接続元制限として、責務を分けて設計する必要があります。
この問題の本質は、プロキシ認証を高度化することではなく、ユーザー、端末、通信経路、外部サービス側の制約をどの層で担保するかを分離することにあります。



