0
0

More than 1 year has passed since last update.

AWS上にプロキシーサーバを構築してみた

Last updated at Posted at 2022-02-09

はじめに

AWS上にsquidを利用したプロキシーサーバを構築して、
プライベートサブネットからパブリックサブネットにあるプロキシを経由して、
インターネットにアクセスする。ということをやってみました。

構成図

こんな感じのシンプルな構成図
proxy.png

前提

・以下、プライベートサブネットのインスタンスをprivate、
パブリックサブネットのインスタンスをpublicと呼びます。
・privateとpublicの通信はセキュリティグループで許可しています。
・プライベートサブネットのルートテーブルは、「10.0.0.0/16 local」 のみ
パブリックサブネットのルートテーブルは「10.0.0.0/16 local」と
インターネットに出るため「0.0.0.0/0 igw-(インターネットゲートウェイ)」を記述
・publicにのみEIP(GIP)をつけています。

作業前の確認

publicからはgoogleにアクセスできるけど、
privateからはアクセスできないことを確認

[ec2-user@public ~]$ curl -I https://www.google.com
HTTP/2 200
content-type: text/html; charset=ISO-8859-1
・・・
[ec2-user@public ~]$

publicからは200が出ているからアクセスできてる。

[ec2-user@private ~]$ curl -I https://www.google.com
curl: (28) Failed to connect to www.google.com port 443 after 131159 ms: Connection timed out
[ec2-user@private ~]$

privateからはそもそもインターネットに出れないのでタイムアウトする。

squidの設定

[ec2-user@public ~]$ sudo yum install -y squid

squidをインストールする

[ec2-user@public ~]$ squid -v
Squid Cache: Version 3.5.20
Service Name: squid
・・・

インストールできたか確認。

/etc/squid/squid.conf 以下の内容で設定する。

# 接続元IPアドレス範囲
acl localnet src 10.0.0.0/16

# 接続先ポートの設定
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !Safe_ports

# ホワイトリストを使ったアクセス制限
acl whitelist dstdomain "/etc/squid/whitelist"

http_access deny !localnet
http_access allow whitelist
http_access deny all

# squidの使用ポート
http_port 8080

# キャッシュは用いない
no_cache deny all

# coredump出力先を設定
coredump_dir /var/spool/squid

# ホスト名を非表示
visible_hostname unknown

# 内部のIPアドレスの秘匿
forwarded_for off

ホワイトリスト形式にして、指定した先のURLのみに接続できるようにするため
/etc/squid/whitelist に .goole.comを追加して、内容を確認。

[ec2-user@public ~]$ cat /etc/squid/whitelist
.google.com

squidを起動させる。

[ec2-user@public ~]$ sudo systemctl start squid

アクセスできるか確認

設定したpublicのプロキシ経由で
ホワイトリストに追加したgoogleにはアクセスできるけど、
youtubeにはアクセスできないことを確認。

[ec2-user@private ~]$ curl -I -x http://10.0.10.61:8080 https://www.google.com
HTTP/1.1 200 Connection established

HTTP/2 200
content-type: text/html; charset=ISO-8859-1
・・・
[ec2-user@private ~]$
[ec2-user@private ~]$ curl -I -x http://10.0.10.61:8080 https://www.youtube.com
HTTP/1.1 403 Forbidden
・・・
[ec2-user@private ~]$

せっかくなので環境変数にプロキシを設定

[ec2-user@private ~]$ export HTTPS_PROXY=http://10.0.10.61:8080

curlのときにプロキシを設定しなくてもアクセスできる。

[ec2-user@private ~]$ curl -I https://www.google.com
HTTP/1.1 200 Connection established

HTTP/2 200
content-type: text/html; charset=ISO-8859-1
・・・
[ec2-user@private ~]$

まとめ

AWS環境だったらNatGateway使えばよくね?とはなりますが、
インターネットに出ていく先を制限したいことも多々あると思うので
こういったプロキシ設定もさくっとできるようになれれば良いなと思いました!

引用

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0