16.3. Kerberos 認証を使用したキャッシュプロキシーとしての Squid の設定
本セクションでは、Kerberos を使用して Active Directory (AD) にユーザーを認証するキャッシングプロキシーとしての Squid 基本設定を説明します。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
- この手順では、
/etc/squid/squid.confファイルが squid パッケージで提供されることを前提としています。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。 - Squid をインストールするサーバーが、AD ドメインのメンバーである。詳細は、『Red Hat Enterprise Linux 7 システム管理者のガイド』の『Samba をドメインメンバーとしてセットアップ』を参照してください。
手順
- 以下のパッケージをインストールします。
# yum install squid krb5-workstation - AD ドメイン管理者として認証します。
# kinit administrator@AD.EXAMPLE.COM - Squid 用の keytab を作成し、
/etc/squid/HTTP.keytabファイルに保存します。# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE -U administrator HTTPサービスプリンシパルをキータブに追加します。# net ads keytab ADD HTTP -U administrator- keytab ファイルの所有者を
squidユーザーに設定します。# chown squid /etc/squid/HTTP.keytab - 必要に応じて、キータブファイルに、プロキシーサーバーの完全修飾ドメイン名(FQDN)の
HTTPサービスプリンシパルが含まれていることを確認します。# klist -k /etc/squid/HTTP.keytab Keytab name: FILE:/etc/squid/HTTP.keytab KVNO Principal ---- -------------------------------------------------------------------------- ... 2 HTTP/proxy.ad.example.com@AD.EXAMPLE.COM ... /etc/squid/squid.confファイルを編集します。negotiate_kerberos_authヘルパーユーティリティーを設定するには、/etc/squid/squid.confの上部に以下の設定エントリーを追加します。auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COM以下は、上記の例でnegotiate_kerberos_authヘルパーユーティリティーに渡されるパラメーターを説明します。-k fileは、キータブファイルへのパスを設定します。squidユーザーには、このファイルの読み取り権限が必要なことに注意してください。-s HTTP/host_name@kerberos_realmは、Squid が使用する Kerberos プリンシパルを設定します。
必要に応じて、以下のパラメーターのいずれかまたは両方をヘルパーユーティリティーに渡すことによりロギングを有効にできます。-iは、認証ユーザーなどの情報メッセージをログに記録します。-dは、デバッグロギングを有効にします。
Squid は、ヘルパーユーティリティーから/var/log/squid/cache.logファイルにデバッグ情報をログに記録します。- 以下の ACL およびルールを追加して、Squid で、認証されたユーザーのみがプロキシーを使用できるように設定します。
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-auth重要これらの設定は、http_access deny all ルールの前に指定します。 - 次のルールを削除して、localnet ACL で指定された IP 範囲のプロキシー認証の回避を無効にします。
http_access allow localnet - 以下の ACL はデフォルト設定に存在し、HTTPS プロトコルを使用するポートとして 443 を定義します。
acl SSL_ports port 443ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。acl SSL_ports port port_number - 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デフォルトでは、設定には、Safe_ports ACL で定義されていないポートへのアクセス拒否を定義する http_access deny !Safe_ports ルールが含まれます。 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 はキャッシュをメモリーに保存します。
cache_dirパラメーターに/var/spool/squid/以外のキャッシュディレクトリーを設定する場合は、以下を行います。- キャッシュディレクトリーを作成します。
# mkdir -p path_to_cache_directory - キャッシュディレクトリーの権限を設定します。
# chown squid:squid path_to_cache_directory - SELinux を Enforcing モードで実行する場合は、
squid_cache_tコンテキストをキャッシュディレクトリーに設定します。# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directorysemanageユーティリティーがシステムで利用できない場合は、policycoreutils-python-utils パッケージをインストールします。
- ファイアウォールで 3128 ポートを開きます。
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload squidサービスを開始します。# systemctl start squid- システムの起動時に
squidサービスが自動的に起動するようにします。# systemctl enable squid
検証手順
プロキシーが適切に機能していることを確認するには、
curl ユーティリティーを使用して Web ページをダウンロードします。
# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"
curl でエラーが表示されず、index.html ファイルが現在のディレクトリーに存在する場合、プロキシーは機能します。
トラブルシューティングの手順
Kerberos 認証を手動でテストするには、以下を行います。
- AD アカウントの Kerberos チケットを取得します。
# kinit user@AD.EXAMPLE.COM - 必要に応じて、キーを表示します。
# klist negotiate_kerberos_auth_testユーティリティーを使用して認証をテストします。# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.comヘルパーユーティリティーがトークンを返すと、認証に成功しました。Token: YIIFtAYGKwYBBQUCoIIFqDC...