知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

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

发布时间:2014-09-05 17:05:38作者:知识屋

公司使用的代理服务器是基于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 administrator@COMPANY.COM

提示输入用户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服务器当然是再好不过了。

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜