#はじめに
AWS上にsquidを利用したプロキシーサーバを構築して、
プライベートサブネットからパブリックサブネットにあるプロキシを経由して、
インターネットにアクセスする。ということをやってみました。
#前提
・以下、プライベートサブネットのインスタンスを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使えばよくね?とはなりますが、
インターネットに出ていく先を制限したいことも多々あると思うので
こういったプロキシ設定もさくっとできるようになれれば良いなと思いました!