6.3. kerberos 認証を使用したキャッシングプロキシーとしての Squid の設定
Squid を、Kerberos を使用して Active Directory (AD) に対してユーザーを認証するキャッシングプロキシーとして設定できます。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
-
/etc/squid/squid.confファイルが、squidパッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。
手順
以下のパッケージをインストールします。
# yum install squid krb5-workstationAD ドメイン管理者として認証します。
# kinit administrator@AD.EXAMPLE.COMSquid 用のキータブを作成し、それを
/etc/squid/HTTP.keytabファイルに保存し、HTTPサービスプリンシパルをキータブに追加します。# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE -U administrator # net ads keytab ADD HTTP -U administratorオプション: システムが (
adcli経由で) 最初にレルムを使用して AD ドメインに参加している場合、次の手順に従ってHTTPプリンシパルを追加し、squid 用のキータブファイルを作成します。HTTPサービスプリンシパルをデフォルトのキータブファイル/etc/krb5.keytabに追加し、検証します。# adcli update -vvv --domain=ad.example.com --computer-name=PROXY --add-service-principal="HTTP/proxy.ad.example.com" -C # klist -kte /etc/krb5.keytab | grep -i HTTP/etc/krb5.keytabファイルをロードし、HTTP以外のすべてのサービスプリンシパルを削除し、残りのプリンシパルを/etc/squid/HTTP.keytabファイルに保存します。# ktutil ktutil: rkt /etc/krb5.keytab ktutil: l -e slot | KVNO | Principal ----------------------------------------------------------------------------- 1 | 2 | PROXY$@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 2 | 2 | PROXY$@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 3 | 2 | host/PROXY@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 4 | 2 | host/PROXY@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 5 | 2 | host/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 6 | 2 | host/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 7 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 8 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96)ktutilの対話型シェルで、さまざまなオプションを使用して、不要なプリンシパルをすべてキータブから削除できます。次に例を示します。ktutil: delent 1ktutil: l -e slot | KVNO | Principal ------------------------------------------------------------------------------- 1 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 2 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) ktutil: wkt /etc/squid/HTTP.keytab ktutil: q警告SSSD または Samba/winbind がマシンアカウントのパスワードを更新すると、
/etc/krb5.keytab内のキーが更新される可能性があります。更新後、/etc/squid/HTTP.keytab内のキーは機能しなくなるため、ktutilの手順を再度実行して新しいキーをキータブにコピーする必要があります。
キータブファイルの所有者を
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ルールの前にこの設定を指定します。次のルールを削除して、
localnetACL で指定された IP 範囲のプロキシー認証の回避を無効にします。http_access allow localnet以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして
443を定義します。acl SSL_ports port 443ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。
acl SSL_ports port port_numberSquid が接続を確立できるポートに設定する
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_portsACL で定義されていないポートへのアクセス拒否を定義します。cache_dirパラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を設定します。cache_dir ufs /var/spool/squid 10000 16 256この設定により、以下が可能になります。
-
Squid は、
ufsキャッシュタイプを使用します。 -
Squid は、キャッシュを
/var/spool/squid/ディレクトリーに保存します。 -
キャッシュのサイズが
10000MB まで大きくなります。 -
Squid は、
16個のレベル 1 サブディレクトリーを/var/spool/squid/ディレクトリーに作成します。 Squid は、レベル 1 の各ディレクトリーに
256個のサブディレクトリーを作成します。cache_dirディレクティブを設定しないと、Squid はキャッシュをメモリーに保存します。
-
Squid は、
cache_dirパラメーターに/var/spool/squid/以外のキャッシュディレクトリーを設定する場合は、以下を行います。キャッシュディレクトリーを作成します。
# mkdir -p path_to_cache_directoryキャッシュディレクトリーの権限を設定します。
# chown squid:squid path_to_cache_directorySELinux を
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 --reloadsquidサービスを有効にして開始します。# systemctl enable --now squid
検証
プロキシーが正しく機能することを確認するには、
curlユーティリティーを使用して Web ページをダウンロードします。# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"curlがエラーを表示せず、index.htmlファイルが現在のディレクトリーに存在すると、プロキシーが機能します。
トラブルシューティングの手順
AD アカウントの Kerberos チケットを取得します。
# kinit user@AD.EXAMPLE.COMオプション: チケットを表示します。
# klistnegotiate_kerberos_auth_testユーティリティーを使用して認証をテストします。# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.comヘルパーユーティリティーがトークンを返す場合は、認証に成功しました。
Token: YIIFtAYGKwYBBQUCoIIFqDC...