皆さん、こんにちは。Stop Refactoring チャンネルへようこそ。
この号では、Web プロキシについて説明します。
前回の「大規模 Web サイトのセキュリティ」で述べたように、一般に大規模 Web サイトでは、ネットワーク セキュリティを確保するために、攻撃者がサーバーを直接制御できないようにネットワーク領域を隔離する必要があります。
Web サイト システムのアプリケーションとデータベースは、このネットワーク セキュリティ領域に配置されます。これにより、プロキシの問題が発生します。
外部ネットワーク要求は受信する必要があり、サードパーティのサービス呼び出しは発信する必要があります。今回は、エージェンシーの問題について詳しく説明します。次の順序で説明します。
1. リバースプロキシ、外部ネットワークリクエストが受信される
2. フォワードプロキシ、外部ネットワークサービスをリクエスト
リバースプロキシ、外部ネットワークリクエストを受信
外部ネットワーク要求は、ネットワーク分離ゾーンにリバース プロキシするためにユニファイド ゲートウェイを経由する必要があります。ゲートウェイには、負荷分散サービスや Nginx などのサービス ソフトウェアを使用できます。
Nginxの場合、リバースプロキシの構成はこんな感じです。
ここで説明する必要があるのは、外部ネットワーク リクエストが https である場合、Web サイト システム全体のすべてのサービスが https である必要はなく、https がゲートウェイ層で構成されていることを確認することだけが必要であるということです。システムの内部呼び出しでは引き続き http が使用されます。
負荷分散などのクラウドサービスを利用している場合は、負荷分散サービスで https を設定するだけでよく、Web サイトシステム内で https 通信を使用するメリットがないため、Web サイトシステム自体の呼び出しは http のままになりますが、パフォーマンスが低下します。
フォワード プロキシ、外部ネットワーク サービスの呼び出し
場合によっては、Web サイト システムはサードパーティ サービスを呼び出す必要があり、超大規模な Web サイト システムは複数のネットワーク分離領域に分離され、災害復旧バックアップはネットワーク分離領域によってバックアップされる必要があります。
上記のシナリオでは、Web サイト システムはネットワーク分離ゾーンの外側のサーバーを呼び出す必要があり、このとき、同じプロキシ サーバーを介してターゲット サーバーにプロキシを転送する必要があります。
フォワードプロキシはサービスソフトウェアとしてNginxを利用することができ、フォワードプロキシには大きく分けて7層プロキシと4層プロキシの2種類があります。
ネットワーク階層モデルは、OSI モデルに従って通常 7 つの層に分割されます。
7 番目の層はアプリケーション層で、よく使われる HTTP、HTTPS、RTMP、SMTP などのプロトコルです。
4 番目の層はトランスポート層、つまり TCP や UDP などの基本プロトコルです。
対応するレイヤ 7 エージェントとレイヤ 4 エージェントは、対応する 2 つのネットワーク層です。
レイヤー 7 プロキシを使用している場合、Nginx の構成は次のようになります。
この構成は上記のリバース プロキシ構成と一致しており、URL キーワードに一致することで複数のターゲット サーバーにプロキシできます。
ウェブサイト システムは外部ネットワーク サービスを呼び出し、IP/ポートをプロキシ サーバーにポイントする必要があります。もちろん、ドメイン名呼び出しを使用することをお勧めします。サーバー ホスト ファイルを変更することで呼び出しをプロキシ サーバーに転送できます。
もちろん、IP ポインティングの変更に加えて、http_proxy、https_proxy などのパラメーターを設定してプロキシを設定することもできますが、この方法は管理があまり良くないため、お勧めできません。
もう 1 つは4 層プロキシです Nginx の構成は次のようになりますが、ポートはターゲット サーバーに対応する必要があり、Web サイト システムが外部ネットワーク サービスを呼び出す際にも、IP/ポートがプロキシ サーバーを指す必要があります。
また、レイヤー 4 プロキシは TCP/UDP の基本プロトコルに基づいているため、HTTP や RTMP などの TCP ベースのリクエストはプロキシ ポートを共有できます。
もちろん、レイヤー 4 プロキシの構成はレイヤー 7 プロキシの構成よりも複雑で、ターゲット サーバーに対応するポートが必要です。
ただし、レイヤー 4 プロキシの使用を推奨します。
1 つはパフォーマンスと安定性が比較的高く、もう 1 つは管理が優れていることです。ポートはターゲットの外部ネットワーク サービスに対応しているため、予期せぬ問題が発生した場合は、プロキシ サーバー上の対応するポートを直接閉じて切断することができます。他の外部ネットワーク サービスの呼び出しに影響を与えずに、外部ネットワーク サービスを指定します。
要約する
今回は、前号の「Webサイトシステムのセキュリティ」の内容の一つであるWebサイトシステムのプロキシスキームについて、さらに詳しく解説していきます。