投稿日
EKSでSquidのフォワードプロキシを構築する
もくじ
はじめに
セキュリティ対策等でVPCからのアウトバウンドを絞りたい場合があります。最近ではAWS Network Firewallもありますが、HTTPのHostヘッダやSNIのserver_nameを変えると任意の宛先に出れてしまうようです。そのため、VPCからのアウトバウンドをより厳しく絞りたい場合、VPCにフォワードプロキシを立てます。
VPC内にフォワードプロキシを立てる方法は多々ありますが、EKSのFargateでSquidのフォワードプロキシを立てる方法を解説します。
Squidとは
Squid は、HTTP、HTTPS、FTP などをサポートする Web 用のキャッシング プロキシです。頻繁に要求される Web ページをキャッシュして再利用することにより、帯域幅を削減し、応答時間を改善します。Squid には広範なアクセス制御があり、優れたサーバー アクセラレータになります。Windows を含むほとんどの利用可能なオペレーティング システムで実行され、GNU GPL の下でライセンスされています。
構築方法
1. EKSデプロイ
EKSデプロイ済の場合は飛ばしてください。
2. ALB Controllerデプロイ
ALB Controllerデプロイ済の場合は飛ばしてください。
Squidで内部NLBを使用するためALB Controllerをデプロイします。terraform/fargate-albおよびterraform/alb-iam-for-sa配下のコードでデプロイできます。terraform.tfvarsは環境に合わせて修正してください。
3. Squid用Fargate Profileデプロイ
SquidをFargateで動かすFargate Profileをデプロイします。terraform/fargate-squid配下のコードでデプロイしてください。terraform.tfvarsは環境に合わせて修正してください。
4. Dockerイメージの準備
SquidのDockerイメージを準備します。すでにビルド済のイメージとしてzakihmkc/squidがシンプルかつsquidのログを標準出力に出せるので良いと思います。自分でイメージをビルドしたい場合、image配下のDockerfileを参考にしてください。
5. Squidデプロイ
6. 動作確認
- テスト用にNginxのPodを起動します。curlコマンドが使えればNginxでなくても構いません。
$ kubectl run nginx --image=nginx -n kube-system -l app:squid
- NginxのPodに入ります。
$ kubectl exec -it nginx -n kube-system -- /bin/sh
- 以下のようにプロキシを指定してcurlを実行します。-xオプションでプロキシを指定します。whitelistで許可したドメインには問題なくアクセスできます。
> curl https://www.tis.co.jp -x http://k8s-kubesyst-squid-9805ffda40-3605941818c5eae9.elb.ap-northeast-1.amazonaws.com:3128
- 以下のようにプロキシを指定してcurlを実行します。-xオプションでプロキシを指定します。whitelistで許可していないドメインにはアクセスできません。
> curl https://www.google.com -x http://k8s-kubesyst-squid-9805ffda40-3605941818c5eae9.elb.ap-northeast-1.amazonaws.com:3128
- Nginx Podから抜けます。
> exit
- 以下コマンドでSquidのログを確認します。上記アクセスした際のログが記録されています。
$ kubectl get pod -n kube-system $ kubectl logs -n kube-system squid-XXXXXXXX ... 2022/08/31 07:12:14| 192.168.13.79 TCP_TUNNEL/200 46966 CONNECT www.tis.co.jp:443 - HIER_DIRECT/163.44.161.163 - 2022/08/31 07:13:05| 192.168.13.79 TCP_DENIED/403 3867 CONNECT www.google.com:443 - HIER_NONE/- text/html
参考記事
本ドキュメントは以下の文書を基に作成しました。
squid-cache.org http://www.squid-cache.org/
[Docker] コンテナでSquidを動かしてproxyサーバーを構築 https://zaki-hmkc.hatenablog.com/entry/2020/09/04/224822