ApacheでHTTP Proxyを構築 - MONO*LOG

ApacheでHTTP Proxyを構築

デル株式会社
プロキシといえば、HTTPプロキシ(WEBプロキシ)が一般的によく知られている。匿名プロキシを使うことによってある程度クライアントの匿名性が確保できたりするので、通常プロキシはネットサーフィンなどをするユーザのメリットばかり目立つのだが、プロキシを使うことによってプロキシ管理者には複数のメリットがあったりする。

プロキシを実現するには、一般的に Squid がメジャーだが、Apacheにもプロキシの機能がある。実現可能な機能をまとめてみよう。

フォワードプロキシ(LAN内向けのプロキシ)

・あらかじめ指定したURLへの接続を拒否(コンテンツブロック)
・LAN内PCのブラウジング監視
・キャッシュによる高速化

通常のフォワードプロキシはクライアントと元々のサーバの間に位置する中間サーバです。 元々のサーバからコンテンツを取得するために、クライアントはプロキシに元々のサーバを指定してリクエストを送り、プロキシは元々のサーバからコンテンツのリクエストを送り、そのコンテンツをクライアントに返します。クライアントが他のサイトをアクセスするためには、特別にフォワードプロキシを使用するように設定されている必要があります。
フォワードプロキシの一般的な使用方法は、ファイアウォールによって制限されている内部のクライアントにインターネットへのアクセスを提供するものです。フォワードプロキシはネットワークの使用量を減らすために( mod_cache が提供している)キャッシュを用いることもできます。


リバースプロキシ(代理応答プロキシ)

・WEBサーババックエンドの秘匿
・WEBサーババックエンドの負荷分散

リバースプロキシはクライアントには普通のウェブサーバの様に見えます。クライアント側に特別な設定は必要ありません。クライアントはリバースプロキシの名前空間に対して通常のコンテンツへのリクエストを行ないます。リクエストプロキシはリクエストをどこに送れば良いかを決め、そのコンテンツを自分が元々のサーバであるかのようにクライアントに返します。
リバースプロキシのよくある利用方法は、インターネットユーザに ファイアウォールの中にあるサーバにアクセスを与えるというものです。 リバースプロキシは複数のバックエンドサーバへ負荷分散をするために使ったり、遅いバックエンドエンドサーバのためにキャッシュを提供したりするために使うことができます。また、リバースプロキシは複数のサーバを同じ URL 空間にまとめるために使うこともできます。


Apache によるプロキシ構築のメリットはなんといっても設定の手軽さだ。squid となるとサーバ内のディスクスペースの問題もあるし、apacheがすでに稼働していると場合によっては既存のサービスに影響してしまう。

ということで今回は、Apache の mod_proxy によるプロキシの構築と、ログの分離・コンテンツのフィルタリングを設定してみよう。
まずは、mod_proxy モジュールを使用可能にしなければならない。
利用可能なモジュールは以下のコマンドで確認することができる。

# /usr/local/apache/bin/httpd -l


ここで、mod_proxy.c が表示されていればOK。

次に、httpd.conf を開き、AddModule mod_proxy.c の行がなければ追加する。また、Listen ディレクティブには、Proxyとして開きたいポートを追記する。

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


プロキシ設定部分も有効にする。

<IfModule mod_proxy.c>
ProxyRequests On
ProxyBlock 2ch.net ← コンテンツフィルタの設定

<Directory proxy:*>
Order deny,allow
Deny from all
Allow from 192.168.0.0/24 ← 接続の許可設定
</Directory>

#
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#
ProxyVia On ← VIAヘッダをセットする

#
# To enable the cache as well, edit and uncomment the following lines:
# (no cacheing without CacheRoot)
#
CacheRoot "/usr/local/apache/proxy" ← キャッシュするなら設定
CacheSize 51200
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
NoCache lunasys.net ← キャッシュの対象外

</IfModule>


Apacheを再起動する。

# /usr/local/apache/bin/apachectl configtest
Syntax OK
# /usr/local/apache/bin/apachectl restart



この設定では、192.168.0.0/24 のネットワークからのみ 2ch.net を除くサイトへのプロキシ接続を許可している。
早速、192.168.0.0/24 のネットワーク上にあるPCのブラウザ設定を変更して、インターネット上のサイトに接続ができるか確認してみよう。

IEの場合は、「ツール」→「インターネットオプション」→「接続」→「LANの設定」
項目「プロキシサーバ」のアドレスにプロキシ設定をしたサーバのホスト名またはIPアドレス、ポートにポート番号を入力する。

設定の確認は、必ず Allow from エントリにないネットワークからのアクセスが拒否されるかも確認しておくこと。さもないと、Proxyを踏み台にされてしまうことになる。

コメントする

アーカイブ