Squid Web Cache Wiki

Squid Web Cache 文档

🔗 使用 Kerberos 进行身份验证的 Squid 服务器配置

作者:Markus Moeller

:warning: 需要提取链接的图像并嵌入它们

🔗 目录

Squid 源代码中包含两个辅助程序

以下文档适用于 Unix/Linux 系统的辅助程序。Windows 辅助程序无需任何配置,开箱即用。

🔗 Active Directory 集成的先决条件

从 http://fuhm.net/software/msktutil/ 或 https://code.google.com/p/msktutil/ 安装 msktutil 包,或安装 Samba

🔗 krb5.conf 配置

:warning: 在 IE 中,必须将代理指定为 FQDN 而不是 IP 地址 :information_source: 对于 Windows 2003,应将 rc4-hmac 列为加密类型。

一个没有 AD 服务器 DNS 解析的最小设置(MIT Kerberos 示例)

[libdefaults]
      default_realm = WIN2003R2.HOME
      dns_lookup_kdc = no
      dns_lookup_realm = no
      default_keytab_name = /etc/krb5.keytab
; for Windows 2003
      default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
      default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
      permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

; for Windows 2008 with AES
;      default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;      default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;      permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;
; for MIT/Heimdal kdc no need to restrict encryption type

[realms]
      WIN2003R2.HOME = {
              kdc = w2k3r2.win2003r2.home
              admin_server = w2k3r2.win2003r2.home
      }

[domain_realm]
      .linux.home = WIN2003R2.HOME
      .win2003r2.home = WIN2003R2.HOME
      win2003r2.home = WIN2003R2.HOME

[logging]
  kdc = FILE:/var/log/kdc.log
  admin_server = FILE:/var/log/kadmin.log
  default = FILE:/var/log/krb5lib.log

🔗 创建 keytab

  1. 使用 msktutil 为 HTTP/fqdn 创建 keytab。(如果与 samba net join 一起使用,请使用与 net join 使用的主机名不同的计算机名称)

     kinit administrator@DOMAIN
     msktutil -c -b "CN=COMPUTERS" -s HTTP/<fqdn> -h <fqdn> -k /etc/squid/HTTP.keytab --computer-name squid-http --upn HTTP/<fqdn> --server <domain controller> --verbose
    

    或针对支持 AES 的 Windows 2008

     msktutil -c -b "CN=COMPUTERS" -s HTTP/<fqdn> -h <fqdn> -k /etc/squid/HTTP.keytab --computer-name squid-http --upn HTTP/<fqdn> --server <domain controller> --verbose --enctypes 28 ```
    

:warning: 具有 15 个字符的 Windows Netbios 限制。:warning:msktutil 需要 cyrus-sasl-gssapi ldap 插件才能向 AD ldap 进行身份验证。:warning: 由于 msktutil 0.3.16 中的一个错误,<computer-name> 必须是小写。

或使用 Samba

  1. 使用 net ads join 将主机加入域
  2. 使用 net ads keytab 为 HTTP/fqdn 创建 keytab
kinit administrator@DOMAIN

export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab

net ads keytab CREATE
net ads keytab ADD HTTP

unset KRB5_KTNAME

:warning: 如果您运行 winbindd 或其他 samba 服务,请不要使用此方法,因为 samba 会每隔几天重置一次机器密码,从而导致 keytab 无效!

或使用 MIT/Heimdal kdamin 工具

🔗 Squid 配置文件

像这样粘贴配置文件

auth_param negotiate program /usr/sbin/squid_kerb_auth
auth_param negotiate children 10
auth_param negotiate keep_alive on

用于利用它的基本身份验证 ACL 控制是

acl auth proxy_auth REQUIRED

http_access deny !auth
http_access allow auth
http_access deny all

将以下内容添加到 squid 启动脚本中(确保 keytab 可由 squid 进程所有者读取,例如 chgrp squid /etc/squid/HTTP.keytab; chmod g+r /etc/squid/HTTP.keytab)

KRB5_KTNAME=/etc/squid/HTTP.keytab
export KRB5_KTNAME

Kerberos 可以维护一个重放缓存来检测 Kerberos 票证的重用(通常只能在 5 分钟窗口内完成)。如果 Squid 在高负载下进行 Negotiate (Kerberos) 代理身份验证请求,重放缓存检查可能会导致高 CPU 负载。如果环境不需要高安全性,可以通过在启动脚本中添加以下内容来禁用 MIT 基于 Kerberos 实现的重放缓存检查。

KRB5RCACHETYPE=none
export KRB5RCACHETYPE

🔗 故障排除工具

在 Windows 客户端(例如,XP、2003 等上的 IE 或 Firefox)上,使用 Microsoft 资源工具包中的 kerbtrayklist 来列出和清除票证。

在端口 88 (Kerberos) 上使用 Wireshark 跟踪流量以识别 Kerberos 错误。(KRB5KDC_ERR_PREAUTH_REQUIRED 不是错误,而是客户端的信息消息)

🔗 进一步参考

🔗 分步概述

  1. 用户登录到桌面
  1. 用户请求 Squid 的 URL
  1. 桌面尝试从 KDC 获取 HTTP/<<squid-fqdn> 的服务票证,用户为 < userid@DOMAIN.COM > Squid-2.jpeg

  2. 桌面将请求发送到 Squid

  1. Squid 在 keytab 的帮助下验证 Kerberos 票证,并在检查任何额外的访问控制设置后回复。票证包含用户详细信息 < userid@DOMAIN.COM >,Squid 可以基于此做出授权决策 Squid-10.jpeg

  2. 步骤 2.、4. 和 5. 继续进行,直到 Kerberos 缓存(包含收到的 AS 和 TGS 响应)在约 8 小时后过期(这取决于您的 kdc 设置和/或您的 kinit 选项),然后需要重新执行步骤 1. 和 3.,这通常在 Windows 上是透明的,但在 Unix 上可能需要新的 kinit。

如果使用 squid_kerb_ldap,则会发生以下步骤

  1. Squid 以用户 <HTTP/<fqdn-squid>@DOMAIN.COM> 的身份“登录”到 Windows Active Directory 或 Unix kdc。这需要 Active Directory 为关联帐户设置 userPrincipalname 属性为 <HTTP/<fqdn-squid>@DOMAIN.COM>。这通常通过使用 msktutil 完成。

    Squid-4.jpeg

  2. Squid 通过查找 SRV 记录从 DNS 确定 ldap 服务器

    Squid-7.jpeg

  3. Squid 连接到 ldap 服务器

    Squid-6.jpeg

  4. 如果 ldap 服务器支持 Kerberos 身份验证,Squid 将请求一个服务票证 <ldap/<ldap-server-fqdn>,用户为 <HTTP/<squid-fqdn>@DOMAIN.COM>

    Squid-5.jpeg

  5. Squid 使用 Kerberos 身份验证向 ldap 服务器发送 LDAP 搜索请求并接收响应

    Squid-6.jpeg


⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.

类别: ConfigExample

导航:站点搜索站点页面分类🔼 向上