3.3. kerberos 認証を使用したキャッシングプロキシーとしての Squid の設定
Squid を、Kerberos を使用して Active Directory (AD) に対してユーザーを認証するキャッシングプロキシーとして設定できます。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
-
/etc/squid/squid.conf
ファイルが、squid
パッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。 - Squid をインストールするサーバーが、AD ドメインのメンバーである。
手順
以下のパッケージをインストールします。
# dnf install squid krb5-workstation
AD ドメイン管理者として認証します。
# kinit administrator@AD.EXAMPLE.COM
Squid 用のキータブを作成し、これを
/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
キータブファイルの所有者を
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
デフォルトでは、設定には
http_access deny !Safe_ports
ルールが含まれ、Safe_ports
ACL で定義されていないポートへのアクセス拒否を定義します。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 はキャッシュをメモリーに保存します。
-
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_directory
semanage
ユーティリティーがシステムで利用できない場合は、policycoreutils-python-utils
パッケージをインストールします。
ファイアウォールで
3128
ポートを開きます。# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload
squid
サービスを有効にして開始します。# 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
ファイルが現在のディレクトリーに存在すると、プロキシーが機能します。
トラブルシューティングの手順
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...