【Fortigate】クラウドプロキシ(Explicit Proxy+ローカルブレークアウト)FortiOS6.2.4

Web の通信をプロキシサーバ経由にすると、セキュリティの向上、キャッシュ、アクセスログの収集などができます。ただし、Microsoft 365(Office 365)などの通信は、1ユーザあたりのセッション数や通信量が多く、応答の速さも求められるため、プロキシサーバの処理負荷が問題になります。

FortiGate では、特定の宛先の通信だけプロキシサーバを経由させず、直接インターネットに出すことができます。プロキシを迂回してインターネットに出すことを、ブレークアウト(ローカルブレークアウト)と呼ぶことがあります。この記事では、FortiGate の Explicit Proxy の後ろに Squid プロキシを置く多段プロキシ構成で、Microsoft 関連の通信だけをブレークアウトさせる設定を確認します。検証時の FortiOS は 6.2.4 です。

この記事でわかること
  1. FortiGate から Squid に転送する多段プロキシの設定
  2. Microsoft 関連の通信だけを直接インターネットに出すプロキシポリシーの設定
  3. Squid のアクセスログと転送トラフィックでの確認方法

検証の構成

次の記事の構成に Squid プロキシサーバ(10.0.1.20)を追加し、Microsoft 関連の通信だけ Squid を迂回させます。先に読んでおくと流れがつかみやすくなります。

>> 参考記事:【Fortigate】セキュアWeb ゲートウェイ(SWG : Explicit Proxy+SSLインスペクション+UTM)の設定と動作確認 FortiOS6.2.4
>> 参考記事:【Fortigate】プロキシ認証(Explicit Proxy+LDAPによるBasic認証)FortiOS6.2.4

端末(10.0.1.10)は、プロキシサーバとして FortiGate の 10.0.1.99:8080 を指定しています。FortiGate は、Microsoft 関連の通信は port1 から直接インターネットに出し、それ以外の通信は Squid(10.0.1.20:3128)に転送します。

Internet端末10.0.1.10FortiGateプロキシ 10.0.1.99:8080Microsoft 関連(BreakOut)port1 から直接多段プロキシ10.0.1.20:3128Squidそれ以外の通信(Explicit Proxy ポリシー)
図1 Microsoft 関連の通信だけ Squid を迂回させる

多段プロキシの設定

Web プロキシフォワーディングサーバを作る

FortiGate で受け付けたプロキシ接続を Squid に転送する、多段プロキシの設定をします。ネットワーク ›› Explicitプロキシ を開き、Webプロキシフォワーディングサーバ の 新規作成 をクリックします。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

FortiGate 管理画面画面イメージ
ネットワーク ›› Explicitプロキシ ›› 新規フォワーディングサーバ
1名前SQUID
プロキシアドレスタイプ◉ IP○ FQDN
2プロキシアドレス10.0.1.20
3ポート3128
4サーバダウン アクション◉ ブロック○ 元のサーバを使う
5ヘルスモニタ ON
ヘルスチェックモニタサイトhttp://www.google.com
OKキャンセル
図2 Web プロキシフォワーディングサーバの設定(実際の画面ではなく、設定する項目を示したイメージです)
No.項目設定内容
1名前任意の名前です。今回は SQUID にします。
2プロキシアドレスSquid のアドレス 10.0.1.20 を入力します。
3ポートSquid は既定のポート番号で受け付けているので、3128 にします。
4サーバダウン
アクション
Squid がダウンしたときの動きです。ブロック は Squid が戻るまで通信を止め、元のサーバを使う は Squid を経由せずに宛先へ通信させます。今回は ブロック のままにします。
5ヘルスモニタ有効にします。Squid 経由でヘルスチェックモニタサイトにアクセスして、Squid が動いているかを確かめます。モニタサイトは、既定で http://www.google.com が入っています。

OK をクリックすると、一覧に次のように追加されます。最後に 適用 をクリックします。

FortiGate 管理画面画面イメージ
ネットワーク ›› Explicitプロキシ ›› Webプロキシフォワーディングサーバ
サーバ名アドレスポートヘルスチェックサーバダウン
1SQUID10.0.1.203128 有効化済みブロック
図3 追加したフォワーディングサーバ(実際の画面ではなく、表示のポイントを示したイメージです)

プロキシポリシーで Squid に転送する

FortiGate が受けたすべてのプロキシ通信を、Squid に転送します。ポリシー&オブジェクト ›› プロキシポリシー を開くと、前の記事で作った Explicit Proxy ポリシーがあります。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› プロキシポリシー
ID名前送信元宛先アクションセキュリティプロファイルログ
⊟ explicit-web proxy → port1
21Explicit Proxyall
Proxy-LDAP-Users
all✓ 許可AV default
WEB default
APP default
IPS default
SSL deep-inspection
すべて
図4 既存の Explicit Proxy ポリシー(実際の画面ではなく、表示のポイントを示したイメージです)

このポリシーを開き、Webプロキシフォワーディングサーバ を有効にして SQUID を選び、OK をクリックします。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› プロキシポリシー ›› プロキシポリシーの編集
名前Explicit Proxy
プロキシタイプ◉ Explicit Web○ トランスペアレントWeb○ FTP
有効化済みインターフェースport2
発信インターフェースport1
送信元all Proxy-LDAP-Users
宛先all
サービスwebproxy
アクション◉ 許可○ 拒否
ファイアウォール / ネットワークオプション
プロトコルオプションdefault
1Webプロキシフォワーディングサーバ ON SQUID
OKキャンセル
図5 プロキシポリシーでフォワーディングサーバを指定する(実際の画面ではなく、設定する項目を示したイメージです)

Squid のアクセスログを見ると、Google へのアクセスが定期的に記録されています。これは、FortiGate のヘルスモニタによるアクセスです。

Squid

# tail -f /var/log/squid/access.log
1603024284.759     93 10.0.1.99 TCP_MISS/200 14898 GET http://www.google.com/ - HIER_DIRECT/(伏せています) text/html
1603024292.363     81 10.0.1.99 TCP_MISS/200 14938 GET http://www.google.com/ - HIER_DIRECT/(伏せています) text/html
1603024296.750     73 10.0.1.99 TCP_MISS/200 14882 GET http://www.google.com/ - HIER_DIRECT/(伏せています) text/html
表示意味
1603024284.759記録した時刻(UNIX 時間)です。
93処理にかかった時間(ミリ秒)です。
10.0.1.99Squid に接続してきたクライアントです。多段プロキシなので、FortiGate のアドレスになります。
TCP_MISS/200キャッシュの結果と HTTP ステータスです。CONNECT の通信では TCP_TUNNEL になります。
GET http://…リクエストのメソッドと URL です。
HIER_DIRECT/…Squid が宛先のサーバに直接接続したことを示します。

多段プロキシの動作確認

Microsoft 365 と Facebook にアクセスする

端末から login.microsoftonline.com にアクセスすると、サインイン画面が表示されます。

端末のブラウザ画面イメージ
https://login.microsoftonline.com/common/oauth2/authorize?…
Sign in to your accountサインイン画面が表示される
https://www.facebook.com/
Facebook – Log In or Sign Upログイン画面が表示される
図6 Microsoft 365 と Facebook にアクセスできる(実際の画面ではなく、結果を示したイメージです)

Squid のアクセスログに、login.microsoftonline.com へのアクセスが記録されています。Microsoft 365 のサインイン画面へのアクセスです。

Squid

# tail -f /var/log/squid/access.log
1603024455.975  85897 10.0.1.99 TCP_TUNNEL/200 53875 CONNECT login.microsoftonline.com:443 - HIER_DIRECT/(伏せています) -

ログ&レポート ›› 転送トラフィック でも、login.microsoftonline.com や、そのほかの Microsoft 関連の通信を確認できます。使われたポリシーが Explicit Proxy であることも、ここで確認しておきます。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
送信元宛先アプリケーション名ポリシーID
(伏せています)(10.0.1.10)outlook.office365.comMicrosoft.Outlook.Office.365Explicit Proxy (2)
(伏せています)(10.0.1.10)login.microsoft.comMicrosoft.AuthenticationExplicit Proxy (2)
(伏せています)(10.0.1.10)www.office.comMicrosoft.Office.365.PortalExplicit Proxy (2)
(伏せています)(10.0.1.10)1login.microsoftonline.comMicrosoft.AuthenticationExplicit Proxy (2)
(伏せています)(10.0.1.10)ctldl.windowsupdate.comRoot.Certificate.URLExplicit Proxy (2)
⋮(以下略)
図7 Squid 経由で通った Microsoft 関連の通信(実際の画面ではなく、表示のポイントを示したイメージです。送信元のユーザ名は伏せ、宛先はホスト名だけを示しています)

続けて Facebook にアクセスすると、こちらも表示されます。Squid のアクセスログにも、Facebook へのアクセスが記録されています。

Squid

# tail -f /var/log/squid/access.log
1603024901.086    711 10.0.1.99 TCP_TUNNEL/200 53193 CONNECT www.facebook.com:443 - HIER_DIRECT/(伏せています) -

転送トラフィックでも、Facebook へのアクセスが Explicit Proxy ポリシーで通っていることを確認できます。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
送信元宛先アプリケーション名ポリシーID
(伏せています)(10.0.1.10)www.facebook.comFacebook1Explicit Proxy (2)
(伏せています)(10.0.1.10)www.facebook.comFacebookExplicit Proxy (2)
(伏せています)(10.0.1.10)static.xx.fbcdn.netFacebookExplicit Proxy (2)
⋮(以下略)
図8 Facebook への通信のログ(実際の画面ではなく、表示のポイントを示したイメージです)

これで、多段プロキシの動作を確認できました。

ブレークアウトの設定

ブレークアウト用のプロキシポリシーを作る

Microsoft 関連の通信だけを、Squid を経由させずに直接インターネットに出します。ポリシー&オブジェクト ›› プロキシポリシー で 新規作成 をクリックし、ブレークアウト用のポリシーを作ります。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› プロキシポリシー ›› プロキシポリシーの編集
1名前BreakOut
プロキシタイプ◉ Explicit Web○ トランスペアレントWeb○ FTP
有効化済みインターフェースport2
2発信インターフェースport1
3送信元all Proxy-LDAP-Users
4宛先 インターネットサービス(22)Microsoft-Azure
Microsoft-DNS
Microsoft-Dynamics
Microsoft-FTP
Microsoft-ICMP
Microsoft-Inbound_Email
Microsoft-Intune
Microsoft-LDAP
Microsoft-Microsoft.Update
Microsoft-NetBIOS.Name.Service
Microsoft-NetBIOS.Session.Service
(続き)Microsoft-NTP
Microsoft-Office365
Microsoft-Office365.Published
Microsoft-Other
Microsoft-Outbound_Email
Microsoft-Outlook
Microsoft-RTMP
Microsoft-Skype_Teams
Microsoft-SSH
Microsoft-Web
Microsoft-WNS
スケジュールalways
5サービスwebproxy
アクション◉ 許可○ 拒否
Webプロキシフォワーディングサーバ OFF
セキュリティプロファイル
6アプリケーションコントロール ON default
SSLインスペクションdeep-inspection
ロギングオプション
7許可トラフィックをログ ON ○ セキュリティイベント◉ すべてのセッション
図9 ブレークアウト用のプロキシポリシー(実際の画面ではなく、設定する項目を示したイメージです)
No.項目設定内容
1名前任意の名前です。今回は BreakOut にします。
2発信インターフェースインターネット向けの port1 を選びます。
3送信元ユーザグループ Proxy-LDAP-Users の通信を対象にします。
4宛先Microsoft 関連のインターネットサービスをすべて選びます。宛先の + をクリックし、右側の インターネット タブで「Microsoft」と検索して、表示された22個をすべて選びます。
5サービスwebproxy を選びます。
6セキュリティ
プロファイル
アプリケーションを正しく識別できるように、アプリケーションコントロールを有効にし、SSL インスペクションを deep-inspection にします。SSL インスペクションは処理負荷が高いので、使う FortiGate の性能を確認したうえで適用を検討してください。
7許可トラフィックを
ログ
すべてのセッション にします。

Web プロキシフォワーディングサーバは有効にしません。そのため、このポリシーに一致した通信は Squid を経由せず、FortiGate から直接インターネットに出ます。

ポリシーの順番を入れ替える

プロキシポリシーは上から順に評価されるので、作った BreakOut ポリシーを一番上に移動します。GUI でポリシーを選び、ドラッグすると移動できます。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› プロキシポリシー
ID名前送信元宛先アクションセキュリティプロファイル
⊟ explicit-web proxy → port1
31BreakOutall
Proxy-LDAP-Users
Microsoft-Azure
Microsoft-DNS
⋮
Microsoft-WNS(22個)
✓ 許可APP default
SSL deep-inspection
22Explicit Proxyall
Proxy-LDAP-Users
all✓ 許可AV default
WEB default
APP default
IPS default
SSL deep-inspection
図10 BreakOut ポリシーを一番上に移動した状態(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1BreakOutMicrosoft 関連の通信は、このポリシーに一致して直接インターネットに出ます。
2Explicit Proxyそれ以外の通信は、このポリシーに一致して Squid に転送されます。

ブレークアウトの動作確認

Microsoft 365 と Facebook にもう一度アクセスする

端末から、もう一度 login.microsoftonline.com にアクセスします。サインイン画面は表示されますが、今度は Squid のアクセスログに login.microsoftonline.com へのアクセスが記録されません。

ログ&レポート ›› 転送トラフィック で確認すると、Microsoft 関連の通信に BreakOut ポリシーが適用されています。Squid を経由せず、直接インターネットに出ていることがわかります。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
宛先サービスアプリケーション名ポリシーID
login.live.comMicrosoft-AzureMicrosoft.Authentication1BreakOut (3)
otf.msn.comMicrosoft-AzureMicrosoft.PortalBreakOut (3)
aadcdn.msftauth.netMicrosoft-Office365Microsoft.AuthenticationBreakOut (3)
outlook.office365.comMicrosoft-Office365.PublishedMicrosoft.Outlook.Office.365BreakOut (3)
login.microsoft.comMicrosoft-Office365.PublishedMicrosoft.AuthenticationBreakOut (3)
www.office.comMicrosoft-Office365.PublishedMicrosoft.Office.365.PortalBreakOut (3)
s.amazon-adsystem.comHTTPSAmazon.AdsExplicit Proxy (2)
track1.aniview.comHTTPSHTTP.BROWSER_IEExplicit Proxy (2)
図11 BreakOut ポリシーで通った通信(実際の画面ではなく、表示のポイントを示したイメージです。宛先はホスト名だけを示しています)
No.表示意味
1BreakOut (3)Microsoft 関連の通信に BreakOut ポリシーが適用されています。サービス の列には、一致したインターネットサービスの名前が表示されます。

ログの詳細を見ると、宛先インターフェースがインターネット向けの port1 になっていることがわかります。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック ›› ログ詳細
送信元 IP10.0.1.10
送信元インターフェースport2
ユーザ(伏せています)
グループProxy-LDAP-Users
宛先 IP(伏せています)
ポート443
1宛先インターフェースport1
アプリケーション名Microsoft.Authentication
サービスMicrosoft-Office365.Published
図12 ブレークアウトした通信のログ詳細(実際の画面ではなく、表示のポイントを示したイメージです)

Facebook はブレークアウトの対象ではないので、これまでどおり Squid に転送されます。Squid のアクセスログにも記録されています。

Squid

# tail -f /var/log/squid/access.log
1603026597.319  86404 10.0.1.99 TCP_TUNNEL/200 52181 CONNECT www.facebook.com:443 - HIER_DIRECT/(伏せています) -
FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
宛先サービスアプリケーション名ポリシーID
fbsbx.comHTTPSFacebook1Explicit Proxy (2)
cx.atdmt.comHTTPSHTTP.BROWSER_IEExplicit Proxy (2)
fbsbx.comHTTPSFacebookExplicit Proxy (2)
login.live.comMicrosoft-AzureMicrosoft.AuthenticationBreakOut (3)
srtb.msn.comMicrosoft-Office365Microsoft.PortalBreakOut (3)
img.img-taboola.comHTTPSHTTP.BROWSER_IEExplicit Proxy (2)
⋮(以下略)
図13 Facebook の通信は Explicit Proxy ポリシーのまま(実際の画面ではなく、表示のポイントを示したイメージです)

ブレークアウトの対象は、FortiGate が持つ ISDB(Internet Service Database)から選べます。ISDB はクラウドサービスなどの IP アドレスやポート番号をまとめたデータベースで、FortiGuard から定期的に更新されます。

参考:Squid がダウンしている場合

フォワーディングサーバの サーバダウン アクション を ブロック にしているので、Squid がダウンしていると、ブレークアウトの対象ではない通信はできなくなります。たとえば端末から Google にアクセスすると、次のようなエラー画面が表示されます。

端末のブラウザ画面イメージ
https://www.google.com/
504 Gateway Timeout: remote server did not respond to the proxyURL:https://www.google.com/ Username:(伏せています) Group Name:Proxy-LDAP-Users
図14 Squid がダウンしているときのエラー画面(実際の画面ではなく、表示のポイントを示したイメージです)

Squid がダウンしたときも通信を続けたい場合は、サーバダウン アクション を 元のサーバを使う にすると、Squid を経由せずに宛先へ通信させることができます。

まとめ

設定内容
多段プロキシネットワーク ›› Explicitプロキシ で Web プロキシフォワーディングサーバ(Squid)を作り、プロキシポリシーで指定する
ブレークアウト宛先に Microsoft 関連のインターネットサービスを選び、フォワーディングサーバを使わないプロキシポリシーを作る
ポリシーの順番ブレークアウト用のポリシーを、すべての宛先を Squid に送るポリシーより上に置く
確認Squid のアクセスログに記録されないこと、転送トラフィックのポリシー ID が BreakOut になっていること
Squid ダウン時ブロック なら通信できなくなる。元のサーバを使う なら直接通信する

コメント