背景
Amazon Linux 2023を使用してSquidプロキシサーバを検証する機会があって、忘れないうちに備忘として残します。
Squidプロキシサーバとは
Squidサーバとは、プロキシサーバやWebキャッシュサーバとして利用される、オープンソースソフトウェアです。主に、クライアントとWebサーバの間で通信を中継し、ネットワークの負荷を軽減したり、アクセス制御やセキュリティ強化など、様々な役割を担います。
Squidサーバの主な機能:
- プロキシ機能: クライアントからWebサーバへのアクセスを中継し、アクセス元のIPアドレスを隠蔽したり、セキュリティ設定を行うことができます。
- Webキャッシュ機能: 過去にアクセスしたWebページや画像をキャッシュすることで、再アクセス時にWebサーバへのアクセスを減らし、ネットワークの負荷を軽減できます。
- アクセス制御: 許可されたクライアントのみがアクセスできるように、IPアドレスやユーザー名などに基づいてアクセスを制限できます。
- セキュリティ強化: Webサーバへのアクセスを中継することで、Webサーバへの直接的な攻撃を防ぐことができます。
1. Amazon Linux 2023の準備
まず、Amazon EC2インスタンスを作成し、Amazon Linux 2023を選択します。インスタンスの設定は以下の通りです。
- インスタンスタイプ: t4g.micro(ARM)
- AMI: al2023-ami-2023.7.20250512.0-kernel-6.1-arm64
- セキュリティグループ: TCP 3128ポートを開放(Squidのデフォルトポート)
- IAMロール: 必要に応じてVPC内のリソースにアクセスできる権限を付与
2. Squidのインストール
Amazon Linux 2023の標準リポジトリからSquidをインストールできます。
sudo dnf install -y squid
インストール後、Squidのステータスを確認します。
systemctl status squid
3. Squidの基本設定
Squidの設定ファイル /etc/squid/squid.conf を編集し、基本的なプロキシ設定を行います。
sudo vi /etc/squid/squid.conf
以下の設定を追加または変更します。
http_port 3128
acl localnet src 10.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
http_access allow localnet
http_access deny all
設定を保存したら、Squidを再起動します。
sudo systemctl restart squid
4. Squidの高度な設定
4.1. キャッシュ設定
Squidのキャッシュ機能を有効にすることで、ネットワークの負荷を軽減できます。
cache_dir ufs /var/spool/squid 100 16 256
maximum_object_size 4096 KB
cache_mem 256 MB
4.2. アクセス制御
特定のIPアドレスやドメインへのアクセスを制限することができます。
acl blocked_sites dstdomain .example.com
http_access deny blocked_sites
4.3. ログ管理
Squidのログを適切に管理することで、トラブルシューティングや監査に役立ちます。
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
5. Squidの自動起動設定
インスタンスが再起動してもSquidが自動で起動するように設定します。
sudo systemctl enable squid
6. 動作確認
クライアント側でプロキシ設定を行い、Squid経由でインターネットにアクセスできるか確認します。
curl -x http://<EC2のIP>:3128 -L https://www.google.com
ステータスコード 200 が返ってくれば、Squidが正常に動作しています。
7. SSL Bumpの設定(オプション)
tls_outgoing_options capath=/etc/pki/tls/certs options=ALL
sslcrtd_children 3
sslcrtd_program /usr/lib64/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB
# Squid normally listens to port 3128
http_port 8080
http_port 3128 transparent ###HTTPアクセス用 Tranceparentモードの有効化
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/cert.cer tls-key=/etc/squid/key.pem cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS tls-dh=prime256v1:/etc/squid/bump_dhparam.pem ###HTTPSアクセス用 Tranceparentモードの有効化&ssldumpの有効化
上3行はSSL Bumpのキャッシュオプションです。下3行はSSL Bumpのポート設定なのですが、http_portが2つ空いているのは3128だけではparseエラー(squid -k parse)が発生してしまったため空けています。
まとめ
Amazon Linux 2023でSquidを構築する手順を紹介しました。Squidは、アクセス制御やキャッシュ機能を活用することで、ネットワークの最適化に役に立ちます。