|
终于有时间测试一下squid的域身份认证了,之前一直使用iptables来通过IP地址做的代理访问权限控制,而使用哪种方法是根据各个公司内部的具体需求来决定的。
首先明确一下需求,配置squid使它能支持域用户认证,如果可能的话,使用集成windows身份认证,这样域用户登录计算机后,不需要输入密码就可以使用,做到用户端透明,除非用户未使用域用户登录才会弹出需要输入帐户密码。
先放狗搜了一圈,大致确定了方向,使用samba和krb5做帐户认证,用squid来调用即可。
1、本文使用CentOS5.6系统,先安装需要的软件
|
|
|
yum install squid samba ntp |
|
安装ntp是为了同步时间用的,如果squid的时间和域控制器时间相差太多,在以下配置中会出错。
同步时间的命令
2、修改hosts文件,把计算机名以及计算机全名设置好,本例域为test.local
|
|
|
vi /etc/hosts |
|
127.0.0.1 squid squid.test.local localhost |
|
3、修改dns,使用域控制器的DNS
|
|
|
vi /etc/resolv.conf |
|
nameserver 192.168.1.100 |
|
4、修改/etc/krb5.conf,更改其中的域信息,注意域名一定要全部大写
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
|
[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也必须要全部大写,否则也会报错。
5、修改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 |
|
6、加入域
|
|
|
net ads join -U administrator@TEST.LOCAL |
|
然后输入密码就可以了,检测是否成功加入域的方法
|
|
|
wbinfo -t #测试域连接 |
|
wbinfo -u #列出所有用户 |
|
wbinfo -g #列出所有组 |
|
tlm_auth --username=administrator #测试ntlm_auth验证密码 |
|
7、配置NSS,在/etc/nsswitch.conf找到以下两行,在后面添加winbind即可
|
|
|
passwd: files winbind |
|
group: files winbind |
|
8、修改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这几个服务设置成自动运行。
(责任编辑:IT) |