たまに海外のWebサイトを閲覧したい時に、エラーがでて閲覧できなかったり、日本のサイトに転送されるといったことを経験した方はいないでしょうか?
これは、アクセス元のIPアドレスが国や地域に基づいて付与される為、見ようとしたサイトがアクセス元のIPアドレスから発信元の国や地域を判別し、アクセスを拒否するか発信元の地域に合わせた別サイトへリダイレクトされることによって起きる事象です。
勿論、IPアドレスを偽装すれば解決する話ですので(※犯罪では無いです)、偽装用のプラグインやパブリックなプロキシサーバを経由すればこの事象は回避できます。
しかし、プラグインだとデバイスによって使い分けなくちゃいけないし、プロキシサーバを経由するやり方も他人が公開しているサーバを経由するのにちょっと抵抗感を感じてしまいます。
そこで世界中にリージョンを持っているAWSを利用することで、デバイスによる制限もなく、安心して使用できるプロキシサーバを立てることができます。
本記事では、AWS上に海外サイト閲覧用のWebサーバを構築する方法を公開します。
概要
本記事の概要を以下に記載します。
目標
バージニアリージョンに立てたEC2インスタンス(プロキシサーバ)を経由して、アメリカのWebサイトを閲覧する。
- 動作確認用のアメリカのWebサイト
作業工程
- EC2インスタンスを構築
- Squidのインストール & セットアップ
- 接続元PCのプロキシ設定
- アクセス確認
実行環境
- クラウド:AWS
- サーバ:EC2 (Amazon Linux2)
- プロキシサーバ:Squid
EC2インスタンスを構築
バージニアリージョンでEC2インスタンスを構築します。
リージョンの設定
- AWSマネージメントコンソールを開きます。
- 画面右上のリージョン名をプルダウンし、「バージニア北部(us-east-1)」をクリックします。
- バージニアリージョンへ画面が遷移したことを確認します。
EC2インスタンスの作成
- 画面上部の検索バーより「EC2」コンソールへ遷移します。
- EC2コンソール画面、左ペイン「インスタンス」-「インスタンス」をクリックします。
- インスタンス一覧上部の「インスタンスの起動」をクリックします。
- 各項目に従い下記パラメータを設定します。
- ステップ 1: Amazon マシンイメージ (AMI)
Amazon Linux2を選択します - ステップ 2: インスタンスタイプの選択
t2.micro - ステップ 3: インスタンスの詳細の設定
作成するEC2がパブリックサブネットに配置されるように設定します。 - ステップ 4: ストレージの追加
デフォルト値のままで次へ進みます。 - ステップ 5: タグの追加
任意のタグを入力します。 - ステップ 6: セキュリティグループの設定
下記ポートを開けます。
※ 送信元はIPはご自身のアクセス元IPを指定するのをオススメします
SSH:22 ・・・sshポート
カスタムTCP:3128 ・・・Squidの内部ポート - ステップ 7: インスタンス作成の確認
内容を確認して画面右下「起動」をクリックします。
- ステップ 1: Amazon マシンイメージ (AMI)
- インスタンスが作成されたことを確認します。
EIPの発行
- EC2コンソール画面、左ペイン「ネットワークセキュリティ」-「Elastic IP」をクリックします。
- EIP一覧上部の「Elastic IP アドレスを割り当てる」からEIPを発行します。
- 発行したEIPを選択し、「アクション」-「Elastic IPアドレスの関連付け」から前項にて作成したEC2インスタンスにEIPを付与します。
Squidのインストール & セットアップ
プロキシサーバにSquidを採用します。
先程作成したEC2インスタンスにSquidをインストールし、プロキシ設定を行っていきます。
Squidのインストール
EC2インスタンスにSSH接続します。
Squidをインストールします。
$ sudo yum -y install squid
Squidの起動と自動起動設定を行います。
$ sudo systemctl start squid
$ sudo systemctl enable squid
Squidが起動されているか確認します。
※下記のような出力がされていればOkです!
$ sudo systemctl status squid
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-03-22 13:39:42 UTC; 3s ago
Process: 3574 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 3569 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 3577 (squid)
CGroup: /system.slice/squid.service
tq3577 /usr/sbin/squid -f /etc/squid/squid.conf
tq3579 (squid-1) -f /etc/squid/squid.conf
mq3580 (logfile-daemon) /var/log/squid/access.log
プロキシ設定
Squidの設定ファイルを修正します。
$ sudo vi /etc/squid/squid.conf
~~~
### 48行目辺りに下記行追加(正確には「http_access deny all」より前のセクションに記載します)
## IP許可設定
# Squidを使用する自宅PCのIPアドレス
acl myip src xx.xx.xx.xx/32
# 接続元PCのアクセス許可
http_access allow myip
## セキュリティ設定(必須では無いが推奨)
# Proxyサーバのホスト名を擬態
visible_hostname unknown
# アクセス先に自宅PCのIPアドレスを知られないようにする
forwarded_for off
# ヘッダ情報出力抑制
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
~~~
設定を反映させる為、Squidを再起動します。
$ sudo systemctl restart squid
以上で、プロキシサーバの設定は完了です。
続いて、自宅PCから今回作成したプロキシサーバを利用して、海外のWebサイトへアクセスできるように設定します。
接続元PCの設定
自宅PCのプロキシ設定を行います。
自宅PCからインターネットへのアクセス時に前項にて作成したプロキシサーバへ向かうように設定します。
設定画面から設定を行うのも良いですが、接続する度に切り替えるのは面倒くさいかなと思いますので、プロキシ切り替えbatを作成しました。よろしければご活用下さい。
- プロキシ切り替えbat
@echo off
set regpath="HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyServer /t reg_sz /d <プロキシサーバのIP>:<プロキシサーバのポート>
for /f "tokens=3" %%A in ('reg query %regpath% /v "ProxyEnable"') do set enable=%%A
echo %enable%
if %enable%==0x0 (
reg add %regpath% /f /v "ProxyEnable" /t reg_dword /d 1
echo Turn On Proxy Server
echo "プロキシ設定を有効化しました"
) else (
reg add %regpath% /f /v "ProxyEnable" /t reg_dword /d 0
echo Turn Off Proxy Server
echo "プロキシ設定を無効化しました"
)
pause
アクセス確認
下記サイトへアクセスできるか確認します。
日本のサイトでは無く英語verのサイトが表示されれば解決です。
まとめ
海外のWebサイトを閲覧する、IPを偽装する等と考えると少し難しく感じますが、本記事の手順の通り、誰でも簡単にプロキシサーバを構築して海外サイトを閲覧できるように設定できます。
今後は、AWS CLIやAnsibleを使用して、プロキシサーバの構築を自動化できるようにしていきたいです。
また、ヘッダー情報から接続制限をかけたり、セキュリティ面での強化も図っていきたいですね。
コメント