Edited at

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

More than 1 year has passed since last update.


タイトル長っ!

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

 ないですか?そうですか。。。

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


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

 そうです。

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

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

AWSのリージョン一覧

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

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にもとづいてコンテンツが変えられると困るため)

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