Apacheでフォワードプロキシを多段にする


TL;DR

  • Apacheでフォワードプロキシを構築できる
  • さらに、ProxyRemoteディレクティブを併用することでフォワードプロキシを多段にすることができる
  • ProxyRemoteで指定するプロキシは、認証などは利用できない

環境

Ubuntu Linux 18.04 LTS。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:    18.04
Codename:   bionic

Apache。

$ /usr/sbin/apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2019-09-16T12:58:48

また、フォワードプロキシとするApacheは、172.17.0.2で動作しているものとします。

フォワードプロキシを設定する

Ubuntu Linux上のApacheなら、a2enmodコマンドでモジュールを有効にできます。

$ sudo a2enmod proxy_http proxy_connect

フォワードプロキシの設定に必要なモジュールは、こちら。

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so

Apache Module mod_proxy

Basic Examples

プロキシのリッスンポートは8080にして、フォワードプロキシを設定。

Listen 8080

<VirtualHost *:8080>
  ProxyRequests On
  ProxyVia On

  <Proxy *>
    Require ip 172.17.0  ## アクセス許可するIPアドレス帯など
  </Proxy>
/VirtualHost>

さらにこれを多段にする場合、ProxyRemoteディレクティブを併用します。

ProxyRemote Directive

Listen 8080

<VirtualHost *:8080>
  ProxyRequests On
  ProxyVia On

  <Proxy *>
    Require ip 172.17.0  ## アクセス許可するIPアドレス帯など
  </Proxy>

  ProxyRemote * http://[your-proxy-host]:[your-proxy-port]
</VirtualHost>

これで、このApacheをフォワードプロキシとして使い、さらにApacheはProxyRemoteで指定したプロキシとして動作するようになります。

確認。

$ https_proxy=http://172.17.0.2:8080 curl -I https://www.google.com/

$ http_proxy=http://172.17.0.2:8080 curl -I wttr.in/tokyo?lang=ja

なお、ProxyRemoteで指定するプロキシ先にusernamepasswordは指定できない(URLに含めることができない)ので、認証付きプロキシが背後にいる場合は、Squidを使った方が良さそうです。

ところで、なんに使うの?

プロキシを踏まないとインターネットに出れない!

でも、外部にアクセスした時のアクセスログを見たい!

といった時などにでもどうぞ。