zoukankan      html  css  js  c++  java
  • 与Windows AD实现透明验证的squid代理服务器

    在FreeBSD上搭建了一台squid代理服务器,与Windows 2003域实现透明的用户验证。也就是说,客户端如果以域用户登录的话,可以直接通过代理上网浏览;如果非域用户的话,则必须输入域用户密码后方可上网。
    网上虽然有这方面的介绍,但可能环境各不相同,所以不一定适用。我也是摸索了好几天才搞成功的,有些地方还是一知半解,将来慢慢研究。先把整个安装配置过程写下来,供需要的人多一种参考。
    操作系统是FreeBSD 7.2版。主机名是bsd1.abc.com;Kerberos5和OpenLDAP是必须的;其他好像没什么要求。
    Windows域名为abc.com,NetBIOS名是ABC

    一、配置Kerberos5
    1. Kerberos5的配置文件是/etc/krb5.conf,内容如下:
    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/lrb5kdc.log
    admin_server = FILE:/var/log/kadmind.log


    [libdefaults]
    default_realm = ABC.COM
      # Windows域名,必须大写

    # 如果FreeBSD所配置的是Windows域的DNS服务器,下面dns_lookup两项可以设为true,即自动通过DNS查询域控制器等信息;
    # 否则设为false,通过后面[realm]段的配置设定域控制器等信息
    dns_lookup_realm = false
    dns_lookup_kdb = false


    [realms]
    ABC.COM = {
    kdc = dc1.abc.com:88 dc2.abc.com:88   # 域控制器,可以写IP,多个dc之间以空格分开。如果前面的dns_lookup两项参数设为了true,则这个参数就不需要了。
    default_domain = ABC.COM # Windows域名,必须大写
    }


    2. 用kinit验证一下kerberos配置是否成功。顺利的话输入命令得到结果如下:
    bsd1# kinit administrator  (验证Windows域管理员administrator用户)
    administrator@ABC.COM's Password:  (输入administrator的密码)
    kinit: NOTICE: ticket renewable lifetime is 1 week (看见这一行的话,恭喜你,kerberos配置成功了)

    二、安装配置Samba
    我用的是3.3.4版,从Samba官方网站下载的源码包。——为什么不用FreeBSD自带的?——因为没搞定。

    1. 解压源码包,编译安装。很简单,大家都会吧
    bsd1# tar zxvf samba-3.3.4.tar.gz
    bsd1# cd samba-3.3.4/source
    bsd1# ./configure --with-ads --with-winbind  (--with-ads --with-winbind这两个参数是实现与Windows AD验证必须的)
    bsd1# make
    bsd1# make install


    2. Samba安装完成,开始配置samba。FreeBSD下的samba配置文件是/usr/local/samba/lib/smb.conf。内容如下:
    [global]
    netbios name = BSD1
      # 本机在Windows网络中的NetBIOS名
    workgroup = ABC   # Windows域的NetBIOS名
    realm = ABC.COM   # 域名,与之前krb5.conf中的一致
    server string = PROXY SERVER # 机器的说明信息,无关紧要
    encrypt passwords = yes
    security = ADS   # 使用AD验证
    wins server = 192.168.0.10
    # WINS服务器地址。根据网上资料,这个参数似乎不是必须的,但我之前一直搞不定,直到加上这条后才成功的。不明白……
    password server = dc1.abc.com dc2.abc.com #域控制器,多台之间用空格分开
    log level = 3
    log file = /var/log/samba/*m.log
    max log size = 50
    dns proxy = NO
    ldap ssl = NO
    idmap uid = 10000-20000
    idmap gid = 10000-20000
    winbind use default domain = YES
    # 启用winbind,这样才能实现透明的用户认证

    3. Samba配置完成,依次启动nmbd、smbd、winbindd
    bsd1# cd /usr/local/samba/sbin
    bsd1# ./nmbd -D
    bsd1# ./winbindd -D
    bsd1# ./smbd -D


    4. 将本机加入到Windows域
    bsd1# /usr/local/samba/bin/net ads join -U administrator
    需要输入administrator密码。如果成功的话就可以在Windows域管理工具中找到bsd1这个计算机帐户了。
    在本机中则可用下列命令确认:
    bsd1# /usr/local/samba/bin/wbinfo -t
    checking the trust secret via RPC calls succeeded
    (出现这句话就表明加入域成功了)
    bsd1# /usr/local/samba/bin/wbinfo -u  (这条命令可以列出域中的用户帐户)

    三、安装配置squid
    我用的是2.7STABLE6版本,从squid官方网站下载的源码包。

    1. 解压源码包,编译安装
    bsd1# tar zxvf squid-2.7.STABLE6.tar.gz
    bsd1# cd squid-2.7.STABLE6.tar.gz
    bsd1# ./configure --enable-auth=basic,ntlm
    (将basic和ntlm验证模块编译进来)
    bsd1# make
    bsd1# make install


    2. 安装squid完成。squid的初始化配置略(可参阅彭勇华译的《Squid中文权威指南》,我都是照着这个指南做的,除了winbind验证的部分。squid从2.6版起不再带winbind模块了,而是直接使用samba的winbind)。
    squid的配置文件是/usr/local/squid/etc/squid.conf,认证相关配置参数如下(其他参数略,请参阅《Squid中文权威指南》):

    # 指定使用samba的ntlm验证模块
    auth_param ntlm program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
    auth_param ntlm children 20
    auth_param basic program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-basic
    auth_param basic children 10
    auth_param basic realm Squid proxy-caching web server
    auth_param basic credentialsttl 2 hours

    acl all src 0/0
    acl NTLMUsers proxy_auth REQUIRED # 强制要求用户验证
    http_access allow all NTLMUsers  
    # 通过验证的用户则允许访问
    http_access deny all  # 其他的均禁止访问

    3. 启动squid
    bsd1# /usr/local/squid/sbin/squid
    好了,可以用客户端上网试试了。但是,失败。
    用户上网就会跳出要求输入用户名密码的对话框,输入了却通不过验证。

    检查log发现,是对/usr/local/samba/var/locks/winbindd_privileged没有访问权限,原来这个目录的owner是root,默认权限是750,而squid是以nobody权限运行的。
    把权限改为777试试,还是不行,奇怪。改回到750,再把目录的owner改为nobody,然后重启squid。哈哈,这下成功了!
    且慢高兴,重启服务器后发现又不行了,winbindd启动不了了,原来还是/usr/local/samba/var/locks/winbindd_privileged权限的问题。winbindd是以root权限启动的,而winbindd_privileged的owner已经改成了nobody。那就把所有者和所属组分别设为root和nobody:
    # chown -R root:nobody /usr/local/samba/var/locks/winbindd_privileged

    重新启动服务,这下总算好了。

  • 相关阅读:
    ROS 学习遇到的问题记录(持续更新)
    09.07 jQuery 随意整理
    JavaScript 随意整理3
    JavaScript 随意整理2
    css 随意整理 08.08
    html 随意整理
    vue day2
    vue day1
    【copy】必备之常用正则表达式 By 其他博主
    note.js 笔记第二课
  • 原文地址:https://www.cnblogs.com/studio313/p/1503691.html
Copyright © 2011-2022 走看看