终于有时间测试一下squid的域身份认证了,以前一直使用iptables来经过IP地址作的代理访问权限控制,而使用哪一种方法是根据各个公司内部的具体需求来决定的。web
首先明确一下需求,配置squid使它能支持域用户认证,若是可能的话,使用集成windows身份认证,这样域用户登陆计算机后,不须要输入密码就可使用,作到用户端透明,除非用户未使用域用户登陆才会弹出须要输入账户密码。windows
先放狗搜了一圈,大体肯定了方向,使用samba和krb5作账户认证,用squid来调用便可。app
一、本文使用CentOS5.6系统,先安装须要的软件dom
yum install squid samba ntp
测试
安装ntp是为了同步时间用的,若是squid的时间和域控制器时间相差太多,在如下配置中会出错。ui
同步时间的命令debug
ntpdate clock.redhat.com
代理
二、修改hosts文件,把计算机名以及计算机全名设置好,本例域为test.localcode
vi /etc/hosts 127.0.0.1 squid squid.test.local localhost
三、修改dns,使用域控制器的DNSserver
vi /etc/resolv.conf nameserver 192.168.1.100
四、修改/etc/krb5.conf,更改其中的域信息,注意域名必定要所有大写
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = TEST.LOCAL #改为你本身的域名 dns_lookup_realm = false dns_lookup_kdc = true #这里须要把原来的false改为true ticket_lifetime = 24h forwardable = yes [realms] TEST.LOCAL = { #改为你本身的域名 kdc = 192.168.1.100:88 #改为域控制器的IP admin_server = 192.168.1.100:749 #改为域控制器的IP default_domain = TEST.LOCAL #改为你本身的域名 } [domain_realm] .test.local = TEST.LOCAL #改为你本身的域名 test.local = TEST.LOCAL #改为你本身的域名 [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false }
修改完毕可使用如下名来验证,输入正确的密码就不报错(就是啥显示也没有),输入错误的就会报错
net ads join -U administrator@TEST.LOCAL
注意,这里的TEST.LOCAL也必需要所有大写,不然也会报错。
五、修改samba配置文件,如下只贴出来有变化或没有的
workgroup = TEST server string = squid security = ads realm = TEST.LOCAL password server = 192.168.1.100 winbind use default domain = yes encrypt passwords = yes idmap gid = 10000 - 20000 idmap uid = 10000 - 20000 os level = 20 dns proxy = no
六、加入域
net ads join -U administrator@TEST.LOCAL
而后输入密码就能够了,检测是否成功加入域的方法wbinfo -t #测试域链接 wbinfo -u #列出全部用户 wbinfo -g #列出全部组 tlm_auth --username=administrator #测试ntlm_auth验证密码
七、配置NSS,在/etc/nsswitch.conf找到如下两行,在后面添加winbind便可
passwd: files winbind group: files winbind
八、修改squid配置文件,由于要作组验证,还须要在域控制器上添加一个名为internet的组,并添加好相应人员
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=TEST.LOCAL\\internet auth_param ntlm children 5 auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=TEST.LOCAL\\internet auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 5 hours acl NTLMUsers proxy_auth REQUIRED http_access allow all NTLMUsers
里面有两个TEST.LOCAL替换成你本身的就好了,若是要替换组,把后面的internet替换成你本身的组就好了
记得在规则里看好配置,若是你以前就有了一条deny,那这些配置是不会生效的,须要把http_access deny all放到最后
另外,要让干净的squid配置文件无错,还须要增长如下几行cache_mgr admin@penglei.name visible_hostname squid.test.local
而后把squid服务重启一下就完成了,最后别忘了把squid、smb、winbind这几个服务设置成自动运行。