Squid代理的用户认证(基本认证、集成Windows域认证)

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代理服务器的访问记录。
 
##############################################################################

你可能感兴趣的:(Linux)