2008/02/06(水)Apache proxyの設定

たまに(フォワード)proxyサーバが必要なことがあり、昔は delegate を使っていたのですが最近は古くて危ないらしいということで困っていました。

mod_proxyの設定メモ

httpとftpのproxyをたてることを目的とします。

モジュールロード

まず、proxy_module, proxy_http_module, proxy_ftp_module を作り、そのモジュールをロードするように設定します。

(FreeBSD)
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_ftp_module libexec/apache22/mod_proxy_ftp.so
(Debian4)
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/proxy.conf
# ln -s ../mods-available/proxy.load
# ln -s ../mods-available/proxy_http.load
# ln -s ../mods-available/proxy_ftp.load

confの設定

このままの状態では、どこの誰でも使用出来るという世にも恐ろしい状態になりますので、パスワード認証をかけます。また ssh 転送することを想定して、ローカルIP(127.0.0.1)はパスワードなしで許諾しておきます。

<IfModule mod_proxy.c>
ProxyRequests on
ProxyVia on

<Proxy *>
	Order deny,allow
	Deny from all
	Allow from 127.0.0.1
	Allow from 192.168.0

	AuthType Basic
	AuthName "proxy"
	AuthUserFile /xxxxxx/.htpasswd
	Require valid-user

	Satisfy any
</Proxy>
</IfModule>

ダイジェスト認証ならば次のように変更。

	AuthType Digest
	AuthName "proxy"
	AuthUserFile /xxxxxx/.htdigest
	Require valid-user

パスワード認証されたproxyサーバを経由して、パスワード認証されたサイトにアクセスすることを考えると若干奇妙な感じがします。調べてみたところ、BASIC認証のパスワード情報は普通 "Authorization: Basic xxxxx" として送信するのですが、Proxyの場合これが

GET http://nabe.blog.abk.nu/ HTTP/1.0
Proxy-Authorization: Basic dGVzdDp0ZXN0

となります。これによりProxyに対する認証と、これによって相手サイトに対する認証を当時に行うことができるようです。

(おまけ)screen でログを取る

.screenrc
logfile "/home/xxx/screen-%Y%m%d_%n.log"

この状態でスクリーン起動後に、

Ctrl-A H

でログの記録開始。もう一度同じ操作をするとログの記録を終了します。

参考:Screen - Kawamura's Wiki!