今回は、透過型プロキシについて記載していきます。透過型プロキシはPC側にプロキシの設定を行わずにプロキシを行う機能です。クライアントの設定を変更せずに、WEBセキュリティを実行できるため、カフェなど不特定多数のユーザーが利用するNWではよく使われていました。ただ、昨今はNGFWでWEBセキュリティを実行することが多いので利用されるケースは減ってきている印象です。なお、明示型プロキシと異なり透過型プロキシでは認証プロキシ設定を行うことができません。
透過型プロキシ(Transparent Proxy)の設定
以下の構成で検証を行います。
透過型プロキシはクライアントPCにプロキシの設定をしませんので、トラフィックがプロキシを通過するように細工します。いくつか方法が存在するのですが、オーソドックスな方法はNATを使ってインターネット向けのWEBトラフィック(グローバルIP:80、443)の宛先IPを、プロキシのIP/ポート(10.10.10.10:8080)に宛先NATすることです。今回はこの方法で試してみます。

ネットワーク設定
明示型プロキシのネットワーク設定と基本的にまったく同じですが、プロキシのIPは透過型になる関係で、ethernet1/2はListening Interfaceではなくなります。
関係するインターフェイスとゾーンの設定を行なっていきます。設定するのは以下の3つで、すべて同じ仮想ルータに設定します。
インターフェイス | ゾーン | 備考 |
---|---|---|
ethernet 1/1 | WAN | |
ethernet 1/2 | LAN | (PCから見たプロキシIP) |
loopback.1 | PROXY | Webプロキシ、DNSプロキシで利用 |
【NETWORKタブ】→【インターフェイス】に移動します。
- Ethernet インターフェイス設定

- ループバック インターフェイス設定

DNSプロキシの設定
明示型プロキシのDNSプロキシの設定の同じ設定を行います。
DNSプロキシの設定を行います。Webプロキシは、このDNSプロキシを使用して名前解決を行います。
【NETWORKタブ】→【DNSプロキシ】に移動し、画面下の「追加」をクリックします。

- 「OK」をクリックします。

透過型プロキシ(Transparent Proxy)の設定
今回の本題の透過型プロキシの設定を行なっていきます。
【NETWORKタブ】→【プロキシ】に移動します。
- 【プロキシの有効化】の右上の「歯車アイコン」をクリックします。
- プロキシタイプを「透明プロキシ(Transparent Proxy)」に変更します。
- 「OK」をクリックします。

【透過プロキシ構成】ウィンドウが表示されるようになるので、右上の「歯車アイコン」をクリックして以下の設定を行います。
- 接続タイムアウト(デフォルト値):5秒
- アップストリームインターフェイス:loopback.1 (プロキシが使用するIF)
- プロキシIP:loopback.1のIP(10.10.10.10)
- DNSプロキシ:先ほど作成したDNSプロキシ
・透過型プロキシのポート番号も「8080」固定です。
・透過型プロキシでは認証をすることができません。

ポリシーの設定
オブジェクトの作成
まず、以下のオブジェクトを作成します。
- アドレスオブジェクト(見た目の話なのでオプション)

- サービスオブジェクト
- プロキシ用のTCP_8080
- クライアントからのWEB通信をプロキシにNAT転送するためのサービス
- HTTPで使われることのある TCP_80,81,8080
- HTTPSで利用する443(HTTPS通信は443のみをサポート)

セキュリティポリシーの作成
セキュリティポリシーの設定を行います。今回は以下4つのポリシーを設定します。透過型プロキシでは、クライアントPCからインターネットへのWEB通信(HTTP、HTTPS)をNATで無理やりプロキシに転送して処理しています。そのため、クライアントPCがWEB通信を行うために、アクセス先のWEBサーバの名前解決を行うためのDNS通信が許可されている必要があります。
※ 2行目と4行目のポリシーは今回利用しませんので無効化しています。
- クライアントPC → DNSサーバへの通信
- 一般的な透過型プロキシではクライアントが名前解決を行います。
- 今回はインターネット上のDNSサーバを使う前提でポリシーを作成していますが、内部DNSサーバを使っても問題ありません。
- クライアントPC → プロキシへの通信(宛先NAT用のポリシー)
- DNSプロキシ → 外部DNSサーバ へのDNS通信
- 明示型プロキシ → インターネットへの通信

NATポリシーの作成
必要になるNAT設定は以下3つです。
- クライアントPCからインターネット宛のWEB通信をプロキシ(10.10.10.10:8080)に捻じ曲げる宛先NAT。対象となるポリシーは以下で設定しています。
- HTTP用:TCP_80,81,8080 (HTTPのポートは任意)
- HTTPS用:TCP_443 (HTTPSは443のみサポート)
- クライアントPCからインターネットへのDNS通信するためのNAPTポリシー
- プロキシからインターネットへのDNS通信するためのNAPTポリシー

ポリシーは以下のようになります。(2行目と3行目をまとめて1行で設定しています。)

通信ログ確認
Windows端末で通信確認を行います。プロキシの設定はしていません。
カラムとして「フロー タイプ」を追加すると、プロキシトラフィックかどうかを識別できます。
HTTPの場合
HTTP通信を行った場合のログを確認します。関連するログが4行出力されています。カッコ内の数字はセッションIDです。
- (27787):クライアントPCのインターネットへのDNS通信
- (27788):クライアントPCからインターネットへのWEB通信を宛先NATで強制的にプロキシに転送
- (27790):プロキシからインターネットへのDNS通信
- (27791):プロキシからインターネットへのWEB通信

URLフィルタリングログを確認します。「LAN→PROXY」と「PROXY→WAN」の2行出力されます。HTTP通信(web-browsing)のため、URLにパス情報まで記録されています。

HTTPSの場合(SSL復号なし)
SSL復号を行わないHTTPS通信の場合、プロキシはクライアントPCからインターネットへのWEB通信の中身(HTTPヘッダ内に記載されている宛先ホスト情報)をチェックすることができません。そのため、URLフィルタリング機能と同様に、SSL通信のClient Helloの中にあるSNI情報を参照します。SNI情報はドメイン情報までしか確認できません。
- (28564):クライアントPCのインターネットへのDNS通信
- (28565):クライアントPCからインターネットへのWEB通信を宛先NATで強制的にプロキシに転送(HTTPS通信)
- (28566):プロキシからインターネットへのDNS通信
- (28567):プロキシからインターネットへのWEB通信(HTTPS通信)

URLフィルタリングログを確認します。「LAN→PROXY」と「PROXY→WAN」の2行出力されますが、HTTPS通信(ssl)のため、URL情報はドメインレベルです。

HTTPSの場合(SSL復号した場合)
SSL復号を行った場合のログを確認してみます。まず、SSL復号の設定を行います。
証明書の作成
今回はPA上でルート証明書を作成します。
- 【DEVICEタブ】→【証明書の管理】→【証明書】に移動し、画面下の「生成」をクリックします。
- 以下のような証明書を作成します。(アルゴリズム等は適宜変更してください。)
- 作成した証明書をエクスポートして、PC側に「信頼されたルート証明機関」としてインポートしてください。

復号プロファイルの設定
SSL復号を行うために、まず復号プロファイルの設定を行います。
- 【OBJECTSタブ】→【復号】→【復号プロファイル】に移動して追加をクリックします。
- 【SSL復号化タブ】→【SSLフォワードプロキシ】→【サーバ証明書の確認】で、
「サーバ証明書(SAN/CNI)とのSNI不一致に関するブロック・セッション」にチェックをいれます。(ドメインフロンティング攻撃への対策) - 【クライアント拡張】で、「ストリップALPN」にチェック
「ストリップALPN」機能は、SSLハンドシェイク中のClient Hello中に含まれるALPN情報を削除することで、クライアントPCからサーバに対してHTTP/2の選択肢を提示できなくし、意図的にHTTP1.1を利用(フォールバック)させることが出来ます。

- 【SSLプロトコル設定】で、最大バージョンをTLSv1.2に変更します。
- 最小バージョンは適宜設定してください。(今回はデフォルトのまま)

OKをクリックして復号プロファイルの設定を保存します。
復号ポリシーの設定
復号プロファイルの設定が完了したら、以下のように復号ポリシーの設定を行います。
- PROXY to WAN のポリシーを作成します。(LAN to PORXYでは、うまく動作しませんでした。)
- 復号タイプは、Forward-Proxyのみサポートしています。

設定をコミットして、動作確認を行います。
ログの確認
- (36856):PCから(NAT変換を行い)プロキシ宛の通信ではSSL復号は実施していないので、URLパス名は記載されない。
- (36565):プロキシからインターネットへのWEBアクセスはSSL復号されているため、パス名まで記録されます。(=詳細にURLフィルタリングを行うことが可能)

コメント欄 質問や感想、追加してほしい記事のリクエストをお待ちしてます!