Linux下实现针对Windows域身份认证的代理服务器

本文详细介绍了一台基于CentOS 5.0 Linux系统的Squid代理服务器的配置过程,包括系统环境准备、Kerberos身份验证配置、Samba设置、Squid配置等关键步骤。

  口水熊工作的公司使用的代理服务器是基于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-<?xml:namespace prefix = st1 />3.0.23c-2.el5.2.0.2

4.      sarg-2.2.1-1.el5.rf

5.      winbind

6.      krb5

II. 修改kerberos 5身份验证服务的配置文件(非特殊说明,均工作在root用户模式下):

  执行下列命令:

None.gif [ root@proxy ~ ] # vim /etc/krb5.conf

修改后的krb5.conf为:

 1 None.gif [ logging ]
 2 None.gif default  =  FILE:/var/log/krb5libs.log
 3 None.gif kdc  =  FILE:/var/log/krb5kdc.log
 4 None.gif admin_server  =  FILE:/var/log/kadmind.log
 5 None.gif
 6 None.gif [ libdefaults ]
 7 None.gif default_realm  =  COMPANY.COM              #默认的域名(Realm)
 8 None.gif dns_lookup_realm  =  false
 9 None.gif dns_lookup_kdc  =  false
10 None.gif ticket_lifetime  =  24h
11 None.gif forwardable  =  yes
12 None.gif
13 None.gif [ realms ]
14 None.gif COMPANY.COM  =  {
15 None.gif kdc  =  adsrv.company.com: 88                #此处指定KDC(密钥分配中心)服务器的名称或IP地址,一般都在AD服务器上
16 None.gif admin_server  =  adsrv.company.com: 749      #此处指定管理服务器的名称或IP地址
17 None.gif default_domain  =  company.com             #默认的域名(domain)
18 None.gif }
19 None.gif
20 None.gif [ domain_realm ]                              #domain与realm的对应关系
21 None.gif .company.com  =  COMPANY.COM 
22 None.gif company.com  =  COMPANY.COM
23 None.gif
24 None.gif [ kdc ]
25 None.gifprofile  =  /var/kerberos/krb5kdc/kdc.conf
26 None.gif
27 None.gif [ appdefaults ]
28 None.gif pam  =  {
29 None.gif   debug  =  false
30 None.gif   ticket_lifetime  =   36000
31 None.gif   renew_lifetime  =   36000
32 None.gif   forwardable  =  true
33 None.gif   krb4_convert  =  false
34 None.gif }

III. 利用Kinit工具测试krb5的设置是否正确

 

  执行下列命令:

None.gif [ root@proxy ~ ] # kinit administrator@COMPANY.COM

  提示输入用户administrator的密码,正确输入密码之后返回以下信息:

None.gif kinit: NOTICE: ticket renewable lifetime is  1  week

  或直接返回到命令行状态,其它提示信息均可能是出错信息。请务必确认您的Linux系统与Windows域服务器的时间及时区设置一致,否则将无法正常与活动目录服务器正常通信。

IV. Samba配置

  因为我们此处并不涉及到真正的samba服务器的配置,所以并没有将整个的配置内容放在这里,而仅仅只放了架设Squid代理服务器所需要的部分,如下所示:

 1 None.gif [ global ]
 2 None.gifidmap gid  =   10000 - 20000
 3 None.gifidmap uid  =   10000 - 20000
 4 None.gifpassword server  =   192.168.21.21
 5 None.gifworkgroup  =  COMPANY                       #域的NetBios名
 6 None.gifos level  =   20
 7 None.gifencrypt passwords  =  yes
 8 None.gifsecurity  =  ads                            #设置为Windows活动目录安全-ADS验证
 9 None.gifrealm  =  COMPANY.COM                       #验证域realm,必须大写
10 None.gifwinbind use default domain  =  yes

  以上列出来的项目均需要根据实际情况改动。

V.     通过ntlm验证程序来测试之前所做的配置是否正确

在做测试之前,如必要时,请重新启动Linux服务器。不过,你也可以尝试仅重新启动samba及winbind服务来达到同样的目的(呵呵……这得看运气!):

None.gif [ root@proxy ~ ] # service winbind restart
None.gif
[ root@proxy ~ ] # service smb restart

  重启系统或以上服务之后,执行以下命令:

None.gif [ root@proxy ~ ] # ntlm_auth –username = administrator

  提示输入用户administrator的密码,正确输入密码之后返回以下信息:

None.gif 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,具体配置如下:

None.gif passwd: files winbind
None.gifgroup: files winbind

  其它部份无需改变。

VII. Squid的配置

  既然是做代理服务器,Squid的设置当然是重中之重,下面,根据具体实现功能的不同,分别讲述Squid的设置:

1.     为Squid配置第三方身份验证程序

 1 None.gif #启用squid- 2.5 -ntlmssp做为ntlm验证模式的辅助协议
 2 None.gifauth_param ntlm program /usr/bin/ntlm_auth --helper-protocol = squid- 2.5 -ntlmssp
 3 None.gifauth_param ntlm children  5
 4 None.gifauth_param ntlm keep_alive on
 5 None.gif
 6 None.gif#启用squid- 2.5 -basic做为基本验证模式的辅助协议
 7 None.gifauth_param basic program /usr/bin/ntlm_auth --helper-protocol = squid- 2.5 -basic
 8 None.gifauth_param basic children  5
 9 None.gifauth_param basic realm Squid proxy-caching web server
10 None.gifauth_param basic credentialsttl  2  hours
11 None.gifauth_param basic casesensitive off
12 None.gif
13 None.gif#下面的这句参数是重点,保证了Squid可以针对不同的用户组进行不同的访问控制策略
14 None.gifexternal_acl_type NT_global_group %LOGIN /usr/lib/squid/wbinfo_group.pl

2.     用户访问控制列表的设置

 1 None.gif #将AD中的internet全局组映射到ProxyUsers
 2 None.gifacl ProxyUsers external NT_global_group internet
 3 None.gif#将AD中的nolimitedinternet全局组映射到noLimited
 4 None.gifacl NoLimited external NT_global_group nolimitedinternet
 5 None.gif#此句保证了所有用户必须经过身份验证
 6 None.gifacl AuthenticatedUsers proxy_auth REQUIRED
 7 None.gif#定义不允许下载的文件类型
 8 None.gifacl InvalidFiles urlpath_regex -i \.mp3$ \.avi$ \.rmvb$ \.mpg$ \.rm$ \.wma$ \.wmv$ \.scr$ \.exe$ \.ocx$ \.dll$ \.com$
 9 None.gif#定义不允许访问的域名及IP地址,其存放于文件“denyDomain.list”与“denyIP.list”中
10 None.gifacl denyDomain dstdomain  " /etc/squid/denyDomain.list "
11 None.gifacl denyIP dst  " /etc/squid/denyIP.list "
12 None.gif
13 None.gif#允许NoLimited用户访问任意Internet资源
14 None.gifhttp_access allow AuthenticatedUsers NoLimited
15 None.gifhttp_access deny denyDomain
16 None.gifhttp_access deny denyIP
17 None.gifhttp_access deny InvalidFiles
18 None.gif
19 None.gif#禁止用户访问denyDomain.list以及denyIP.list中的域名及IP地址,并禁止下载InvalidFiles指定的文件类型
20 None.gifhttp_access allow AuthenticatedUsers ProxyUsers
21 None.gifacl all src  0.0.0.0 / 0.0.0.0
22 None.gifacl manager proto cache_object
23 None.gifacl localhost src  127.0.0.1 / 255.255.255.255
24 None.gifacl to_localhost dst  127.0.0.0 / 8
25 None.gifacl SSL_ports port  443
26 None.gifacl Safe_ports port  80           # http
27 None.gifacl Safe_ports port  21           # ftp
28 None.gifacl Safe_ports port  443          # https
29 None.gifacl Safe_ports port  70           # gopher
30 None.gifacl Safe_ports port  210          # wais
31 None.gifacl Safe_ports port  1025 - 65535  # unregistered ports
32 None.gifacl Safe_ports port  280          # http-mgmt
33 None.gifacl Safe_ports port  488          # gss-http
34 None.gifacl Safe_ports port  591          # filemaker
35 None.gifacl Safe_ports port  777          # multiling http
36 None.gifacl CONNECT method CONNECT

  请注意此配置中的两条语句的位置。第一条“http_access allow AuthenticatedUsers NoLimited”,第二条“http_access allow AuthenticatedUsers ProxyUsers”,此两条语句都是将权限应用到用户组,但不同的是位置,在Squid的ACL配置语句中,先后顺序决定了其权限的不同。大家一定要多注意,细细去揣摩。

VIII. 更改winbind管道的权限

  一定不能忘记这一点,没有winbind管道的足够的权限,系统是没办法对用户的身份进行验证的。其命令如下:

None.gif [ root@proxy ~ ] # chown –R root:squid /var/cache/samba/winbindd_privileged
None.gif
[ root@proxy ~ ] # chmod –R  750  /var/cache/samba/winbindd_privileged

IX.   重启所有相关服务

  命令如下:

None.gif [ root@proxy ~ ] # service smb restart
None.gif
[ root@proxy ~ ] # service winbind restart
None.gif
[ root@proxy ~ ] # service squid restart

  到此为止,我们已经成功地完成了squid代理服务器的配置。接下来,我们还需要给予IT管理员查看并监督用户访问Internet行为的能力。

X.  Sarg的安装与配置

  为了简单起见,我们直接下载二进制的安装包,执行下列命令获得二进制安装包:

None.gif [ root@proxy ~ ] # wget http://dag.wieers.com/rpm/packages/sarg/sarg- 2.2.1 - 1 .el5.rf.i386.rpm

  安装当然更简单了啦,没什么好说的,执行下列命令即可:

None.gif [ root@proxy ~ ] # rpm –Uvh sarg- 2.2.1 - 1 .el5.rf.i386.rpm

  安装完后,重新启动一下Apache服务器当然是再好不过了。

转载于:https://www.cnblogs.com/williambear/archive/2007/08/06/844333.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值