Squid + Domain (AD) User Authentication的实施

1.6kviews

公司一直被GFW搞的很不爽,很多网站封了也就封了,可是facebook和Twiiter之类的就让人感到非常的不方便,不过也算是变相的产业

 

保护,我也认了,只是最近谷歌搬到香港之后被GFW盯住之后就变的很郁闷,一直是半死不活,搜个什么就被屏蔽,难道说捧起了新浪微博和人人开心之类的还不够,还要扶持一下度娘??不过这还真的有效,很多人都认命的去用度娘了,可是度娘实在是不争气啊,有谷歌的一半好我都可以忍,可现在看连10%都不如。。所以公司必须要在海外的分公司建一个代理来绕开GFW,只是这个代理虽然是内部的,但根据公司的管理体系和安全审计的需求,这个代理的使用也需要使用域用户授权,这个貌似简单的授权让我整整的忙活了一天!!

虽然网上有什么用OpenLDAP,Winbind,Samba之类的协助Squid进行域验证的方法,不过那些方法要么好老,要么扯出一堆不靠谱的程序来,觉得现在都2012年了,CentOS都出到第六版了,难道Squid还需要通过第三方来进行LDAP验证吗?查了一下谷歌,发现根本不需要了,直接用Squid自带的工具squid LDAP helper就可以了,非常的简单,几乎是几分钟的配置而已,非常高兴的跑到Proxy服务器上,看了一下,这个Squid LDAP Helper在,那剩下的无非是进行squid.conf的配置了。

之前让一个公司的同事尝试着做了一下,没成功,我上去打开squid.conf一看,基本上该配置的都配了,剩下的虽然缺少细节和安排,但主干的内容都在,那么按照自己的理解重新来一遍吧,先建立一个用于bind域控的用户,设好权限之后进行登录了一次,没有问题,用LDAP工具进行bind了一下,一切都好,接下来在DC的域下面的users OU里建立一个安全组:Proxy_Superusers,好了,现在开始修改squid.conf ,代码如下:

auth_param basic program /usr/lib/squid/squid_ldap_auth -R \
-v 3 \
-b "dc=company,dc=com" \
-D "cn=domainusername,ou=IT,dc=company,dc=com" \
-w "password" \
-f sAMAccountName=%s \
-h 10.10.10.10

auth_param basic children 5
auth_param basic realm Domain Authentication Proxy
auth_param basic credentialsttl 5 minutes

然后加入关于针对不同安全组的认证,毕竟每个安全组的权限是不一样的,灵活处理是非常重要的,这里我们就指派之前建立的那个安全组Proxy_Superusers,这个第一个组暂且称之为Superusers 。。

external_acl_type Superusers %LOGIN /usr/lib/squid/squid_ldap_group -R \
-v 3 \
-b "dc=company,dc=com" \
-D "cn=domainusername,ou=IT,dc=company,dc=com" \
-w "password" \
-f "(&(objectclass=person)(sAMAccountName=%v)(memberof=CN=%a,CN=Users,DC=company,DC=com))" \
-h 10.10.10.10

接下来就是设置ACL,和给予ACL允许 http_access的权限,当然这是很粗放的方式,等到授权认证通过之后,就必须添加详细的ACL来限制可是访问的站点和时间等。

acl All src 0/0
acl localnet proxy_auth REQUIRED src 10.10.0.0/16
acl SuperAccess external Superusers Proxy_Superusers

http_access allow SuperAccess

设置完就开始重启squid

service squid restart

然后浏览器修改Proxy知道我们设置的这个Proxy Server上,装入一个网页,跳出对话框,输入用户名和密码,点击OK,晕,又跳出一个对话框,还是要用户名和密码,以为输错了,输了三遍,终于发现有问题,赶紧跑到SSH窗口,进到/var/log/squid里看了一下cache.log,发现有个错误:squid_ldap_auth: WARNING, could not bind to binddn ‘Invalid credentials’,觉得很奇怪啊,这用户名和密码验证都没问题,怎么这里不行呢,网上狂查了一通,开了几十个窗口,发现居然没有一个文章或者帖子真正有人回答后解决过,晕死,难道说这是一个无解的问题吗,不应该啊?

既然知道了是授权的问题,那么涉及到授权的就两行:

-D "cn=domainusername,ou=IT,dc=company,dc=com" \
-w "password" \

密码肯定不能是错的,因为太简单了,不可能出错,那么就必须是这个 -D 后面的字符串有问题,这又有可能是什么问题呢?大小写吗,不应该啊,不过试试吧,把大小写试了个遍,不行,那会不会是空间空格的问题呢?又把空格都干掉,就这么试来试去的折腾了近两个小时,然后打开LDAP Brower工具,挂上域控,仔细去看这个用户,突然在这个用户的distinguishedName里看到

cn=userdisplayname,ou=IT,dc=company,dc=com"

第一个CN不是等于域用户的用户名,而是域用户的显示名,难道是这个问题吗?带着怀疑的心情,改了一下配置文件,一试,我去!!!!居然成功了,果真是这个问题,气死我了!!!白白的浪费了两个多小时的时间,唉。。

至此域验证的Squid终于配置成功了,接下来就是细化ACL的控制和安装Squid 的日志分析工具,这样能够对代理服务器进行有效的监控。

相关的文章

5 Responses to “Squid + Domain (AD) User Authentication的实施”

  1. warrior

    现在3.3.3版本验证组件名squid_ldap_auth 改名为 basic_ldap_auth
    并且默认编译没有LDAP Helper选项,

    另外我自己写笔记喜欢注解配置文件的每一行,特别是预计有别人会看的情况。就像这么简单的一行配置
    ++++++
    hoatname pc01
    ++++++

    我一般会这么写
    +++++++++++
    #配置主机名为pc01
    hostname pc01
    +++++++++++++

    然后你不以step by step的方式写,只能帮助与你一样基础的人,否则像“用LDAP工具进行bind了一下”这么简单的一句话都可能难住N多人。

    惊喜欢你回复的速度

  2. Bill

    @warrior
    哦。。最近还真没注意这些,我觉得Linux变动的很快,很多人和团队经常优化结构,所以网上的教程都要找最新的加上最近release的notes才可以,呵呵。。

    你的注释习惯很好,但我这不是教程,我这个博客只是想说域认证的时候用的display name,而不是user name,如果我写教程,我也向你学习。

Leave a Reply

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据