linux下實現針對windows域身份認證的代理服務器(好文2011-08-11)

公司使用的代理服務器是基於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 [email protected]

提示輸入用戶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服務器當然是再好不過了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章