😎

EC2にSquidをインストールしてプロキシサーバーを構築する

2024/08/07に公開

はじめに

Linuc202の学習用にAmazon EC2 (Amazon Linux 2) インスタンスに Squidをインストールし、プロキシサーバーを構築してみました。クライアントPCはWindowsを使用し、Squidサーバーはパブリックサブネットにデプロイします。クライアントのWebアクセスがSquidを経由しているかまで確認しました。

前提条件

  • Squidを設定するサーバはEC2(Amazon Linux 2)
  • クライアントはWindowsとする
  • Squidのバージョンはv3.5
  • Squidを設定するEC2はパブリックサブネットにデプロイする

前提知識

Squidとは

Squidは、高性能なプロキシキャッシングサーバーです。主にHTTPおよびFTPトラフィックを処理し、キャッシュ機能によりウェブアクセスのパフォーマンスを向上させます。以下は、Squidの主な機能です

  • キャッシング: よくアクセスされるコンテンツを保存し、再度リクエストがあった場合に迅速に提供します。
  • アクセス制御: 特定のIPアドレスやネットワークからのアクセスを許可または拒否することができます。
  • トラフィック管理: 帯域幅の使用を最適化し、トラフィックの優先順位を設定することができます。

ステップ 1: Squid のインストール

まず、EC2 インスタンスにSSHで接続します。接続が完了したら、以下のコマンドを実行して Squid をインストールします。

sudo yum update -y
sudo yum install squid -y

ステップ 2: Squid の設定

インストール後、Squid の設定ファイルを編集します。

sudo vi /etc/squid/squid.conf

このファイルは何をするファイルなのか

squid.conf は Squid のメイン設定ファイルであり、プロキシサーバーの動作を制御します。ACL(アクセス制御リスト)やポート設定、キャッシュポリシーなどを指定することができます。

設定ファイルの編集

以下の設定を追加または編集します:

# 既存のACL定義
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

# クライアントPCのIPアドレスを許可するACLを追加
acl myip src 203.0.113.24/32  # クライアントPCの例示用IPアドレス

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

# 既存のアクセス許可ルール
http_access allow localnet
http_access allow localhost

# クライアントPCのIPアドレスからのアクセスを許可するルールを追加
http_access allow myip

http_access deny all

http_port 3128

coredump_dir /var/spool/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

どこを編集したのか

  1. クライアントPCのIPアドレスを許可するACLを追加。
  2. クライアントPCのIPアドレスからのアクセスを許可するルールを追加。
  3. すべてのその他のアクセスを拒否するルールを追加。

各設定項目の解説

  • acl localnet src: ローカルネットワークからのアクセスを許可するACLを定義します。
  • acl SSL_ports port: SSLポート(443番)を定義します。
  • acl Safe_ports port: 安全なポートを定義します。これにはHTTP、FTP、HTTPSなどが含まれます。
  • acl CONNECT method CONNECT: CONNECTメソッドを許可します。これはHTTPSトラフィックを処理するために必要です。
  • acl myip src: クライアントPCのIPアドレスを許可するACLを追加します。
  • http_access deny !Safe_ports: 安全でないポートへのアクセスを拒否します。
  • http_access deny CONNECT !SSL_ports: SSLポート以外へのCONNECTメソッドを拒否します。
  • http_access allow localhost manager: ローカルホストからの管理アクセスを許可します。
  • http_access deny manager: マネージャーへのその他のアクセスを拒否します。
  • http_access allow localnet: ローカルネットワークからのアクセスを許可します。
  • http_access allow localhost: ローカルホストからのアクセスを許可します。
  • http_access allow myip: クライアントPCのIPアドレスからのアクセスを許可します。
  • http_access deny all: その他のすべてのアクセスを拒否します。
  • http_port 3128: Squidがリッスンするポートを定義します(デフォルトは3128)。
  • coredump_dir /var/spool/squid: コアダンプを保存するディレクトリを指定します。
  • refresh_pattern: キャッシュの更新パターンを定義します。

ステップ 3: Squid サービスの再起動

設定ファイルを保存したら、Squid サービスを再起動します。

sudo systemctl restart squid
sudo systemctl enable squid

ステップ 4: Windows クライアントのプロキシ設定

Windows全体のプロキシ設定

  1. インターネットオプションを開く

    • 「スタート」メニューから「コントロールパネル」を開き、「インターネットオプション」を選択します。
  2. LAN設定を開く

    • 「接続」タブをクリックし、「LANの設定」ボタンをクリックします。
  3. プロキシサーバーの設定

    • 「プロキシサーバーを使用する」にチェックを入れ、以下の情報を入力します。
      • アドレス: your-ec2-instance-public-ip
      • ポート: 3128
    • 「OK」をクリックして設定を保存します。

ステップ 5: ログの確認

設定が完了したら、プロキシサーバーを通じてインターネットにアクセスし、Squidのログを確認して接続状況を確認します。

ログの確認コマンド

インターネットにアクセスした後、このログファイルを確認することで、クライアントPCからのリクエストが正常にプロキシサーバーを通過しているかどうかを確認できます。

sudo tail -f /var/log/squid/access.log

設定をして躓いた内容

間違えた設定

初期設定では、クライアントPCからのアクセスが拒否される問題に直面しました。原因は、アクセス制御リスト(ACL)とアクセス許可ルールの順序が適切に設定されていなかったためです。

躓いた内容

  • クライアントPCのIPアドレスを許可するACLを既存のACL定義のすぐ後に移動しました。この変更により、ACLが正しく適用されるようになりました。
  • クライアントPCのIPアドレスからのアクセスを許可するルールを http_access deny all の前に移動しました。これにより、特定のクライアントPCからのアクセスが許可され、それ以外のアクセスが拒否されるようになりました。

まとめ

このガイドでは、Amazon EC2 インスタンスに Squid プロキシサーバーをインストールし、特定のクライアントPCからのアクセスを許可する設定方法を説明しました。設定の途中で発生する可能性のある問題とその解決方法も取り上げました。これで、プロキシサーバーを通じて安全かつ効率的にインターネットにアクセスできるようになります。

Discussion