固定IPからアクセスできない場合のmod_proxyを使ったフォワードプロクシ設定

サイト開発をしている場合、不用意に公開されないようにある特定のIPからのみ接続を許すことがよくありますよね。
事務所を構えていたり自宅で作業していて、なおかつプロバイダで固定グローバルIPの設定ができる場合は問題ないんだけどフリーランスで活動していてWiMAXなんかでネットにつなげてる場合は固定グローバルIPを設定できなくて結構つらい。
結構つらいというか、仕事できなくなっちゃったりするのよね…

我に固定グローバルIPを!

固定グローバルIPをゲットする方法として思いつくのは、

  • VPN接続してそこからアクセス
  • プロクシを通してそこからアクセス

ぱっと思いつくのはこの2つ。
ちなみに、VPSやらクラウドサーバなんかを借りていることが前提。自分はさくらのクラウドを借りているので、そのサーバを使いました。

VPNを使うのが理想かなー、と思ったので、StrongSwan + xl2ptdを使ってIPSec/L2TPの環境を構築しようと思ったんだけど設定難しく挫折。
参考サイトは結構あるんだけど、なぜかうまくいかなくて、トラブルシューティングできないようなら手を出すのはまだ早いかなと。

そこで過去に使った経験があったApache2 + mod_proxyを使ってフォワードプロクシを構築しました。

mod_proxyをセットアップ

セットアップした環境はこんな感じ。
Debian GNU/Linux 8 + Apache2 (2.4)
Apache2をインストールしただけで、mod_proxyはインストール済でした。たぶん。

インストールも簡単だけど、設定も簡単。ざっくり設定内容はこんな感じ。

  • ポートの解放
  • フォワードプロクシとして動作させる設定
  • セキュリティ設定

ポートの開放

まずはポートの開放。ここではお約束なんで、8080を指定することにします。
セキュリティの観点から言えば、8080は避けた方がいいかもね。

ポートの設定は /etc/apache2/ports.conf に下記を追記します。

<IfModule mod_proxy.c>
  Listen 8080
</IfModule>

フォワードプロクシとして動作させる設定

プロクシの設定は /etc/apache2/mods-available/proxy.conf に下記を記述します。

<IfModule mod_proxy.c>
  ProxyRequests On
  ProxyVia On
  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>
</IfModule>

このあたりの詳しいことは、proxy.confにコメントとして書かれているということと、本家マニュアルが詳しいので説明はそちらをご参考に。

Apache モジュール mod_proxy

セキュリティ設定

最低限動作するところはこれまでの設定でOKだけど、このままだとザルなのでアクセス制限を設定します。

プロクシはアクセス制限無ければ踏み台にされるために公開しているような物なので、必ず設定した方がいいと思います。
私はWiMAXで接続するのでIPアドレスで制限を掛けることができないのでDigest認証を掛けるように設定しました。

<IfModule mod_proxy.c>
  ProxyRequests On
  ProxyVia On
  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
    AuthName "Digest Auth"
    AuthType Digest
    AuthUserFile パスワードファイルへのパス
    require valid-user
  </Proxy>
</IfModule>

Apacheモジュールを有効化

設定終わったら、Apacheモジュールを有効化して再起動します。

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo a2enmod proxy_connect
$ sudo a2enmod proxy_wstunnel
$ sudo service apache restart

後はクライアントの設定して、おわり!

さいごに

これでHTTP/HTTPSのプロクシが設定できました。
念のため、接続元IPを表示してくれるサービスを利用してIPアドレスを確認してみてください。プロクシを設定したサーバのIPアドレスになっていれば問題ないです。