公司一直被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 的日志分析工具,这样能够对代理服务器进行有效的监控。
太简单了能详细点吗?每一步。
你还想要怎么详细呢?我觉得该说的都说了啊。。
现在3.3.3版本验证组件名squid_ldap_auth 改名为 basic_ldap_auth
并且默认编译没有LDAP Helper选项,
另外我自己写笔记喜欢注解配置文件的每一行,特别是预计有别人会看的情况。就像这么简单的一行配置
++++++
hoatname pc01
++++++
我一般会这么写
+++++++++++
#配置主机名为pc01
hostname pc01
+++++++++++++
然后你不以step by step的方式写,只能帮助与你一样基础的人,否则像“用LDAP工具进行bind了一下”这么简单的一句话都可能难住N多人。
惊喜欢你回复的速度
@warrior
哦。。最近还真没注意这些,我觉得Linux变动的很快,很多人和团队经常优化结构,所以网上的教程都要找最新的加上最近release的notes才可以,呵呵。。
你的注释习惯很好,但我这不是教程,我这个博客只是想说域认证的时候用的display name,而不是user name,如果我写教程,我也向你学习。
我现在遇到一个问题解决不了,你能不能p2p帮我看看,QQ:23281396