Squid代理的用户认证(基本认证、集成Windows域认证)
2012-07-02 TsengYia#126.com
关于Squid代理服务的用户验证,本文简要介绍了两种方法的实现:basic基本认证、ntlm域认证。
basic认证采用账户数据文件的方式,能够对代理访问做简单的登录验证,从而实现用户控制。而ntlm认证依赖于已有的Windows域环境,Squid服务器本身需要加入域,而客户机只要以域用户登录,即自动通过代理验证,从而省去了域环境中客户机的反复验证过程,提高了代理访问的易用性。
##############################################################################
系统环境:
Squid代理服务器(RHEL 6.2)——
主机名:proxy.example.com
IP地址:192.168.4.6/24
主要软件包:squid-3.1.10-1.el6_1.1.i686、samba-winbind-3.5.10-114.el6.i686、samba-common-3.5.10-114.el6.i686
域控制器(Win2008 R2)——
主机名:w2k8.example.com
IP地址:192.168.4.2/24
主要软件包:Active Directory域服务
测试用Web服务器(RHEL 5.5)——
主机名:www.example.com
IP地址:192.168.4.105/24
主要软件包:httpd-2.2.3-43.el5
测试用客户机(WinXP或Win7)——
主机名:station110.example.com
IP地址:192.168.4.110/24
主要软件包:Internet Explorer 8.0
##############################################################################
一、方式1:使用基本认证
1. 准备账户数据文件
使用httpd提供的htpasswd工具,-c表示建库,首次添加用户时使用,省略-c时可用来改密码
[root@localhost ~]# htpasswd -c /etc/squid/passwd tsengyia
New password:
Re-type new password:
Adding password for user tsengyia
2. 调整squid.conf配置文件
[root@localhost ~]# vim /etc/squid/squid.conf //参考 man cgconfig.conf
... ...
http_port 3128
hierarchy_stoplist cgi-bin ?
cache_dir ufs /var/spool/squid 200 16 256
cache_mem 128 MB
coredump_dir /var/spool/squid
visible_hostname proxy.example.com
####
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 10 # 基本认证程序的子进程数
auth_param basic credentialsttl 2 hours # 每次认证的TTL值
auth_param basic realm Squid Cache Server # 认证领域字串,登录窗口中会显示
acl auth_user proxy_auth REQUIRED # 将通过代理认证的用户定义为一个ACL
http_access allow auth_user # 允许此ACL使用代理服务
acl all src 0.0.0.0/0.0.0.0
http_access deny all # 默认策略设为拒绝
####
[root@localhost ~]# service squid restart
3. 在客户机中测试代理访问
为IE浏览器配置代理,并访问测试用Web服务器,将会弹出认证登录框。
必须验证成功(使用/etc/squid/passwd中的账户)方可正常访问网页,否则将提示被拒绝。
二、方式2:与Windows域集成认证
1. 将Squid服务器加入Windows域
详见另篇《将Linux主机加入Windows域》:
2. 调整squid.conf配置文件
[root@localhost ~]# vim /etc/squid/squid.conf //参考 man cgconfig.conf
... ...
####
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp //指定ntlm认证程序、使用的协议
auth_param ntlm children 10 //ntlm认证程序的子进程数
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic //替换基本认证程序
auth_param basic children 10 //基本认证程序的子进程数
auth_param basic credentialsttl 2 hours //每次认证的TTL值
auth_param basic realm Squid Cache Server //认证领域字串,登录窗口中会显示
acl DomainUsers proxy_auth REQUIRED //将通过ntlm域认证的用户定义为一个ACL
http_access allow DomainUsers //允许此ACL使用代理服务
acl all src 0.0.0.0/0.0.0.0
http_access deny all //默认策略设为拒绝
####
[root@localhost ~]# service squid restart
3. 调整winbind服务的Socket目录权限
1)查看原有权限
默认情况下,Squid服务对winbindd_privileged目录不具有访问权限:
[root@localhost ~]# ls -ld /var/lib/samba/winbindd_privileged/
drwxr-x--- 2 root wbpriv 4096 7月 3 11:18 /var/lib/samba/winbindd_privileged/
这可能会导致代理验证失败,日志消息类似如下:
[root@localhost ~]# tail /var/log/messages
... ...
Jul 2 11:35:27 proxy (ntlm_auth): Login for user [example]\[tsengyia]@station110] failed due to [winbind client not authorized to use winbindd_pam_auth_crap. Ensure
permissions on /var/lib/samba/winbindd_privileged are set correctly.]
Jul 2 11:35:27 proxy (ntlm_auth): [2012/07/02 11:35:27.365870, 0] utils/ntlm_auth.c:896(manage_squid_ntlmssp_request_int)
Jul 2 11:35:27 proxy (ntlm_auth): NTLMSSP BH: NT_STATUS_ACCESS_DENIED
2)添加新的权限,允许squid程序访问
建议不要使用chown、chmod来修改目录的基本属性和权限,否则可能导致winbind服务无法启动。
这里采用setfacl工具来为squid服务程序的运行用户(squid)添加访问权限。
[root@localhost ~]# setfacl -m user:squid:r-x /var/lib/samba/winbindd_privileged/
[root@localhost ~]# service squid reload
4. 在客户机中测试代理访问
为IE浏览器配置代理,并进行访问测试。
1)以域用户登录时
若访问测试用Web站点(192.168.4.105),无需再次验证(已经通过域认证);
在测试用Web服务器上,可以看到来自Squid代理服务器的访问记录。
2)未以域用户登录时
若访问测试用Web站点(192.168.4.105),浏览器会弹出登录框,必须以域用户验证后才能访问;
在测试用Web服务器上,同样可以看到来自Squid代理服务器的访问记录。
##############################################################################