3.2. LDAP 認証を使用したキャッシングプロキシーとしての Squid の設定

Squid を、LDAP を使用してユーザーを認証するキャッシングプロキシーとして設定できます。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。

前提条件

  • /etc/squid/squid.conf ファイルが、squid パッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。
  • uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com などのサービスユーザーが LDAP ディレクトリーに存在します。Squid はこのアカウントを使用して認証ユーザーを検索します。認証ユーザーが存在する場合、Squid はこのユーザーをディレクトリーにバインドして、認証を確認します。

手順

  1. squid パッケージをインストールします。

    # dnf install squid
  2. /etc/squid/squid.conf ファイルを編集します。

    1. basic_ldap_auth ヘルパーユーティリティーを設定するには、/etc/squid/squid.conf に以下の設定エントリーを追加します。

      auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389

      以下では、上記の basic_ldap_auth ヘルパーユーティリティーに渡されるパラメーターを説明します。

      • -b base_DN は LDAP 検索ベースを設定します。
      • -D proxy_service_user_DN は、Squid が、ディレクトリー内の認証ユーザーを検索する際に使用するアカウントの識別名 (DN) を設定します。
      • -W path_to_password_file は、プロキシーサービスユーザーのパスワードが含まれるファイルへのパスを設定します。パスワードファイルを使用すると、オペレーティングシステムのプロセスリストにパスワードが表示されなくなります。
      • -f LDAP_filter は 、DAP 検索フィルターを指定します。Squid は、%s 変数を、認証ユーザーにより提供されるユーザー名に置き換えます。

        上記の例の (&(objectClass=person)(uid=%s)) フィルターは、ユーザー名が uid 属性に設定された値と一致する必要があり、ディレクトリーエントリーに person オブジェクトクラスが含まれることを定義します。

      • -ZZ は、STARTTLS コマンドを使用して、LDAP プロトコルで TLS 暗号化接続を強制します。以下の状況で -ZZ を省略します。

        • LDAP サーバーは、暗号化された接続にを対応しません。
        • URL に指定されたポートは、LDAPS プロトコルを使用します。
      • -H LDAP_URL パラメーターは、プロトコル、ホスト名、IP アドレス、および LDAP サーバーのポートを URL 形式で指定します。
    2. 以下の ACL およびルールを追加して、Squid で、認証されたユーザーのみがプロキシーを使用できるように設定します。

      acl ldap-auth proxy_auth REQUIRED
      http_access allow ldap-auth
      重要

      http_access deny all ルールの前にこの設定を指定します。

    3. 次のルールを削除して、localnet ACL で指定された IP 範囲のプロキシー認証の回避を無効にします。

      http_access allow localnet
    4. 以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして 443 を定義します。

      acl SSL_ports port 443

      ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。

      acl SSL_ports port port_number
    5. Squid が接続を確立できるポートに設定する acl Safe_ports ルールの一覧を更新します。たとえば、プロキシーを使用するクライアントがポート 21 (FTP)、80 (HTTP)、443 (HTTPS) のリソースにのみアクセスできるようにするには、その設定の以下の acl Safe_ports ステートメントのみを保持します。

      acl Safe_ports port 21
      acl Safe_ports port 80
      acl Safe_ports port 443

      デフォルトでは、設定には http_access deny !Safe_ports ルールが含まれ、Safe_ports ACL で定義されていないポートへのアクセス拒否を定義します。

    6. cache_dir パラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を設定します。

      cache_dir ufs /var/spool/squid 10000 16 256

      この設定により、以下が可能になります。

      • Squid は、ufs キャッシュタイプを使用します。
      • Squid は、キャッシュを /var/spool/squid/ ディレクトリーに保存します。
      • キャッシュのサイズが 10000 MB まで大きくなります。
      • Squid は、16 個の レベル 1 サブディレクトリーを /var/spool/squid/ ディレクトリーに作成します。
      • Squid は、レベル 1 の各ディレクトリーに 256 個のサブディレクトリーを作成します。

        cache_dir ディレクティブを設定しないと、Squid はキャッシュをメモリーに保存します。

  3. cache_dir パラメーターに /var/spool/squid/ 以外のキャッシュディレクトリーを設定する場合は、以下を行います。

    1. キャッシュディレクトリーを作成します。

      # mkdir -p path_to_cache_directory
    2. キャッシュディレクトリーの権限を設定します。

      # chown squid:squid path_to_cache_directory
    3. SELinux を enforcing モードで実行する場合は、squid_cache_t コンテキストをキャッシュディレクトリーに設定します。

      # semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
      # restorecon -Rv path_to_cache_directory

      semanage ユーティリティーがシステムで利用できない場合は、policycoreutils-python-utils パッケージをインストールします。

  4. LDAP サービスユーザーのパスワードを /etc/squid/ldap_password ファイルに保存し、ファイルに適切なパーミッションを設定します。

    # echo "password" > /etc/squid/ldap_password
    # chown root:squid /etc/squid/ldap_password
    # chmod 640 /etc/squid/ldap_password
  5. ファイアウォールで 3128 ポートを開きます。

    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  6. squid サービスを有効にして開始します。

    # systemctl enable --now squid

検証手順

プロキシーが正しく機能することを確認するには、curl ユーティリティーを使用して Web ページをダウンロードします。

# curl -O -L "https://www.redhat.com/index.html" -x "user_name:password@proxy.example.com:3128"

curl がエラーを表示せず、index.html ファイルが現在のディレクトリーにダウンロードされている場合は、プロキシーが動作します。

トラブルシューティングの手順

ヘルパーユーティリティーが正しく機能していることを確認するには、以下の手順を行います。

  1. auth_param パラメーターで使用したのと同じ設定で、ヘルパーユーティリティーを手動で起動します。

    # /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389
  2. 有効なユーザー名とパスワードを入力し、Enter を押します。

    user_name password

    ヘルパーユーティリティーが OK を返すと、認証に成功しました。