ProxyRemote ディレクティブを使って多段プロキシを構成してみた

こんにちは。サイオステクノロジーの貝野です。

プロキシサーバとして Apache を使用している環境において、さらに別のプロキシサーバを経由してインターネット(接続先サーバ)に接続したい場合、ProxyRemote というディレクティブを使用します。
今回は、ProxyRemote ディレクティブを使って別のプロキシサーバを経由させる検証をしてみました。

■ 環境

今回、検証を行なった環境の構成は以下の通りです。

————————-
[クライアント] <—> [プロキシサーバ1] <—> [プロキシサーバ2] <—> [接続先サーバ]
————————-

クライアント

  • IP アドレス:192.168.1.10
  • OS のバージョン:CentOS7.6

プロキシサーバ1

  • IP アドレス:192.168.1.101
  • OS のバージョン:CentOS7.6
  • Apache のバージョン:httpsd-2.4.6-90.el7

プロキシサーバ2

  • IP アドレス:192.168.1.102
  • OS のバージョン:CentOS7.6
  • Apache のバージョン:httpsd-2.4.6-90.el7

接続先サーバ

  • IP アドレス:192.168.1.20
  • OS のバージョン:CentOS7.6
  • Apache のバージョン:httpsd-2.4.6-90.el7

■ 設定・動作確認 (リバースプロキシの場合)

各サーバの設定を、それぞれ以下の様にします。

プロキシサーバ1 (192.168.1.101)

Listen 10080

ProxyPass / https://192.168.1.20/
ProxyRemote * https://192.168.1.102:10080
  • プロキシのポートに 10080 を指定
  • ProxyPass に “https://<接続先サーバの IP アドレス>/” を指定
  • ProxyRemote に “https://<プロキシサーバ2の IP アドレス>:<ポート番号>” を指定

プロキシサーバ2 (192.168.1.102)

Listen 10080

ProxyPass / https://192.168.1.20/
  • プロキシのポートに 10080 を指定
  • ProxyPass に “https://<接続先サーバの IP アドレス>/” を指定

接続先サーバ (192.168.1.20) のコンテンツ

# cat /var/www/html/test.html
test page

クライアント (192.168.1.10) から接続先サーバへアクセス

curl -x https://192.168.1.101:10080 https://192.168.1.20/test.html
test page

この時、プロキシサーバ1 およびプロキシサーバ2 の access_log には、それぞれ以下の情報が出力されます。

プロキシサーバ1

192.168.1.10 - - [28/Jan/2020:15:26:11 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"

プロキシサーバ2

192.168.1.101 - - [28/Jan/2020:15:26:11 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"

■ 設定・動作確認 (フォワードプロキシの場合)

各サーバの設定を、それぞれ以下の様にします。

プロキシサーバ1

Listen 10080


  ProxyRequests On

   
       Order deny,allow
       Deny from all
   

   
      Order deny,allow
      Deny from all
      Allow from 192.168.1.10
  

  ProxyRemote * https://192.168.1.102:10080

  • プロキシのポートに 10080 を指定
  • Proxy に “https://<接続先サーバの IP アドレス>/*” を指定
  • Allow from にクライアントの IP アドレスを指定
  • ProxyRemote に “https://<プロキシサーバ2の IP アドレス>:<ポート番号>” を指定

プロキシサーバ2

Listen 10080


  ProxyRequests On

   
       Order deny,allow
       Deny from all
   

   
      Order deny,allow
      Deny from all
      Allow from 192.168.1.101
  

  • プロキシのポートに 10080 を指定
  • Proxy に “https://<接続先サーバの IP アドレス>/*” を指定
  • Allow from にプロキシサーバ1の IP アドレスを指定

クライアント (192.168.1.10) から接続先サーバへアクセス

curl -x https://192.168.1.101:10080 https://192.168.1.20/test.html
test page

この時、プロキシサーバ1 およびプロキシサーバ2 の access_log には、それぞれ以下のログが出力されます。

プロキシサーバ1

192.168.1.10 - - [28/Jan/2020:15:46:45 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"

プロキシサーバ2

192.168.1.101 - - [28/Jan/2020:15:46:45 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"

■ 最後に

Apache でプロキシサーバを構成する場合において、最も基本的な多段プロキシの設定をご案内しました。
なお今回は Apache 2.4 系で動作検証しましたが、Apache 2.2 系でも同様の設定を使うことができます。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です