16.2. LDAP 認証を使用したキャッシュプロキシーとしての Squid の設定
本セクションでは、LDAP を使用してユーザーを認証するキャッシングプロキシーとしての Squid の基本設定を説明します。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
- この手順では、
/etc/squid/squid.conf
ファイルが squid パッケージで提供されることを前提としています。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。 uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com
などのサービスユーザーが LDAP ディレクトリーに存在します。Squid はこのアカウントを使用して認証ユーザーを検索します。認証ユーザーが存在する場合、Squid はこのユーザーをディレクトリーにバインドして、認証を確認します。
手順
- squid パッケージをインストールします。
yum install squid
# yum install squid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/squid/squid.conf
ファイルを編集します。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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、上記の例でbasic_ldap_auth
ヘルパーユーティリティーに渡されるパラメーターを説明します。-b base_DN
は LDAP 検索ベースを設定します。-d proxy_service_user_DN
は、Squid がディレクトリー内の認証ユーザーを検索するために使用するアカウントの識別名(DN)を設定します。-w path_to_password_file
は、プロキシーサービスユーザーのパスワードが含まれるファイルへのパスを設定します。パスワードファイルを使用すると、オペレーティングシステムのプロセスリストにパスワードが表示されなくなります。-f LDAP_filter
は、LDAP 検索フィルターを指定します。Squid は、%s
変数を、認証ユーザーが提供するユーザー名に置き換えます。この例の (& (objectClass=person) (uid=%s)) フィルターは、ユーザー名がuid
属性に設定された値と一致する必要があり、ディレクトリーエントリーに person オブジェクトクラスが含まれることを定義します。-ZZ
は、STARTTLS コマンドを使用して LDAP プロトコルで TLS 暗号化接続を強制します。以下の状況で-ZZ
を省略します。- LDAP サーバーは、暗号化された接続にを対応しません。
- URL に指定されたポートは、LDAPS プロトコルを使用します。
-H LDAP_URL
パラメーターは、プロトコル、ホスト名、IP アドレス、および LDAP サーバーのポートを URL 形式で指定します。
- 以下の ACL およびルールを追加して、Squid で、認証されたユーザーのみがプロキシーを使用できるように設定します。
acl ldap-auth proxy_auth REQUIRED http_access allow ldap-auth
acl ldap-auth proxy_auth REQUIRED http_access allow ldap-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要これらの設定は、http_access deny all ルールの前に指定します。 - 次のルールを削除して、localnet ACL で指定された IP 範囲のプロキシー認証の回避を無効にします。
http_access allow localnet
http_access allow localnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下の ACL はデフォルト設定に存在し、HTTPS プロトコルを使用するポートとして 443 を定義します。
acl SSL_ports port 443
acl SSL_ports port 443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。acl SSL_ports port port_number
acl SSL_ports port port_number
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、設定には、Safe_ports ACL で定義されていないポートへのアクセス拒否を定義する http_access deny !Safe_ports ルールが含まれます。 cache_dir
パラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類固有の設定を設定します。cache_dir ufs /var/spool/squid 10000 16 256
cache_dir ufs /var/spool/squid 10000 16 256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、以下が可能になります。- Squid は、ufs キャッシュタイプを使用します。
- Squid はキャッシュを
/var/spool/squid/
ディレクトリーに保存します。 - キャッシュのサイズが最大 10000 MB になります。
- Squid は、16 個の レベル 1 サブディレクトリーを
/var/spool/squid/
ディレクトリーに作成します。 - Squid は、レベル 1 の各ディレクトリーに 256 個のサブディレクトリーを作成します。
cache_dir
ディレクティブを設定しない場合、Squid はキャッシュをメモリーに保存します。
cache_dir
パラメーターに/var/spool/squid/
以外のキャッシュディレクトリーを設定する場合は、以下を行います。- キャッシュディレクトリーを作成します。
mkdir -p path_to_cache_directory
# mkdir -p path_to_cache_directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - キャッシュディレクトリーの権限を設定します。
chown squid:squid path_to_cache_directory
# chown squid:squid path_to_cache_directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux を Enforcing モードで実行する場合は、
squid_cache_t
コンテキストをキャッシュディレクトリーに設定します。semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage
ユーティリティーがシステムで利用できない場合は、policycoreutils-python-utils パッケージをインストールします。
- LDAP サービスユーザーのパスワードを
/etc/squid/ldap_password
ファイルに保存し、ファイルに適切なパーミッションを設定します。echo "password" > /etc/squid/ldap_password chown root:squid /etc/squid/ldap_password chmod 640 /etc/squid/ldap_password
# echo "password" > /etc/squid/ldap_password # chown root:squid /etc/squid/ldap_password # chmod 640 /etc/squid/ldap_password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイアウォールで 3128 ポートを開きます。
firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow squid
サービスを開始します。systemctl start squid
# systemctl start squid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムの起動時に
squid
サービスが自動的に起動するようにします。systemctl enable squid
# systemctl enable squid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証手順
プロキシーが適切に機能していることを確認するには、
curl
ユーティリティーを使用して Web ページをダウンロードします。
curl -O -L "https://www.redhat.com/index.html" -x "user_name:password@proxy.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" -x "user_name:password@proxy.example.com:3128"
curl
でエラーが表示されず、index.html
ファイルが現在のディレクトリーにダウンロードされている場合は、プロキシーが機能します。
トラブルシューティングの手順
ヘルパーユーティリティーが正しく機能していることを確認するには、以下の手順を行います。
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
# /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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 有効なユーザー名とパスワードを入力し、Enter を押します。
user_name password
user_name password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヘルパーユーティリティーが OK を返すと、認証に成功しました。