免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4634 | 回复: 5
打印 上一主题 下一主题

(原创)RHEL4.5+Samba3.0+W2k3E AD对Squid2.5访问进行认证 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-24 10:19 |只看该作者 |倒序浏览
在上一个实验中,使用了AD对访问Samba的用户实现了认证,同时也使得整个ADS中的用户可以对Samba上的资源实现共享和访问。
在这个例子中,情况稍微有点变化:
拓扑结构如下图所示:

DNS+KDC(W2K3E)
risrv.redhat.com
192.168.100.1

        
ws1.redhat.com                                                        
192.168.100.11
                                                                                Samba+Squid(Red Hat)
                                                                                sq.redhat.com
                                                        eth0:192.168.100.10                          eth1:1.1.1.1

                                                                                                                                
                                                                                                                WebServer
                                                                                                                1.1.1.10
        
在整个的拓扑中一共需要三台服务器和一台客户端,其中一台W2K3E作为AD域控制器在AD中存储所有域用户信息;而双网卡的Squid服务器需要对使用代理服务的Windows域用户进行自动身份验证。这种验证通过该服务器上的Samba使用Winbind获取域用户信息来进行。最终的目标是,只有Windows的AD域内的用户在加入域的计算机上才可以通过Squid访问外部的Web服务器,而不是在AD域内的用户和计算机因为无法通过Samba将验证信息传递到Squid,在使用Squid的时候就要求输入域用户帐号和密码。当然在没有域用户帐号和密码的情况下也就无法访问外网。

该实验的操作步骤大概如下:
在W2K3E上配置整个网络的DNS,并升级W2K3E的域控制器;
在Red Hat服务器上安装相关的软件包,并对Samba、krb5.conf、krb5kdc\*等文件进行配置;
启动Samba服务,将Red Hat服务器加入域内;
在Red Hat服务器上安装Squid服务,并配置ntlm_auth以及访问控制列表;
启动Squid服务;
在W2K3E上建立域用户
将客户端分别加入域和退出域设置浏览器的代理进行访问测试

现在安装AD的域控制器,该服务器的基本信息:
risrv.redhat.com/192.168.100.1
在该主机上配置dns服务,能够正反向解析sq.redhat.com/192.168.100.10
执行dcpromo来升级域控制器

下面开始在sq.redhat.com/192.168.100.10上配置samba和kerberos:
先配置基本环境:
[root@sq ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=sq.redhat.com
[root@sq ~]# ifconfig | grep inet
          inet addr:192.168.100.10  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe58:3f56/64 Scope:Link
          inet addr:1.1.1.1  Bcast:1.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::20c:29ff:fe58:3f60/64 Scope:Link
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
[root@sq ~]# hostname
sq.redhat.com
[root@sq ~]# cat /etc/resolv.conf
nameserver 192.168.100.1
search redhat.com
[root@sq ~]# sysctl -p
net.ipv4.ip_forward = 1
        
保证下面软件包的安装:
[root@sq ~]# rpm -qa | grep samba
samba-client-3.0.10-1.4E.11
system-config-samba-1.2.21-1.el4.1
samba-common-3.0.10-1.4E.11
samba-3.0.10-1.4E.11
samba-swat-3.0.10-1.4E.11
[root@sq ~]# rpm -qa | grep squid
squid-2.5.STABLE14-1.4E
[root@sq ~]# rpm -qa | grep krb5
krb5-workstation-1.3.4-47
krb5-auth-dialog-0.2-1
krb5-devel-1.3.4-47
krb5-server-1.3.4-47
krb5-libs-1.3.4-47
pam_krb5-2.1.8-1
红色标出的包尤其需要注意。完成安装之后,修改/etc/krb5.conf,最好先对该文件备份,修改的结果:
[root@sq ~]# cat /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 = REDHAT.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
default_tgs_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
default_tkt_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
preferred_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC

[realms]
REDHAT.COM = {
  kdc = risrv.redhat.com:88
  admin_server = risrv.redhat.com:749
  default_domain = redhat.com
}

[domain_realm]
.example.com = REDHAT.COM
example.com = REDHAT.COM

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}
红色部分基本上是在原来默认的基础上添加的。

利用samba-swat对Samba进行配置会比较容易,完成之后对smb.conf文件进行一小部分的修改即可。
[root@sq ~]# cat /etc/xinetd.d/swat
service swat
{
        disable = no
        port            = 901
        socket_type     = stream
        wait            = no
        only_from       = 192.168.100.254                        --这是可以使用samba-swat的主机
        user            = root
        server          = /usr/sbin/swat
        log_on_failure  += USERID
}
[root@sq ~]# /etc/rc.d/init.d/xinetd restart

在客户端192.168.100.254上开启浏览器,访问http://192.168.100.10:901以root身份访问swat配置页面,在wizard中将该服务器配置为域的成员服务器,但是不知道为什么samba-swat能修改的地方还是比较有限,即便提交了所有的修改之后还是要手动添加一部分内容。
下面是经过修改最终的/etc/samba/smb.conf文件:
[root@sq ~]# cat /etc/samba/smb.conf
# Samba config file created using SWAT
# from 192.168.100.254 (192.168.100.254)
# Date: 2007/10/24 10:42:31

# Global parameters
[global]
        netbios name = SQ
        workgroup = REDHAT
        realm = REDHAT.COM
        server string = Domain Proxy Server
        security = ADS
        password server = risrv.redhat.com
        hosts allow = 192.168.100.
        interfaces = 192.168.100.10
        username map = /etc/samba/smbusers
        log level = 3
        log file = /var/log/samba/%m.log
        max log size = 50
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#       printcap name = /etc/printcap
        dns proxy = No
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind use default domain = yes
        cups options = raw

[homes]
        comment = Home Directories
        read only = No
        browseable = No

#[printers]
#       comment = All Printers
#       path = /var/spool/samba
#       printable = Yes
#       browseable = No
上面红色部分为使用swat配置之后修改的内容。

完成这个修改后,修改/var/kerberos/krb5kdc/kdc.conf以及kadm5.acl文件内容,下面是修改的结果:
[root@sq ~]# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
v4_mode = nopreauth

[libdefaults]
default_realm = REDHAT.

[realms]
REDHAT. = {
  master_key_type = des-cbc-crc
  supported_enctypes = arcfour-hmac:normal arcfour-hmac:norealm arcfour-hmacnlyrealm des3-hmac-sha1:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
}
同时修改/var/kerberos/krb5kdc/kadm5.acl文件内容,因为在W2K3E上的域管理员是administrator,那
么需要修改管理员帐号名称:
[root@sq ~]# cat /var/kerberos/krb5kdc/kadm5.acl
*/administrator@REDHAT.COM      *

到此为止Samba配置基本完成。现在要将Samba服务器加入Windows域内,在进行此操作之前在Samba
服务器需要调整时间设置与Windows服务器的时间差不能大于5分钟,否则加入域内会失败。
如:
[root@sq ~]# kinit administrator@REDHAT.COM
Password for administrator@REDHAT.COM:
kinit(v5): Preauthentication failed while getting initial credentials
使用date –s 和clock –w调整完Red Hat时间或者调整Windows服务器时间之后,需要启动相关服务:
[root@sq ~]# service smb restart
[root@sq ~]# service winbind restart
[root@sq ~]# chkconfig smb on
[root@sq ~]# chkconfig winbind on
加入域内:
[root@sq ~]# kinit administrator@REDHAT.COM                --测试是否能够和域KDC联系
Password for administrator@REDHAT.COM:
输入域管理员密码没有任何显示,则表明一切OK。
然后执行:
[root@sq ~]# net ads join -U administrator@REDHAT.COM
administrator@REDHAT.COM's password:
[2007/10/24 14:50:07, 0] libads/ldap.c:ads_add_machine_acct(1405)
  ads_add_machine_acct: Host account for sq already exists - modifying old account
Using short domain name -- REDHAT
Joined 'SQ' to realm 'REDHAT.COM'
加入域内成功!
执行wbinfo –t 检测是否存在信任关系:
[root@sq ~]# wbinfo -t
checking the trust secret via RPC calls succeeded
执行wbinfo –u和wbinfo –g检测是否能够看到域内用户和组:
[root@sq ~]# wbinfo -u
Administrator
Guest
SUPPORT_388945a0
RISRV$
krbtgt
sq$
[root@sq ~]# wbinfo -g
BUILTIN\System Operators
BUILTIN\Replicators
………………………………

最后在squid上配置squid和ntlm_auth的会话来实现通过认证使用squid。
修改/etc/squid/squid.conf文件,主要是增加和修改关于ntlm_auth部分的信息:这是我修改的结果:
第一部分:
我注释了原来的auth_param部分,并添加了下面的信息:
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off                                                --这部分已经注释

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
#auth_param ntlm max_challenge_reuses 0
#auth_param ntlm max_challenge_lifetime 2 minutes
#auth_param ntlm use_ntlm_negotiate off
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic realm Domain Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
authenticate_cache_garbage_interval 10 seconds

# Credentials past their TTL are removed from memory
authenticate_ttl 0 seconds
然后在acl部分添加了使用认证的访问控制列表:
acl local src 192.168.100.0/24
acl auth  proxy_auth REQUIRED
并且在http_access部分增加了一个访问控制规则:
http_access allow localhost
http_access allow local auth
http_access deny all
miss_access allow all
icp_access deny all

完成之后初始squid的缓存并启动服务:
[root@sq ~]# squid -z
[root@sq ~]# service squid start
[root@sq ~]# chkconfig squid on
如果服务启动成功,ntlm_auth helper认证程序会将所有的认证信息记录到cache.log文件中。

最后进行测试:
测试的方法:
首先我在AD域控制器上创建一个OU在其中创建一个域用户jerrywjl。需要的话可以在域控制器上给
用户该用户分配一定的权限。
找一台客户端,系统可以是XP。配置主机名为ws1,配置IP地址为192.168.100.11,将DNS服务器指向192.168.100.1,然后使用刚才创建的帐号jerrywjl将该客户端加入redhat.com域内。重启以jerrywjl登录域内。
在加入成功之后,在samba服务器上通过winbind查询域内用户,发现多了两个帐号:
[root@sq ~]# wbinfo -u
Administrator
Guest
SUPPORT_388945a0
RISRV$
krbtgt
sq$
jerrywjl                                新建的域内帐号
WS1$                                  新加入的计算机帐号
之后配置该客户端的TCP/IP属性,保持网关为空;配置客户端浏览器,设置代理服务器的地址和端
口为Squid+Samba服务器的内网地址192.168.100.10和默认的3128端口。

在客户端上访问web服务器http://1.1.1.1,我事先做了测试页面,可以访问成功!
现在在客户端上将jerrywjl用户注销,然后以administrator身份登录本机(工作组),同样在浏览器中将代理的地址和端口指向192.168.100.10的3128端口,访问http://1.1.1.1的时候就出现一个要求输入用户名和密码的认证对话框。很显然因为机器不在域内,所以即便输入域的管理员帐号和密码也无法验证登录。

[ 本帖最后由 jerrywjl 于 2008-10-24 10:21 编辑 ]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之上海
日期:2016-05-05 09:45:14
2 [报告]
发表于 2008-10-24 10:32 |只看该作者
收藏一下,,对了,怎么还用SQUID2.5??

论坛徽章:
0
3 [报告]
发表于 2008-10-24 10:33 |只看该作者
原帖由 badb0y 于 2008-10-24 10:32 发表
收藏一下,,对了,怎么还用SQUID2.5??


那是因为RHEL4上面的SQUID就是2.5。

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
4 [报告]
发表于 2008-10-24 10:48 |只看该作者
支持原创

论坛徽章:
0
5 [报告]
发表于 2008-10-24 11:27 |只看该作者
呵呵,谢谢经验分享~~~

论坛徽章:
0
6 [报告]
发表于 2008-10-24 14:59 |只看该作者
楼主很热心  不错的帖子
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP