【プロキシ負荷低減】セッション数の多いo365をpacで迂回(bypass)する設定~FortiGate編~

プロキシの負荷とセッション数

プロキシサーバは主に『ログの集中管理』や、アダルトやドラッグ等の『望ましくないサイトカテゴリの閲覧禁止』をするために使われることが多いです。

以前は『キャッシュによる速度向上』の側面もありましたが、最近ではリアルタイム性の高い Web アプリケーションが増え、キャッシュによる恩恵は薄れてきています。

マイクロソフトが提供する Office365 もリアルタイム性の高い Web アプリケーションの 1 つです。

1 ユーザが Office365 の複数アプリへアクセスする際の TCP コネクション数 (= FW セッション数) は 2017 年時点では 50 程度という情報がコミュニティに記載されており、今後もこの数は増えていくと思われます。

https://answers.microsoft.com/ja-jp/msoffice/forum/all/o365/b9ff886f-5ed0-43f3-b3bb-fcd0f5650859

検証した結果やはりご教示頂いた通り、50〜セッション程作成されていました。(outlook, teams, office onlineなどユーザが日常的に使いそうなアプリを起動)

このような多数のコネクションを要するサイトへのアクセスをプロキシ経由で行うと、プロキシの負荷が上がり、全体的なパフォーマンス低下を招いてしまいます

そこでこの記事では、無料で構成可能なプロキシ負荷を軽減するネットワークデザインを示します

基本的なアイディアとしては、PAC ファイルで特定 URL へのアクセスについてはプロキシを迂回 (バイパス) し、直接 FW を抜けてインターネットへ出ていき、それ以外の URL へのアクセスについてはプロキシを経由して FW を抜けてインターネットへ出ていくように構成します。

一般的なプロキシとFWの構成での迂回設計例

以下の『URL リスト』に記載された 3 つの URL についてはプロキシを迂回し、それ以外の URL についてはプロキシを経由するように構成することを考えます。

  • *.office.com
  • *.office365.com
  • *.outlook.com

一般的な構成としては以下のように実現します。FW は FortiGate を想定していますが、URLベースでアクセス制御ができれば他の FW でも構いません。

ポイントは以下の2つです。

  • 『Web フィルタで許可する URL』と『プロキシ pac ファイルで直接接続 (DIRECT) としている URL』が完全に一致していること
  • FW の ACL 設定で、Policy#1 では 10.1.1.0/24 から Office365 のみを許可し、Policy#2 ではプロキシサーバから全てのインターネットアクセスを許可していることです。

これらの設定により、原則プロキシサーバを使うことを方針としつつ、例外的に Office365 の 3 つの URL だけは直接アクセスを許可させることができます。

さらにここで重要なのは、『Office365 側の URL が変わってしまってもアクセスには影響が無い』ことと、『URL リストには Office365 の全てのURLを列挙する必要がない(アクセスの多いURLを列挙しているとより効果的である)』ことです。

なぜなら http はステートレスのプロトコルであり、ログイン状態等のステートはクッキーによって判別しているからです。なので Web サーバはクライアントが直接であろうがプロキシ経由であろうが、一貫してクッキーのやり取りが出来ていればアクセスには影響ありません。

スマートフォンで Wi-Fi と LTE を切り替えても各サイトのログイン状態が切れないのと同じ理屈です。

以下のページではマイクロソフトが Office365 関連の URL を公開しています。

https://docs.microsoft.com/ja-jp/office365/enterprise/urls-and-ip-address-ranges

『URL は変更することがある』旨が記載されていますが、もし URL 変更となった場合はプロキシサーバ経由となってしまうため、一時的にプロキシ負荷が上がるかもしれません。

そのときは FW の URL リストを追加し、それと同じ URL を pac ファイルにも追記していく、という運用対処が可能です。

さらに良いことに、(当然のことですが、)このソリューションは Office365 に限定されません。Windows Update や Google など、他のアクセスの多い URL に対しても同様に迂回することができます。

ただし、注意点として、セッション数の上限があるのはプロキシだけではなく、FW にも存在します。なので FW のスペックにも注意が必要です。

参考

FortiGate の URL フィルタ設定

FortiGate の URL フィルタは基本ライセンスのみで設定可能です (Webフィルタライセンスは不要です)。設定など詳細は以下の記事をご参照下さい。

【FortiGate】URLフィルタで特定URLのみ許可~除外と許可,シンプルとワイルドカード/正規表現の違い~
【FortiGate】URLフィルタで特定URLのみ許可~除外と許可,シンプルとワイルドカード/正規表現の違い~
FortiGateのWebフィルタとURLフィルタ FortiGate には ...

TCPコネクションとFWセッション

この記事ではイコールで結んでいますが、厳密には FW セッションは UDP や ICMP の往復も含まれます。詳細は以下の記事をご参照下さい。

【図解】コネクションとセッションの違いと具体例 ~TCPやHTTP,TLS,PPPoEでの定義~
【図解】コネクションとセッションの違いと具体例 ~TCPやHTTP,TLS,PPPoEでの定義~
コネクションとは セッションとは ネットワーク用語で紛らわしい言葉としてコネク...

FortiGateのセッション数の上限

以下 URL の Maximum Values Table で確認できます。

https://docs.fortinet.com/max-value-table

プロキシPACファイルの設定例

プロキシ PAC ファイルの記述例を以下に示します。

function FindProxyForURL(url,host)
{
    if(
       shExpMatch(host,"*.office.com") ||
       shExpMatch(host,"*.office365.com") ||
       shExpMatch(host,"*.outlook.com") )
    {
       return "DIRECT";
    }
     return "PROXY 10.255.1.5:8080";
}