🔗 使用 Kerberos 进行身份验证的 Squid 服务器配置
作者:Markus Moeller
需要提取链接的图像并嵌入它们
🔗 目录
Squid 源代码中包含两个辅助程序
-
negotiate_kerberos_auth用于在 Unix/Linux 系统上运行的 Squid -
mswin_negotiate_auth.exe用于在 Windows 系统上运行的 Squid
以下文档适用于 Unix/Linux 系统的辅助程序。Windows 辅助程序无需任何配置,开箱即用。
🔗 Active Directory 集成的先决条件
从 http://fuhm.net/software/msktutil/ 或 https://code.google.com/p/msktutil/ 安装 msktutil 包,或安装 Samba
🔗 krb5.conf 配置
在 IE 中,必须将代理指定为 FQDN 而不是 IP 地址
对于 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
-
使用 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 ```
![]()
具有 15 个字符的 Windows Netbios 限制。 msktutil需要cyrus-sasl-gssapildap 插件才能向 AD ldap 进行身份验证。由于
msktutil0.3.16 中的一个错误,<computer-name> 必须是小写。
或使用 Samba
- 使用 net ads join 将主机加入域
- 使用 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
如果您运行 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 资源工具包中的 kerbtray 或 klist 来列出和清除票证。
在端口 88 (Kerberos) 上使用 Wireshark 跟踪流量以识别 Kerberos 错误。(KRB5KDC_ERR_PREAUTH_REQUIRED 不是错误,而是客户端的信息消息)
🔗 进一步参考
- 可以在 http://klaubert.wordpress.com/2008/01/09/squid-kerberos-authentication-and-ldap-authorization-in-active-directory/ 找到一个很好的 HOWTO。
🔗 分步概述
- 用户登录到桌面
- 从 Windows PC 到 Windows Active Directory,用户为 <userid>,选择 Netbios 域名 DOMAIN
- 从 Unix PC 使用 kinit 或 pam 到 Windows Active Directory,用户为 <userid@DOMAIN.COM>
- 从 Windows PC 到 Unix 密钥分发中心 (KDC),用户为 <userid>,选择 Netbios 域名 DOMAIN
- 从 Unix PC 使用 kinit 或 pam 到 Unix 密钥分发中心 (KDC),用户为 userid@DOMAIN.COM
- 以上任何一种都会创建一个 AS 请求/AS 响应交换

- 用户请求 Squid 的 URL
- 通过 Squid 发送 GET 或 PUT 或任何其他请求
- (如果设置正确) Squid 回复 Proxy-Authenticate: Negotiate

-
桌面尝试从 KDC 获取 HTTP/<<squid-fqdn> 的服务票证,用户为 < userid@DOMAIN.COM >

-
桌面将请求发送到 Squid
- 如果之前的步骤 3. 成功,则带有 Proxy-Authorization: Negotiate <base64 编码的 Kerberos 令牌>
- 如果之前的步骤 3. 不成功,则带有 Proxy-Authorization: Negotiate <base64 编码的 NTLM 令牌>(此处不再讨论。请参阅 NTLM 文档)

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

-
步骤 2.、4. 和 5. 继续进行,直到 Kerberos 缓存(包含收到的 AS 和 TGS 响应)在约 8 小时后过期(这取决于您的 kdc 设置和/或您的 kinit 选项),然后需要重新执行步骤 1. 和 3.,这通常在 Windows 上是透明的,但在 Unix 上可能需要新的 kinit。
如果使用 squid_kerb_ldap,则会发生以下步骤
-
Squid 以用户 <HTTP/<fqdn-squid>@DOMAIN.COM> 的身份“登录”到 Windows Active Directory 或 Unix kdc。这需要 Active Directory 为关联帐户设置 userPrincipalname 属性为 <HTTP/<fqdn-squid>@DOMAIN.COM>。这通常通过使用 msktutil 完成。

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

-
Squid 连接到 ldap 服务器

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

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

⚠️ 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
导航:站点搜索,站点页面,分类,🔼 向上