作者 主題: Squid和Active Directory 使用者驗證 整合  (閱讀 16836 次)

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

zoob

  • 鑽研的研究生
  • *****
  • 文章數: 776
    • 檢視個人資料
    • http://www.myunix.idv.tw
[前言]

在管理squid的管理員可能會遇到一個問題,就是有一天老闆心血來潮,叫你將目前有透過squid上網的使用者,整理一份上網清單出來,並要將使用者名稱顯示出來,如果你之前沒有用任何驗證方式來做到辨識使用者的話,相信你會用IP反查使用者反查的很辛苦。但又不可能用一個一個在squid server上建立帳號來做驗證,如果你們公司已經有使用Active Directory的話,可以利用它的LDAP功能來輕鬆達到你老闆的要求

環境  

RedHat 8.0
squid-2.4.STABLE7
OpenLdap 2.1.12 (20030107)

安裝步驟

1、首先先下載OpenLDAP( http://www.openldap.org )tarball file(這裡我是使用openldap-stable-20030107.tgz

2、安裝OpenLDAP Client(依下列步驟安裝)
代碼: [選擇]
./configure  --without-kerberos --without-cyrus-sasl --without-tls \
        --without-threads --disable-slapd --disable-slurpd \
        --disable-debug --disable-shared


代碼: [選擇]
make depend

代碼: [選擇]
make

代碼: [選擇]
make test

代碼: [選擇]
make install

3、測試ldap是否正常
(1)首先先修改/usr/local/etc/openldap/ldap.conf,增加下列敘述
代碼: [選擇]
BASE    DC=myunix,DC=adsldns.DC=org
URI     ldap://dc.myunix.adsldns.org


(2)測試與Ldap Server(DC)之間連線是否正常
代碼: [選擇]
/usr/local/bin/ldapsearch -x -D "cn=administrator,cn=Users,dc=myunix,dc=adsldns,dc=org" -W "proxyAddresses=smtp:vincent@myunix.adsldns.org"

Enter LDAP Password:

輸入Administrator的Password後,正確的出現你所要查詢的Infomation的話,就代表你和Ldap Server(DC)之間連線正常。

4、請先至 http://www.squid-cache.org/ 下載Source,在這裡我使用的是squid-2.4.STABLE7

5、安裝Squid步驟只是在./configure 時,多加一個--enable-auth-modules=LDAP,然後執行make及make install即可,其它的安裝步驟請參考其它教學文章,這裡我就不加以說明了。

6、修改squid.conf,相關的選項如下:

(1)authenticate_program
請設定為
代碼: [選擇]
authenticate_program /etc/squid/libexec/squid/squid_ldap_auth -p -R  -s sub -b dc=myunix,dc=adsldns,dc=org -D CN=Administrator,CN=Users,DC=myunix,DC=adsldns,DC=org -w password -f sAMAccountName=%s  dc.myunix.adsldns.org

squid_ldap_auth的指令說明如下

squid_ldap_auth [option] ldap_server_name

    -b basedn (REQUIRED)
    base dn under which to search
    -f filter
    search filter to locate user DN
    -u userattr
    username DN attribute
    -s base|one|sub
    search scope
    -D binddn
    DN to bind as to perform searches
    -w bindpasswd
    password for binddn
    -p
    persistent LDAP connection
    -R
    do not follow referrals
    -a never|always|search|find
    when to dereference aliases[/list]

    (2)authenticate_children
    設定你authenticate的process要啟動幾個

    (3)authenticate_ttl 1 hour
    設定你某一User驗證的cache時間多久

    (4)authenticate_ip_ttl 0 seconds
    設定你某一IP的驗證時間可維持多久,設定0的話,則無限制

    (5)authenticate_ip_ttl_is_strict on
    設定當你驗證成功後,在authenticate_ip_ttl的時間內,會拒絕其它IP對同一Username所要求的驗證

    (6)acl
    請新增一條acl,範例如下
    acl ldap proxy_auth REQUIRED

    (7)http_access
    範例如下(注意allow後面的名稱須與前面acl所定義的acl name相同)
    http_access allow ldap

    (8)proxy_auth_realm
    設定驗證方塊出現時,會顯示的訊息
    proxy_auth_realm Squid proxy-caching web server

    7、Start squid service

    8、請至Browser設定proxy的選項

    9、嘗試連到其他網頁,看看是否有要求輸入Username和Password的晝面出現

    註:此處發現一問題,就是你開啟瀏覽器時所瀏覽的第一個網頁,不論你輸入密碼是否正確均會無法連到正確的網頁,但是如果你輸入Username和Password正確的話,按「refresh」即可正常連到網頁去,這是因為你向squid發出第一次request時,因為尚未通過LDAP的驗證,故你會在access.log裡發現你第一次的request會被deny,而之後的網頁因驗證成功,所以才會request成功,這問題目前我還在想看看有沒有什麼辦法可解決。相反的如果你輸入Username和Password不正確時,均會被squid Deny。


    作者: zoob (vincent@myunix.adsldns.org)

    版權聲明:可以任意轉載,轉載時請務必標明原始出處和作者資訊

    duncanlo

    • SA 苦力組
    • 俺是博士!
    • *****
    • 文章數: 7312
      • 檢視個人資料
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #1 於: 2003-01-29 09:08 »
    group-ldap-auth
    http://group-ldap-auth.sourceforge.net/

    這邊也有一篇是用AD來作Squid Auth的!

    zoob

    • 鑽研的研究生
    • *****
    • 文章數: 776
      • 檢視個人資料
      • http://www.myunix.idv.tw
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #2 於: 2003-01-29 17:43 »
    引述: "duncanlo"
    group-ldap-auth
    http://group-ldap-auth.sourceforge.net/

    這邊也有一篇是用AD來作Squid Auth的!


    這個方法本來我也想使用,但是一直無法與AD整合成功(它的功能看起來比較完整)

    不知道有哪位大大可以試看看的   ^_^

    duncanlo

    • SA 苦力組
    • 俺是博士!
    • *****
    • 文章數: 7312
      • 檢視個人資料
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #3 於: 2003-01-29 20:49 »
    原則上以Read  AD Only為主的方式較保險...

    實在不太相信AD的穩定性...

    zoob

    • 鑽研的研究生
    • *****
    • 文章數: 776
      • 檢視個人資料
      • http://www.myunix.idv.tw
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #4 於: 2003-01-29 22:19 »
    引述: "duncanlo"
    原則上以Read  AD Only為主的方式較保險...

    實在不太相信AD的穩定性...


    嗯....沒錯,應該要建立一個只能query的帳號來做比較好

    天線

    • 榮譽博士
    • 憂鬱的高中生
    • ***
    • 文章數: 155
      • 檢視個人資料
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #5 於: 2003-02-21 13:27 »
    我記的w2k有兩種模式,忘了英文怎麼拼,就是一種有支援ntlm可以支援nt4,另外一種是存翠kerberos,只支援w2k

    兩種模式下,passwd在ldap中的位置好像不一樣

    前輩提供的方法兩種都可以嗎??

    zoob

    • 鑽研的研究生
    • *****
    • 文章數: 776
      • 檢視個人資料
      • http://www.myunix.idv.tw
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #6 於: 2003-02-24 22:25 »
    引述: "天線"
    我記的w2k有兩種模式,忘了英文怎麼拼,就是一種有支援ntlm可以支援nt4,另外一種是存翠kerberos,只支援w2k

    兩種模式下,passwd在ldap中的位置好像不一樣

    前輩提供的方法兩種都可以嗎??


    Hi...天線

    你要說的是否為Native mode & Mixed mode
    其實這2個模式只是差別在在Mixed mode下,win9x、nt、win2k都是以ntlm的方式來驗證

    而在Naive mode下,win9x、nt還是以ntlm方式驗證,而win2k則會以kerberos的方式驗證

    在此篇文章裡,只要你有建立一Active Directory的環境,均可以用LDAP的方式來驗證
    而squid另外也提供了NTLM的驗證模式,可用於Active Directory或是NT4的環境

    天線

    • 榮譽博士
    • 憂鬱的高中生
    • ***
    • 文章數: 155
      • 檢視個人資料
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #7 於: 2003-02-24 23:01 »
    喔....我的意思是..passwd的位置不同,我之前看ad的書上說的,現在有點忘了
    我再去借w2k光碟回來確認一下

    嗯這樣說吧,MIT kerberos v 會把password放在自己的db中,因為他不相信別人比他安全  :wink:  :wink:  

    所以我的問題是在Native mode下,password也是存放在ldap中嗎?還是只有user的attribute而沒有password ((手邊沒有w2k,所以也無法確定,所以想問清楚)),

    我看過幾種針對w2k Native mode的認證,都是借由pam_krb5來作而不是用ldap
    所以好奇想搞清楚
     :)  :)

    zoob

    • 鑽研的研究生
    • *****
    • 文章數: 776
      • 檢視個人資料
      • http://www.myunix.idv.tw
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #8 於: 2003-02-24 23:46 »
    引述: "天線"
    喔....我的意思是..passwd的位置不同,我之前看ad的書上說的,現在有點忘了
    我再去借w2k光碟回來確認一下

    嗯這樣說吧,MIT kerberos v 會把password放在自己的db中,因為他不相信別人比他安全  :wink:  :wink:  

    所以我的問題是在Native mode下,password也是存放在ldap中嗎?還是只有user的attribute而沒有password ((手邊沒有w2k,所以也無法確定,所以想問清楚)),

    我看過幾種針對w2k Native mode的認證,都是借由pam_krb5來作而不是用ldap
    所以好奇想搞清楚
     :)  :)


    PASSWORD的位置其實都放置在AD的Directory中
    你可能有點誤解.....
    NTLM(NTLM V5)和Kerberos V5只是中間驗證的過程不同,以及之間對各伺服器之間是否需持續認證的步驟不同。

    NTLM的過程如下:

    Client -> Logon process -> LSA -> Client Netlogon -> DC netlogon->DC Authenication Package -> DC SAM -> Domain Directory DB,之後依原步驟回去

    Kerberos v5如下:

    (1)Client -> Kerberos Client system -> Hash -> Digest(Long-Term Key) -> Time Stamp加密 + UserAccount -> KDC -> LDAP(password) -> Hash ->Digest(Long-Term Key)

    (2)比對Client產生出來的Digest和KDC產生出來的Digest是否相同

    (3)KDC產生一Session Key給KDC和Client

    其實以上的密碼均放置在AD的LDAP之中。

    而一般有人使用pam_krb5主要是因為安全因素(只做帳號、密碼認證),而LDAP也可做到SSL加密,在安全性上相差無幾

    我比較喜愛使用LDAP的原因是因為它還可得到許多的資訊(ex: e-mail address、home directory.....)。

    天線

    • 榮譽博士
    • 憂鬱的高中生
    • ***
    • 文章數: 155
      • 檢視個人資料
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #9 於: 2003-02-25 00:21 »
    喔.....謝謝.....

    謝謝前輩這麼費心的回答.

    我只是想知道password的位置,之前在做Heimdal和ldap整合時吃盡了苦頭
    而mit kerberos是不支援ldap,碰巧ad是採用mit kerberos來做的
    所以很好奇w2k的kerberos如何處理他的password

    謝謝前輩,還有請問password在ad的attribute的名稱叫甚麼ㄚ???

    還有...前輩都已經寫了這麼多kerberos的認證流程,不過TGT比較沒有提到
    何不也一起完整的寫出來,讓大家更了解kerberos認證

    先謝謝前輩囉

    zoob

    • 鑽研的研究生
    • *****
    • 文章數: 776
      • 檢視個人資料
      • http://www.myunix.idv.tw
    Squid和Active Directory 使用者驗證 整合
    « 回覆 #10 於: 2003-02-25 00:58 »
    引述: "天線"
    喔.....謝謝.....

    謝謝前輩這麼費心的回答.

    我只是想知道password的位置,之前在做Heimdal和ldap整合時吃盡了苦頭
    而mit kerberos是不支援ldap,碰巧ad是採用mit kerberos來做的
    所以很好奇w2k的kerberos如何處理他的password

    謝謝前輩,還有請問password在ad的attribute的名稱叫甚麼ㄚ???

    還有...前輩都已經寫了這麼多kerberos的認證流程,不過TGT比較沒有提到
    何不也一起完整的寫出來,讓大家更了解kerberos認證

    先謝謝前輩囉


    password基於安全的考量是放在AD的identity Sotre之中
    它並沒有attribute

    敘述如下

    Identity Store

    Typically, a directory is used as a repository of information about users and the resources they are authorized to use. Information stored in the directory might include profile information such as name, address, job position; access rights to specific resources; policies on how those resources can be used; and security data such as passwords. The identity store is not solely limited to user information; it also stores identity information about resources, computers, and applications, since security policies must also be applied to these assets. Integration of identity with authentication and authorization capabilities enables both logon authentication and authorization to resources in the directory.

    要深入瞭解Microsoft Active Directory的Identity Management
    請參考http://www.microsoft.com/technet/treeview/default.asp?url=/technet/ittasks/architect/idman.asp

    有關於Kerberos V5的流程,如果需要的話,我再整理出來給大家  ^_^