Forward Proxy(Squid3)の設置メモ

銀鷹です。

先日、とある事情によりアメリカに居りましたが、
その際に、日本国外からのアクセスを拒否するサービスを使う必要がありました。
その対策として、Forward Proxyを建てた時のメモです。

Forward Proxyとは?

最近はめっきり聞かなくなりましたが、昔の言葉(?)で言うなら串ってやつです。
最近よくある、Nginxで建てて、裏にあるWebアプリにつなぐReverse Proxyとは別物です。

Forward Proxyは、昔回線が細かった頃には、キャッシュとしての意味合いがあったり、
一時(多分90年台くらい)は、自分のグローバルIPを秘匿して
Webサイトにアクセスするときに使われていた様に思います。
(AnonymousなProxyとかがそういう奴でしたね…)

探すと、今でもリストが公開されているようです。
http://www.cybersyndrome.net/pla5.html

今回は、日本国外のIPアドレスからのHTTPリクエストを、
日本国内のForward Proxyサーバを経由することで、
国内からのアクセスに見せかけるために使います。
(基本的に問題無いと思いますが、規約で禁止されてたりしたら辞めてくださいね…)

Forward Proxy Serverの選定

一応、幾つかサーバがあるようですが、
今回はよくあるSquid3を使いました。

最初は、Nginxでも建てれると聞いてやったんですが、
NginxさんはHTTPSに非対応なので辛くて辞めました。
HTTPオンリーで良いならNingxさんはコンフィグも少なくて楽だったのでお勧めです。

Squid3のインストール

参考サイト: http://tejunsho.com/squid/20130319000170.html

環境

インストール方法

以下のコマンドでOK。

sudo apt-get install squid3

Squid3の設定

/etc/squid3/squid.confを書き換える。
デフォルトでは、いっぱいコメントがついたファイルがありましたが、
バックアップしたうえで、僕は全部書き換えました。
内容は以下のとおり。

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# XXX.XXX.XXX.XXX/XX の部分は、
# Proxyサーバへのアクセスを許可するIPアドレスの範囲です。
acl localnet src XXX.XXX.XXX.XXX/XX

acl winupdate dstdomain .microsoft.com .windowsupdate.com
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl CONNECT method CONNECT

# 以下コメントで囲った部分は、Proxyサーバ利用時に、
# BASIC認証を要求するための設定です。
# 必要なければ消してもOK
##########################
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/.passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

acl password proxy_auth REQUIRED

http_access allow password
##########################

http_access allow manager localhost
http_access allow winupdate          
http_access deny manager
http_access deny !Safe_ports         
http_access deny CONNECT !SSL_ports 
http_access allow localhost            
http_access allow localnet
http_access deny all

# Proxyサーバのポート番号、一般的に8080ですが、変えてもよい。
http_port 8080

cache_dir ufs /var/spool/squid3 600 16 256

coredump_dir /var/spool/squid3

refresh_pattern .       0   20% 4320

forwarded_for off

request_header_access Referer deny all
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

access_log /var/log/squid3/access.log common

cache_mem 256 MB

Proxyサーバ利用時にBASIC認証を要求する場合

BASIC認証用のファイルを作る必要があります。
作成方法は以下のとおり。

# htpasswdコマンドが必要なのでapache utilsをインストール
sudo apt-get install apache2-utils

# 実際にファイルの生成
# <USER>は認証時のユーザ名で、<PASS>はパスワードで置き換えること。
sudo htpasswd -c /etc/squid/.passwd <USER>
New password: <PASS>
Re-type new password: <PASS>

sudo chown proxy:proxy /etc/squid3/.passwd

以上で設定は完了。
sudo service squid3 restartでSquid3を再起動。

建てたForward Proxyを使う

ブラウザのProxy設定部分に、Forward Proxyを建てたサーバのIPアドレスかドメインと設定したポート番号を入れて完了。

BASIC認証を有効化している場合は、初回接続時に認証があります。

後は確認くん(懐かしい)とかで、
ちゃんとIPアドレスがForward Proxyの物になっているかを確認して完了。

あとは、Proxy経由で色んなサービスを使ってください。
まあ、大抵の場合は普通にアクセスするより重くなるので、
必要最低限以外は使わないほうがいいと思います。