プロキシ・サーバ squid のインストールと設定(Ubuntu 上)

Ubuntu で Squid プロキシサーバを構築する方法を説明する。設定ファイル /etc/squid/squid.conf でのアクセス許可設定、サービスの起動と停止、ファイアウォールの設定、クライアントからの接続テスト、ログの確認方法を扱う。

自分が管理しているマシンにプロキシサーバを動作させ、同じ LAN 内の別のマシンの Web アクセス(Web ブラウザや wget など)が、このプロキシサーバを経由するようにする。プロキシサーバのキャッシュ機能により、同じ内容への繰り返しのアクセスでネットワークへの負荷が減る場合がある。

前もって決めておく事項

インストールと設定

  1. Squid パッケージのインストール:
    端末で次のコマンドを実行する。Ubuntu 24.04 LTS では Squid 6 系がインストールされる。
    sudo apt update && sudo apt -y install squid
    バージョンは次のコマンドで確認する。
    squid --version
  2. 設定ファイル /etc/squid/squid.conf の編集:
    編集前にオリジナルファイルのバックアップを作成する。
    sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bkp
    設定ファイルを編集し、ポート番号とアクセスを許可するネットワークを設定する。次の例は、ポート 3128 で待ち受け、IP アドレス範囲 XXX.YYY.ZZZ.0/24 からのアクセスを許可する設定である。aclhttp_access allow の行は、設定ファイル内にある http_access deny all の行より前に記述する。http_access は上から順に評価され、最初に一致した規則が適用される。
    # http_port ポート番号
    http_port 3128
    
    # アクセス制御リスト (ACL) の定義
    # acl <ネットワーク名> src <IPアドレス範囲 (CIDR表記)>
    acl my src XXX.YYY.ZZZ.0/24
    
    # HTTPアクセス制御
    # http_access allow <ネットワーク名>
    http_access allow my
    
    # その他のアクセスは拒否
    http_access deny all
    編集後、設定ファイルの文法を確認する。
    sudo squid -k parse
  3. Squid サービスの再起動:
    設定変更を反映させるためにサービスを再起動する。
    sudo systemctl restart squid
    サービスの状態を確認し、エラーが出ていないことを確認する。
    sudo systemctl status squid
    サービスを停止するときは次のコマンドを実行する。
    sudo systemctl stop squid
  4. ファイアウォールの設定:
    ファイアウォールが有効な環境では、Squid が使用するポートへのアクセスを許可する。UFW を使用している場合の例を示す。送信元を限定することで、LAN 外からの接続を受け付けないようにする。
    sudo ufw allow from XXX.YYY.ZZZ.0/24 to any port 3128 proto tcp
  5. プロキシ経由での Web アクセス・テスト:
    Squid が指定したポートで待ち受けているかを確認する。
    ss -lntp | grep 3128
    別のマシンでプロキシを指定して Web サイトにアクセスできるかを確認する。curl を使用する場合の例を示す。
    curl -x http://[プロキシサーバのIPアドレス]:3128 -I https://www.ubuntu.com/
    Web ブラウザから使用する場合は、ブラウザまたは OS のプロキシ設定に、プロキシサーバの IP アドレスとポート番号(3128)を指定する。
  6. Squid ログの確認:
    ログファイルは /var/log/squid/ ディレクトリに置かれる。アクセスログは access.log、エラーや起動時のメッセージは cache.log である。アクセスログをリアルタイムで確認する場合の例を示す。
    sudo tail -f /var/log/squid/access.log
    クライアントからのアクセスがログに記録されない場合は、クライアント側のプロキシ設定、http_access の記述順序、ファイアウォールの設定を確認する。