「このサイトって別の国からアクセスしたらどう見えるの?」ってときに、ちょろっとプロクシサーバを立てる方法


タイトル長っ!

 タイトル通りなんですが、そういうときってありますよね?リージョンによって表示内容変えてるサイトとか、ロケーションによって変わる広告とかの表示を確認したいですよね?
 ないですか?そうですか。。。

 まぁ、そういうことがある自分みたいな人のためのメモです。

プロクシ刺せばいいだけだよね?

 そうです。
 でも、自分が確認したい地域で使える(ちゃんと稼働してる)プロクシサーバを探すのが意外と面倒だし、それに、どこの馬の骨とも知れないサーバを踏み台にするとセキュリティ的にもよくありません。

 今どきはクラウドサービスを使えば、いろんな場所にあるデータセンターに自分のサーバを簡単に立てれます。たとえば、AWS を使えば次のリージョンから選び放題です↓

 他にも、たとえば DigitalOcean を使うと、AWSでは対応できないオランダ(アムステルダム)からの動作確認ができたりします。DigitalOceanのデータセンターがある国はこちら↓

 あとは好きなところでプロクシサーバを立てるだけなんですが、プロクシサーバの設定について意外と日本語の情報がなかったので、メモっておきます。

前提

  • 「このサイトをいろんな国から見たい」という用途です
    • あらかじめ色んな国にサーバを用意しておくとかできないので、5分で立ち上げて使い終わったら捨てるという「使い捨て」感覚です
    • 結果的に、使った分しか料金も発生せず、経済的です
  • 「ちょこっと動作確認してみる」という用途です
    • 継続的にサービスを提供するためのものではありません
    • 従って、運用(ログの保存とか、死活監視とか…)とかセキュリティとかは深く考えません

やり方

  • すきなところにLinuxサーバを立てる
  • SSHでログインする
  • おもむろに↓のコマンドをコピペする
  • ポート3128でプロクシサーバが立ち上がる
  • 好きなように使う
  • 以上

Amazon Linux 2用コピペ

sudo yum update -y                                 && \
sudo yum install -y docker                         && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

CentOS 7.5用コピペ

SELinux対策に、chcon コマンドを一行追加します:

sudo yum update -y                                 && \
sudo yum install -y docker                         && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
chcon -Rt svirt_sandbox_file_t squid.conf          && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

Ubuntu用コピペ

yum の代わりに apt コマンドを使います:

sudo apt update && sudo apt -y upgrade             && \
sudo apt -y install docker.io                      && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

何をしているの?

 要は、Dockerをインストールして、 こちらのSquidのイメージ を最小限の設定で起動しているだけです。このコンテナイメージが信用できるのかどうかは、ご自分でご確認ください。
 なお、執筆時点で最新のイメージだったバージョン3.5.27に固定してあります。
(最近、Squid 4がリリースされてバージョン3系は非推奨になったそうですが、今は気にしないことにします)

 設定の内容について、簡単に説明しておきます。

1~2行目
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https

 プロクシを許可するプロトコル(ポート番号)を列挙しています。
 httpとhttpsのみをプロクシすることにします。

3~4行目
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost

localhost、つまりこのプロクシサーバへのアクセスを拒否します。

5~6行目
http_access deny !Safe_ports
http_access allow all

 上で列挙したプロトコル以外へのアクセスを拒否します。
 それ以外へのアクセスをすべて許可します。

7行目
http_port 3128

 Listenするポートに3128を指定しています。

8行目
refresh_pattern .               0       0%     0

 キャッシュをしないようにしています。
(動作確認するときって、何度もリロードして変化を見たりするので、キャッシュされたくないのです)

9行目
forwarded_for delete

 X-Forwarded-Forヘッダを出力しないようにします。
(X-Forwarded-ForのIPにもとづいてコンテンツが変えられると困るため)

 最小限なので、あとは好きなようにカスタマイズして使ってください。