公司使用的代理服务器是基于Linux系统的,经常会出现一些或多或少的问题。直接影响到用户正常的Internet访问。因为是以前的同事做的,再加上,本人一直忙于其它的项目,没时间去调整,优化。前不久,Linux系统突然无法进入GNU/GNOME桌面环境,促使我下定决心重新规划并部署一台符合当前应用环境需要的代理服务器系统来。
在部署之前,我们先来看看现有的代理服务器的系统环境:该代理服务器采用的是基于Redhat Linux 8.x操作系统的以NCSAR为认证模式的Squid 2.3 代理服务器。因系统比较陈旧,稳定性有所欠缺,同时还存在以下不足之处:
1. 因Squid配置的问题,系统无法自动释放Squid的Cache及日志所占用磁盘空间,经常会因为磁盘空间不足而导致Squid停止服务,需要人为的去删除cache及日志以释放磁盘空间。
2. 需要在代理服务器上,为不同的用户设置不同的密码,以前公司职员并不多,倒不是很麻烦,但,随着公司的发展,职员的数量大幅增加,加重了IT管理人员的工作负担,同时,也非常难以保证与Windows域账户的一致知性;
3. 客户端不能使用AD集成的账户认证模式,用户每次访问Internet都需要重复的输入用户名及密码,大大降低了用户使用感受。
4. 没有实现针对不同Internet访问群体,设置不同的用户权限;
5. 无法监督用户访问Internet的行为,直接影响到公司网络的正常商业行为。
据此,我们不难发现,此代理服务器需要经常对其进行维护,非常影响IT工作人员的工作效率。从公司现阶段的实际情况出发,对代理服务器的功能重新规划如下:
1. 能够在一点条件下,自动回收被Squid占用的磁盘空间;
2. 利用AD服务器上的用户账号信息对用户的身份进行验证,避免重复的设置用户信息;
3. 提供三种用户权限:
1. 拒绝所有权限;
2. 允许访问Internet,但不允许下载视频、音频、可执行文件等;
3. 不受限,可访问任意Internet资源;
4. IT管理人员可以查看用户访问Internet的日志,监督用户访问Internet的行为;
既然我们的目标已经非常明确了,我们就不再废话,开始主题吧!
I. 系统环境:
1. CentOS 5.0 Linux
2. squid-2.6.STABLE6-4.el5
3. samba-3.0.23c-2.el5.2.0.2
4. sarg-2.2.1-1.el5.rf
5. winbind
6. krb5
II. 修改kerberos 5身份验证服务的配置文件(非特殊说明,均工作在root用户模式下):
执行下列命令:
[root@proxy ~]# vim /etc/krb5.conf
修改后的krb5.conf为:
1[logging]
2 default = FILE:/var/log/krb5libs.log
3 kdc = FILE:/var/log/krb5kdc.log
4 admin_server = FILE:/var/log/kadmind.log
5
6[libdefaults]
7 default_realm = COMPANY.COM #默认的域名(Realm)
8 dns_lookup_realm = false
9 dns_lookup_kdc = false
10 ticket_lifetime = 24h
11 forwardable = yes
12
13[realms]
14 COMPANY.COM = {
15 kdc = adsrv.company.com:88 #此处指定KDC服务器的名称或IP地址
16 admin_server = adsrv.company.com:749 #此处指定管理服务器的名称或IP地址
17 default_domain = company.com #默认的域名(domain)
18 }
19
20[domain_realm] #domain与realm的对应关系
21 .company.com = COMPANY.COM
22 company.com = COMPANY.COM
23
24[kdc]
25profile = /var/kerberos/krb5kdc/kdc.conf
26
27[appdefaults]
28 pam = {
29 debug = false
30 ticket_lifetime = 36000
31 renew_lifetime = 36000
32 forwardable = true
33 krb4_convert = false
34 }
III. 利用Kinit工具测试krb5的设置是否正确
执行下列命令:
[root@proxy ~]# kinit [email protected]
提示输入用户administrator的密码,正确输入密码之后返回以下信息:
kinit: NOTICE: ticket renewable lifetime is 1 week
或直接返回到命令行状态,其它提示信息均可能是出错信息。请务必确认您的Linux系统与Windows域服务器的时间及时区设置一致,否则将无法正常与活动目录服务器正常通信。
IV. Samba配置
因为我们此处并不涉及到真正的samba服务器的配置,所以并没有将整个的配置内容放在这里,而仅仅只放了架设Squid代理服务器所需要的部分,如下所示:
1[global]
2idmap gid = 10000-20000
3idmap uid = 10000-20000
4password server = 192.168.21.21
5workgroup = COMPANY #域的NetBios名
6os level = 20
7encrypt passwords = yes
8security = ads #设置为Windows活动目录安全-ADS验证
9realm = COMPANY.COM #验证域realm,必须大写
10winbind use default domain = yes
以上列出来的项目均需要根据实际情况改动。
V. 通过ntlm验证程序来测试之前所做的配置是否正确
在做测试之前,如必要时,请重新启动Linux服务器。不过,你也可以尝试仅重新启动samba及winbind服务来达到同样的目的(呵呵……这得看运气!):
[root@proxy ~]# service winbind restart
[root@proxy ~]# service smb restart
重启系统或以上服务之后,执行以下命令:
[root@proxy ~]# ntlm_auth –username=administrator
提示输入用户administrator的密码,正确输入密码之后返回以下信息:
NT_STATUS_OK: NT_STATUS_OK (0x0)
当返回的结果如上面所描述的话,则说明域账号administrator已经通过了AD的认证。可以开始接下来的工作了。
VI. 配置NSS(Name Service Switch)
NSS是Name Service Switch的缩写,具体功能请参考维基百科中的解释http://en.wikipedia.org/wiki/Name_Service_Switch,具体配置如下:
passwd: files winbind
group: files winbind
其它部份无需改变。
VII. Squid的配置
既然是做代理服务器,Squid的设置当然是重中之重,下面,根据具体实现功能的不同,分别讲述Squid的设置:
1. 为Squid配置第三方身份验证程序
1#启用squid-2.5-ntlmssp做为ntlm验证模式的辅助协议
2auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
3auth_param ntlm children 5
4auth_param ntlm keep_alive on
5
6#启用squid-2.5-basic做为基本验证模式的辅助协议
7auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
8auth_param basic children 5
9auth_param basic realm Squid proxy-caching web server
10auth_param basic credentialsttl 2 hours
11auth_param basic casesensitive off
12
13#下面的这句参数是重点,保证了Squid可以针对不同的用户组进行不同的访问控制策略
14external_acl_type NT_global_group %LOGIN /usr/lib/squid/wbinfo_group.pl
2. 用户访问控制列表的设置
1#将AD中的internet全局组映射到ProxyUsers
2acl ProxyUsers external NT_global_group internet
3#将AD中的nolimitedinternet全局组映射到noLimited
4acl NoLimited external NT_global_group nolimitedinternet
5#此句保证了所有用户必须经过身份验证
6acl AuthenticatedUsers proxy_auth REQUIRED
7#定义不允许下载的文件类型
8acl InvalidFiles urlpath_regex -i \.mp3$ \.avi$ \.rmvb$ \.mpg$ \.rm$ \.wma$ \.wmv$ \.scr$ \.exe$ \.ocx$ \.dll$ \.com$
9#定义不允许访问的域名及IP地址,其存放于文件“denyDomain.list”与“denyIP.list”中
10acl denyDomain dstdomain "/etc/squid/denyDomain.list"
11acl denyIP dst "/etc/squid/denyIP.list"
12
13#允许NoLimited用户访问任意Internet资源
14http_access allow AuthenticatedUsers NoLimited
15http_access deny denyDomain
16http_access deny denyIP
17http_access deny InvalidFiles
18
19#禁止用户访问denyDomain.list以及denyIP.list中的域名及IP地址,并禁止下载InvalidFiles指定的文件类型
20http_access allow AuthenticatedUsers ProxyUsers
21acl all src 0.0.0.0/0.0.0.0
22acl manager proto cache_object
23acl localhost src 127.0.0.1/255.255.255.255
24acl to_localhost dst 127.0.0.0/8
25acl SSL_ports port 443
26acl Safe_ports port 80 # http
27acl Safe_ports port 21 # ftp
28acl Safe_ports port 443 # https
29acl Safe_ports port 70 # gopher
30acl Safe_ports port 210 # wais
31acl Safe_ports port 1025-65535 # unregistered ports
32acl Safe_ports port 280 # http-mgmt
33acl Safe_ports port 488 # gss-http
34acl Safe_ports port 591 # filemaker
35acl Safe_ports port 777 # multiling http
36acl CONNECT method CONNECT
请注意此配置中的两条语句的位置。第一条“http_access allow AuthenticatedUsers NoLimited”,第二条“http_access allow AuthenticatedUsers ProxyUsers”,此两条语句都是将权限应用到用户组,但不同的是位置,在Squid的ACL配置语句中,先后顺序决定了其权限的不同。大家一定要多注意,细细去揣摩。
VIII. 更改winbind管道的权限
一定不能忘记这一点,没有winbind管道的足够的权限,系统是没办法对用户的身份进行验证的。其命令如下:
[root@proxy ~]# chown –R root:squid /var/cache/samba/winbindd_privileged
[root@proxy ~]# chmod –R 750 /var/cache/samba/winbindd_privileged
IX. 重启所有相关服务
命令如下:
[root@proxy ~]# service smb restart
[root@proxy ~]# service winbind restart
[root@proxy ~]# service squid restart
到此为止,我们已经成功地完成了squid代理服务器的配置。接下来,我们还需要给予IT管理员查看并监督用户访问Internet行为的能力。
X. Sarg的安装与配置
为了简单起见,我们直接下载二进制的安装包,执行下列命令获得二进制安装包:
[root@proxy ~]# http://dag.wieers.com/rpm/packages/sarg/sarg-2.2.1-1.el5.rf.i386.rpm
安装当然更简单了啦,没什么好说的,执行下列命令即可:
[root@proxy ~]# rpm –Uvh sarg-2.2.1-1.el5.rf.i386.rpm
安装完后,重新启动一下Apache服务器当然是再好不过了。