作者 主題: [分享]透過SAMBA3的Winbind服務使用Windows DC認證squid proxy使用者  (閱讀 16937 次)

0 會員 與 1 訪客 正在閱讀本文。

Jishon

  • 榮譽博士
  • 活潑的大學生
  • ***
  • 文章數: 321
    • 檢視個人資料
Win2000 AD + Samba 3 + Squid Proxy
Jishon (jishon@pchome.com.tw)
歡迎轉載,但請務必保留原出處和作者

前言:
      Squid穩定及強大的功能是其受歡迎的原因, 但在與Windows AD網域整合以提供使用者認證上卻一直是令人頭大的問題, 現在藉由整合samba的winbind,這個問題既可迎刃而解, 也讓您的squid認證方式更加彈性!

目的:
      認證AD網域使用者身份, 提供NT Challenge認證, 配合transparent proxy讓登入AD網域使用者開啟IE時自動登入Squid, 至於Netscape及其他使用plain text的瀏灠器仍然需手動輸入帳號及密碼

環境:
Mandrake 9.2
Samba-3.0.2 (請勿使用3.0.1, 如果使用smb時client端會無法登入)
Squid-2.5STABLE4-1mdk
Perl 5.8.1
Shellwords.pl ( Redhat的perl已內建,  Mandrake請另外安裝)
Authen::Smb (Perl Module請Redhat另行安裝)
libkrb51-1.3-3mdk (Redhat應是krb5-libs)
Windows 2000 AD Native Domain

安裝方式:

安裝SAMBA, 將squid主機加入AD網域成為member server
1.這邊使用samba-3.0.2的SRC.RPM檔
# rpm -i samba-3.0.2.xx.src.rpm
修改/usr/src/RPM/SPECS/samba3.spec
在CFLAGS="$RPM_OPT_FLAGS $EXTRA" ./configure \這段最後加上
代碼: [選擇]
--with-winbind \
--with-winbind-auth-challenge

重編samba
# rpmbuild --bb samba3.spec
安裝
# rpm -Uvh samba-3.0.2.xx.rpm

2.修改smb.conf 在global區加入
代碼: [選擇]
workgroup = NTDOMAIN
realm = NTDOMAIN.COM            
security = ADS                      #AD網域模式
password server = DC           #你的Domain Controller
encrypt passwords = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template shell = /bin/bash              #選擇性
template homedir = /home/%D/%U
winbind use default domain = yes

3.修改krb5.conf
代碼: [選擇]
[realms]
NTDOMAIN.COM = {  # 注意 : NTDOMAIN.COM要大寫!!
kdc = dc.ntdomain.com # 你的DC
}

4.將主機加入網域
# net ads join -U adminuser%password (具有加入網域權限使用者)
5.修改/var/lib/samba/winbindd_privileged的目錄權限為750, 群組squid, 讓squid可以讀取winbind的socket.
6. 設定與DC溝通時的使用者
# wbinfo --set-auth-user=user%password (具有一般權限使用者即可)
7.啟動winbind
# service winbind start

修改Squid設定
1.重編squid, 以source rpm為例
# rpm -i squid-2.5STABLE4-1mdk.src.rpm
修改/usr/src/SPECS/squid.spec
代碼: [選擇]
--enable-auth=ntlm,basic \
--enable-basic-auth-helpers=winbind \
--enable-ntlm-auth-helpers=winbind \
--enable-external-acl-helpers="winbind_group,wbinfo_group"

並在%files加入
代碼: [選擇]
%attr(755,root,squid) %{_libexecdir}/wbinfo_group* # 為了找出這行可累了>_<
# rpmbuild --bb squid.spec
# rpm -Uvh squid-2.5STABLE4-1mdk.i586.rpm

2.修改squid.conf , 這邊只介紹重點, 其餘請自行參考相關文章
代碼: [選擇]
# NT challenge Authentication for IE
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 20 minutes

# Plain Text Authentication for others
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

#
external_acl_type NT_global_group ttl=300 %LOGIN /usr/lib/squid/wbinfo_group.pl

#
acl UserGroup external NT_global_group "/etc/squid/usergroup"

# 允許該群組者存取
http_access allow UserGroup


3.為了讓程式可以檢驗複數群組,並對應Samba3.0.2(wbinfo -r結果與前版不同)需動手修改/usr/lib/squid/wbinfo_group.pl
代碼: [選擇]

#!/usr/bin/perl -w
#
# external_acl helper to Squid to verify NT Domain group
# membership using wbinfo
#
# This program is put in the public domain by Jerry Murdock
# <jmurdock@itraktech.com>. It is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Author:
#   Jerry Murdock <jmurdock@itraktech.com>
#
# Version history:
#   2002-07-05 Jerry Murdock <jmurdock@itraktech.com>
#               Initial release
#
#   2003-12-16 Jim Barber
#               Added mutiple Group check in Group file

# external_acl uses shell style lines in it's protocol
require 'shellwords.pl';

# Disable output buffering
$|=1;

sub debug {
        # Uncomment this to enable debugging
        # print STDERR "@_\n";
}

#
# Check if a user belongs to a group
#
sub check {
        local($user, @group) = @_;
        local($group);
        foreach $group (@group)
        {
        $groupSID = `wbinfo -n "$group"`;
        chop  $groupSID;
        $groupGID = `wbinfo -Y "$groupSID"`;
        chop $groupGID;
        &debug( "User:  -$user-\nGroup: -$group-\nSID:   -$groupSID-\nGID:   -$roupGID-");
        return 'OK' if(`wbinfo -r \Q$user\E` =~ /^$groupGID$/m);
        }
        return 'ERR';
}

#
# Main loop
#
while (<STDIN>) {
        chop;
        &debug ("Got $_ from squid");
        ($user, @group) = &shellwords;
        $ans = &check($user, @group);
        &debug ("Sending $ans to squid");
        print "$ans\n";
}


4.建立/etc/squid/usergroup檔, 並加入允許存取squid之AD群組, 內容如
代碼: [選擇]
Domain Admins
Webusers

5.service squid restart


用戶端IE設定:
這邊假設使用已使用Transparent Proxy
預設狀態下IE X.X(小弟忘了)即使用NT-Challenge為登入模式.不需另外修改
Sendmail, BIND 惡補中.....

ryuse

  • 憂鬱的高中生
  • ***
  • 文章數: 103
    • 檢視個人資料
抱歉  請教  Dr. Jishon

IE  的設定選項中 "Http 1.1 透過Proxy 連線"

需要啟動嗎....

小弟前設過一個方式也是 NTLM Auth,  但是 Client 端 , windows 2000 IE
"Http 1.1 透過Proxy 連線"  預設是  Not Enable

需要把他打勾後才可以...
不知  Dr. Jishon 此方法 可否免除 Client  IE  打勾的 步驟
如果可以..小弟就考慮馬上更換了...
可否麻煩 學長  指教一下.....

aaron

  • 活潑的大學生
  • ***
  • 文章數: 212
  • 性別: 男
    • 檢視個人資料
引述: "ryuse"
抱歉  請教  Dr. Jishon

IE  的設定選項中 "Http 1.1 透過Proxy 連線"

需要啟動嗎....

小弟前設過一個方式也是 NTLM Auth,  但是 Client 端 , windows 2000 IE
"Http 1.1 透過Proxy 連線"  預設是  Not Enable

需要把他打勾後才可以...
不知  Dr. Jishon 此方法 可否免除 Client  IE  打勾的 步驟
如果可以..小弟就考慮馬上更換了...
可否麻煩 學長  指教一下.....


可以把port 80都拉去給proxy,這就不管用戶有沒有打勾。
VMware ESXi & VMware Server & XenServer & VirtualBox

ryuse

  • 憂鬱的高中生
  • ***
  • 文章數: 103
    • 檢視個人資料
Dear  Dr. Jishon  

  小弟 先裝了一個  測試環境
  小弟是裝  Centos 4.3
  使用 內附的 samba 3.0.10-1.4E.6.2
 

  對於下面的這一步有點疑惑
1.  
修改/var/lib/samba/winbindd_privileged的目錄權限為750, 群組squid, 讓squid可以讀取winbind的socket.

小弟沒有看到 上面這個目錄  
只有 /var/lib
想請問該目錄要自己建立嗎



小弟目前測試 以下指令都 ok
#ntlm_auth --username=administrator
password:
NT_STATUS_OK: Success (0x0)

#wbinfo -g
BUILTIN\System Operators
BUILTIN\Replicators
BUILTIN\Guests
BUILTIN\Power Users
BUILTIN\Print Operators
BUILTIN\Administrators
BUILTIN\Account Operators
BUILTIN\Backup Operators
BUILTIN\Users
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Cert Publishers
Domain Admins
Domain Users
Domain Guests
Group Policy Creator Owners
DnsUpdateProxy

#wbinfo -u
Administrator
Guest
TsInternetUser
krbtgt
centos43$
W2KSRV01$


2.  因為我並沒有修改 samba.src 的packge
     想請問要下那個指令  可以知道
     原始的  configure 的參數....
     

謝謝學長的指教

ryuse

  • 憂鬱的高中生
  • ***
  • 文章數: 103
    • 檢視個人資料
Sorry 我找到了

改在/var/cache/samba/winbindd_privileged

Jishon

  • 榮譽博士
  • 活潑的大學生
  • ***
  • 文章數: 321
    • 檢視個人資料
1.版本不同位置會有差異

2. 看samba當初編譯參數請下
#smbd -b
Sendmail, BIND 惡補中.....