🦑

Amazon Linux 2023でプロキシサーバーを構築する Squid

に公開

はじめに

業務内でEC2プロキシサーバーを構築する機会があったので備忘録として。

目標としてパブリックサブネットにプロキシサーバー、プライベートサブネットにユーザーサーバーを構築しユーザーサーバーからインターネットに接続できるのを確認します。

構築

前準備

EC2インスタンスを立ち上げる前にVPCやセキュリティグループを準備します。

VPC

パブリックサブネットとプライベートサブネットを持つVPCを構築します。



セキュリティグループ

プロキシサーバーがユーザーサーバーからプロキシ通信を受けれるように

インバウンドエンドポイントで3128を許可するセキュリティグループを準備します。

ユーザーサーバーにはSSHで接続するのでVPC内からSSH接続を許可するSGを作成します。

IAMロール

今回はプロキシサーバーに対してSSMで接続するので

IAMポリシー『AmazonSSMManagedInstanceCore』をアタッチしたIAMロールを作成します。

プロキシサーバー構築

EC2インスタンス

プロキシサーバーとなるEC2インスタンスを以下の要件で作成します。

  • AMI:Amazon Linux 2023
  • インスタンスタイプ:t3.micro
  • サブネット:パブリックサブネットを選択
  • パブリックIPの自動割り当て:有効化
  • セキュリティグループ:前準備で作成したProxy-SGを選択
  • インスタンスプロフィール:前準備で作成したIAMロールを選択

プロキシ設定

プロキシ設定手順①
# 最新化
sudo dnf update -y
# Squidインストール
sudo dnf install squid -y
# Squid設定ファイルを編集
sudo vi /etc/squid/squid.conf
/etc/squid/squid.conf
# ファイル先頭に追加
acl localnet src 10.0.0.0/16
http_access allow localnet

#
# Recommended minimum configuration:
#
# 以下省略 ###################

プロキシ設定手順②
# Squid起動
sudo systemctl enable squid
sudo systemctl start squid
sudo systemctl status squid

ユーザーサーバー構築

今回のユーザーサーバーにはプロキシサーバーからパスワードでログインできるようにします。

プライベートサブネットにSSMで接続する場合は下記を参考にしてください。

https://zenn.dev/michinoku/articles/18a8bd805cbdf1

  • AMI:Amazon Linux 2023
  • インスタンスタイプ:t3.micro
  • サブネット:プライベートサブネットを選択
  • セキュリティグループ:前準備で作成したSSH-SGを選択
  • ユーザーデータ:下記参照
ユーザーデータ
#!/bin/bash
# ==== 新ユーザー作成 ====
useradd User01
echo "User01:Admin" | chpasswd

# ==== sudo 権限付与 ====
usermod -aG wheel User01

# ==== SSHパスワード認証を有効化 ====
sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#\?ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config

# ==== SSH再起動 ====
systemctl restart sshd

起動後、プロキシサーバーにSSMしている状態からSSHで接続します。

ssh User01@<ユーザーサーバーのプライベートIP>
# パスワード入力を求められます。上記ユーザーデータの場合はAdminになっています。
ユーザーサーバー設定
# プロキシ設定
sudo vi /etc/profile.d/proxy.sh

# 以下内容を記載
export http_proxy="http://<プロキシサーバーのプライベートIP>:3128"
export https_proxy="http://<プロキシサーバーのプライベートIP>:3128"
export no_proxy="127.0.0.1,localhost"

# dnfコマンドのプロキシ設定
sudo vi /etc/dnf/dnf.conf

# ファイルの末尾に追記
proxy=http://<プロキシサーバーのプライベートIP>:3128

# 設定の反映
source /etc/profile.d/proxy.sh

動作確認

ユーザーサーバーから

  • 外部のウェブサイトを表示できること
  • dnfコマンドでパッケージをダウンロードできること

を確認します。

# 適当なウェブサイトを表示させる(ステータス200が返れば成功)
curl -I https://zenn.dev/

# dnfコマンドを使ったインストール確認
sudo dnf update -y
sudo dnf install httpd -y

おわり

今回はAmazon Linux 2023でプロキシサーバーを構築しました。

今後はVPC等の作成も含めてCDK等で簡素化させていきたいところです。

最後までお読みいただきありがとうございました。

Discussion