公司使用的代理服務器是基於Linux系統的,常常會出現一些或多或少的問題。直接影響到用戶正常的Internet訪問。由於是之前的同事作的,再加上,本人一直忙於其它的項目,沒時間去調整,優化。前不久,Linux系統忽然沒法進入GNU/GNOME桌面環境,促使我下定決心從新規劃並部署一臺符合當前應用環境須要的代理服務器系統來。linux
在部署以前,咱們先來看看現有的代理服務器的系統環境:該代理服務器採用的是基於Redhat Linux 8.x操做系統的以NCSAR爲認證模式的Squid 2.3 代理服務器。因系統比較陳舊,穩定性有所欠缺,同時還存在如下不足之處:ios
1. 因Squid配置的問題,系統沒法自動釋放Squid的Cache及日誌所佔用磁盤空間,常常會由於磁盤空間不足而致使Squid中止服務,須要人爲的去刪除cache及日誌以釋放磁盤空間。web
2. 須要在代理服務器上,爲不一樣的用戶設置不一樣的密碼,之前公司職員並很少,倒不是很麻煩,但,隨着公司的發展,職員的數量大幅增長,加劇了IT管理人員的工做負擔,同時,也很是難以保證與Windows域帳戶的一致知性;vim
3. 客戶端不能使用AD集成的帳戶認證模式,用戶每次訪問Internet都須要重複的輸入用戶名及密碼,大大下降了用戶使用感覺。安全
4. 沒有實現針對不一樣Internet訪問羣體,設置不一樣的用戶權限;服務器
5. 沒法監督用戶訪問Internet的行爲,直接影響到公司網絡的正常商業行爲。網絡
據此,咱們不難發現,此代理服務器須要常常對其進行維護,很是影響IT工做人員的工做效率。從公司現階段的實際狀況出發,對代理服務器的功能從新規劃以下:app
1. 可以在一點條件下,自動回收被Squid佔用的磁盤空間;dom
2. 利用AD服務器上的用戶帳號信息對用戶的身份進行驗證,避免重複的設置用戶信息;ide
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 administrator@COMPANY.COM
提示輸入用戶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服務器固然是再好不過了。