閆 梅
(山西機(jī)電職業(yè)技術(shù)學(xué)院信息工程系 山西 長(zhǎng)治 046011)
web服務(wù)器為了提供更為快捷、高效的服務(wù),提高時(shí)間和帶寬的使用效率,可以在瀏覽器和源服務(wù)器之間設(shè)置代理服務(wù)器,客戶端向位于中間位置的PRoxy代理服務(wù)器發(fā)起數(shù)據(jù)請(qǐng)求,代理服務(wù)器對(duì)接收到的數(shù)據(jù)信息進(jìn)行分析與處理,將客戶端請(qǐng)求的數(shù)據(jù)返回給瀏覽器[1]。可以將其理解為網(wǎng)絡(luò)信息的中轉(zhuǎn)站,尤其在大型高負(fù)載web站點(diǎn)的訪問中發(fā)揮著至關(guān)重要的作用,代理服務(wù)作為性能優(yōu)化的重要手段,客戶端在刷新瀏覽器時(shí),不用重新請(qǐng)求,而是從PRoxy服務(wù)中讀取,極大減輕原始服務(wù)器的負(fù)載。其主要作用有:①資源獲取:幫助客戶端向目的地獲取所需的資源;②提高訪問速度:代理服務(wù)器保存從原始服務(wù)器所獲取的資源,從而實(shí)現(xiàn)客戶端快速的獲取,達(dá)成節(jié)省帶寬以及加快內(nèi)部網(wǎng)絡(luò)對(duì)因特網(wǎng)WWW訪問速度的目的;③提高內(nèi)部網(wǎng)絡(luò)的安全性:代理服務(wù)器代替客戶端去獲取原始服務(wù)器資源,隱藏了客戶端真實(shí)信息,同時(shí)PRoxy代理服務(wù)一般架設(shè)在內(nèi)部網(wǎng)絡(luò)的網(wǎng)關(guān)之上,承擔(dān)部分防火墻的功能,對(duì)內(nèi)部網(wǎng)絡(luò)的安全起到防護(hù)作用。目前代理服務(wù)器有很多,本文將在Linux平臺(tái)下對(duì)Squid PRoxy代理服務(wù)的實(shí)現(xiàn)進(jìn)行研究。
代理服務(wù)器通常應(yīng)用于以下場(chǎng)景:客戶端數(shù)量巨大,且大部分需要www網(wǎng)絡(luò)服務(wù)和瀏覽靜態(tài)網(wǎng)站[2];PRoxy服務(wù)器被賦予了防火墻的功能;客戶端需要訪問傳輸速度很慢的網(wǎng)站,比如一些國(guó)外的網(wǎng)站等。
代理服務(wù)器作為一種既是服務(wù)端又是客戶端的中間程序,主要用于轉(zhuǎn)發(fā)客戶端系統(tǒng)的網(wǎng)絡(luò)訪問請(qǐng)求,具體工作流程如下,如圖1所示。
圖1 代理服務(wù)器的工作原理
①客戶端向代理服務(wù)器端發(fā)送一個(gè)請(qǐng)求的數(shù)據(jù)包;
②PRoxy服務(wù)器接收之后,首先查找數(shù)據(jù)緩存中是否包含客戶端請(qǐng)求的數(shù)據(jù)信息;
③如果數(shù)據(jù)緩存中存儲(chǔ)有客戶端請(qǐng)求的數(shù)據(jù)信息,PRoxy服務(wù)器將取出相關(guān)的數(shù)據(jù)信息;
④PRoxy服務(wù)器將取出的數(shù)據(jù)回傳給客戶端。
a.客戶端向代理服務(wù)器端發(fā)送一個(gè)請(qǐng)求的數(shù)據(jù)包;
b.代理服務(wù)器端接收之后,首先查找自己的數(shù)據(jù)緩存中是否包含客戶端請(qǐng)求的數(shù)據(jù)信息,通過檢查發(fā)現(xiàn)數(shù)據(jù)緩存中沒有用戶請(qǐng)求的數(shù)據(jù)信息;
c.數(shù)據(jù)緩存反饋信息給PRoxy服務(wù)器;
d.代理服務(wù)器接收到反饋信息后,繼而向遠(yuǎn)端的原始服務(wù)器發(fā)出數(shù)據(jù)請(qǐng)求信息;
e.遠(yuǎn)端服務(wù)器收到請(qǐng)求數(shù)據(jù)后,將請(qǐng)求的數(shù)據(jù)信息返回給PRoxy服務(wù)器;
f.PRoxy服務(wù)器將收到的信息回傳給客戶端,同時(shí)在數(shù)據(jù)緩存中進(jìn)行備份。
Squid軟件是Linux平臺(tái)下常用的代理服務(wù)器軟件,可以代理HTTP、FTP、GOPHER、SSL和WAIS協(xié)議,因其快速響應(yīng)、減少網(wǎng)絡(luò)阻塞、增強(qiáng)訪問控制、提高安全性的優(yōu)點(diǎn),同時(shí)可以針對(duì)特定的網(wǎng)站、用戶、網(wǎng)絡(luò)數(shù)據(jù)類型實(shí)施訪問控制,因此在UNIX及Linux操作系統(tǒng)下有廣泛的應(yīng)用。
2.1.1 檢查Squid軟件是否安裝
Squid具有下載安裝簡(jiǎn)單、配置靈活的特點(diǎn)[3]。以管理員身份登錄Linux操作系統(tǒng),在終端通過rpmqa|grep squid命令來檢查Squid軟件是否已經(jīng)安裝,顯示package squid is not installed則表示沒有安裝,否則會(huì)顯示具體的安裝包信息。
2.1.2 如果未安裝,則使用yum方式安裝
通過命令yum install squid -y來安裝Squid軟件,如果不使用參數(shù)-y,安裝過程中找到安裝包之后,會(huì)詢問Is this OK[y/d/N],需要手動(dòng)進(jìn)行選擇;使用-y參數(shù)可以保證在安裝過程提示自動(dòng)選擇全部為y,不再需要手動(dòng)選擇,安裝完成后提示compelte,表示軟件安裝完成。
安裝完成后執(zhí)行rpm -qa|grep squid命令來查看Squid軟件是否安裝成功,結(jié)果顯示squid的版本為squid3.5.20-17.e17_9.7.x86_64,如圖2所示。
圖2 安裝好的Squid版本
2.1.3 啟動(dòng)并開啟squid服務(wù)
驗(yàn)證squid成功安裝后,使用#systemctl start squid命令啟動(dòng)Squid,并使用#systemctl enable squid命令設(shè)置squid服務(wù)為自啟動(dòng)[4]。
#systemctl start squid
#systemctl enable squid
2.1.4 查看squid服務(wù)運(yùn)行狀態(tài)
squid服務(wù)開啟后,為驗(yàn)證服務(wù)是否處于開啟的狀態(tài),可通過systemctl status squid來查看squid服務(wù)是否處于active(running)運(yùn)行狀態(tài),如圖3所示。
圖3 squid運(yùn)行狀態(tài)
2.2.1 不帶用戶認(rèn)證的squid代理服務(wù)端的配置
默認(rèn)情況下squid本身不帶任何認(rèn)證程序,客戶端可以直接通過代理服務(wù)器訪問網(wǎng)絡(luò)資源,位于/etc/squid/目錄下的squid.conf是squid服務(wù)中最核心的配置文件。
①查看squid.conf配置文件:以管理員身份登錄linux服務(wù)器后,通過cd /etc/squid命令切換至squid.conf配置文件存儲(chǔ)的目錄下,使用ls命令查看該目錄下存在的文件及目錄信息,顯示存在squid.conf 文件,如圖4所示。
圖4 查看squid.conf文件
②編輯配置文件,設(shè)置監(jiān)聽端口和允許所有ip訪問:使用vi編輯器打開squid.conf配置文件,并通過i鍵切換至編輯模式。通過“#”號(hào)注釋http_access deny all此行代碼,并添加http_access allow all代碼允許所有ip訪問,同時(shí)設(shè)置端口為3712。
http_port 3712 #設(shè)置監(jiān)聽的端口,默認(rèn)為3128
#http_access deny all #注釋此行代碼
http_access allow all #添加,為允許所有ip
③添加代碼塊:在配置文件后面添加以下的代碼內(nèi)容,添加代碼后通過wq!保存并退出編輯模式,如圖8所示。
#配置squid進(jìn)程使用的內(nèi)存大小為64 MB
cache_mem 64 MB
#最大緩存的靜態(tài)資源對(duì)象,超過這個(gè)大小將不會(huì)緩存數(shù)據(jù)
maximum_object_size 6 MB cache_dir ufs /var/spool/squid 100 16 256
#日志文件存放的路徑
access_log /var/log/squid/access.log
#允許所有訪問
http_access allow all
#隨意填寫一個(gè)名字
visible_hostname squid.chao
④重新啟動(dòng)squid服務(wù),并檢查配置文件是否有誤:對(duì)squid.conf配置文件編輯后,需要使用systemctl resatrt squid命令重新啟動(dòng)squid服務(wù)。同時(shí),為了檢驗(yàn)squid.conf配置文件是否有錯(cuò)誤,通過squid -k parse命令進(jìn)行檢測(cè),若沒有出現(xiàn)ERROR就沒有問題,如圖5所示。
圖5 檢查配置文件
⑤查看squid監(jiān)聽的端口:配置文件檢測(cè)無誤后,通過netstat -ntlp命令查看squid監(jiān)聽的端口,輸入該命令提示command not found,發(fā)現(xiàn)Linux系統(tǒng)中缺少netstat對(duì)應(yīng)的包,這時(shí)需要通過yum install net-tools命令安裝net-tools工具,提示complete,表示工具安裝完成,如圖6所示。
圖6 net-tools工具安裝
安裝完成后,netstat即可正常使用,再次使用netstat -ntlp命令可查看到squid監(jiān)聽的端口3712,如圖7所示。
圖7 系統(tǒng)監(jiān)聽的端口
⑥關(guān)閉CentOS的防火墻:為了監(jiān)聽端口能夠正常訪問,可以通過#systemctl stop firewall.service和#systemctl disable firewall.service命令關(guān)閉防火墻,放行squid監(jiān)聽端口。
#systemctl stop firewall.service
#systemctl disable firewall.service
帶用戶認(rèn)證的squid代理服務(wù)端的配置
為了增加訪問的安全性,可以對(duì)其用戶身份信息進(jìn)行驗(yàn)證,本文采用Squid自帶的認(rèn)證程序ncsa來實(shí)現(xiàn)用戶認(rèn)證[5]。
由于用戶認(rèn)證需要訪問密碼的生成,需要使用到命令行工具h(yuǎn)tpassword,此工具可以生成訪問密碼,此命令是httpd-tools包的一部分。
⑦h(yuǎn)ttpd-tools工具的安裝:Centos可以直接使用yum install httpd-tools -y命令進(jìn)行安裝,當(dāng)提示“完畢”后,表示httpd-tools工具安裝完成,如圖8所示。
圖8 httpd-tools工具安裝完成
⑧添加認(rèn)證用戶并生成密碼文件:htpasswd生成的密碼和關(guān)聯(lián)的用戶名將存儲(chǔ)在指定的文件中,密碼將被加密,本文的賬號(hào)信息保存在/etc/squid/passwd文件下[6],這里的yan是用戶名,執(zhí)行命令后會(huì)提示設(shè)置yan用戶的密碼,輸入成功后,會(huì)提示已經(jīng)為yan這個(gè)用戶添加了密碼。
圖9 用戶設(shè)置密碼
⑨驗(yàn)證用戶密碼:為了驗(yàn)證密碼文件是否生效,使用命令/usr/lib64/squid/basic-ncsa_auth /etc/squid/passwd來進(jìn)行驗(yàn)證,輸入用戶名和密碼,若提示OK表示成功,如圖10所示。
圖10 驗(yàn)證用戶密碼
⑩配置squid.conf:在打開squid.conf配置文件中添加如下代碼塊:
#選擇認(rèn)證方式為basic,定義認(rèn)squid密碼文件與ncsa_auth文件位置
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
#認(rèn)證程序進(jìn)程數(shù)數(shù)量
auth_param basic children 5
#在使用PRoxy彈出來的提示框中的描述信息
auth_param basic realm Squid Bacsic Authentication
#認(rèn)證的有效時(shí)間
auth_param basic credentialsttl 2 hours
#允許認(rèn)證的用戶訪問
acl cangluan proxy_auth REQUIRED
#允許認(rèn)證的成員用戶訪問
http_access allow auth_users
?重新啟動(dòng)squid服務(wù):squid配置文件內(nèi)添加允許授權(quán)用戶訪問后,再次需要使用systemctl restart squid命令,重新啟動(dòng)squid服務(wù)使其生效。
在完成服務(wù)端的配置后,可通過客戶端的瀏覽器進(jìn)行驗(yàn)證,在對(duì)squid服務(wù)器端配置時(shí)發(fā)現(xiàn)系統(tǒng)就只有命令行界面,但是沒有圖形化界面,無法打開瀏覽器。
2.3.1 安裝圖形界面
為了使用圖形界面下的瀏覽器進(jìn)行測(cè)試,需要安裝系統(tǒng)的GNOME圖形界面,在命令行界面下使用yum grouplist命令列出本系統(tǒng)支持的圖形化界面有哪些,如圖11所示。
圖11 本系統(tǒng)支持的圖形化界面
研究人員選擇默認(rèn)的圖形化界面(GNOME Desktop),使用命令#yum groupinstall“GNOME Desktop” “Graphical Administration Tools”獲取并安裝CentOS默認(rèn)的圖形界面GNOME程序包,提示complete表示圖形界面安裝成功。
2.3.2 修改CentOS7默認(rèn)啟動(dòng)模式為圖形化模式
使用systemctl get-default命令提示multi-user.target,說明當(dāng)前默認(rèn)啟動(dòng)模式為命令行模式,使用systemctl set-default graphical.target修改默認(rèn)啟動(dòng)為GNOME界面模式[7]。
#systemctl get-default
#systemctl set-default graphical.target
systemctl get-default
#reboot
使用命令reboot重啟CentOS系統(tǒng),重啟之后就已經(jīng)切換到GUI圖形界面模式,通過對(duì)圖形化界面的設(shè)置,即可實(shí)現(xiàn)從命令行到圖形化界面的所有操作[8]。
2.3.3 不帶用戶認(rèn)證的客戶端配置
在圖形界面下打開火狐瀏覽器,通過“設(shè)置”找到“網(wǎng)絡(luò)設(shè)置”,單擊“設(shè)置”,在打開的網(wǎng)絡(luò)設(shè)置中,勾選“手動(dòng)配置代理”,設(shè)置HTTP代理為“127.0.0.1”端口為“3712”,同時(shí)勾選“也將次代理用于HTTPS”,完成代理的配置。嘗試用瀏覽器中訪問www.sxjdxy.org,頁(yè)面回顯查看的頁(yè)面信息,如圖12所示。
圖12 代理服務(wù)器的設(shè)置
在squid中位于/var/log/squid/access.log的日志文件會(huì)將HTTP響應(yīng)的關(guān)鍵信息記錄并存放其中,在GNOME桌面上打開終端,切換目錄至/var/log/squid,使用cat access.log查看日志文件[9],查看日志文件,可查看到瀏覽器訪問www.sxjdxy.org的記錄信息被保存到日志文件中,如圖13所示。
圖13 查看日志文件
2.3.4 帶用戶認(rèn)證的客戶端配置
在對(duì)瀏覽器進(jìn)行PRoxy設(shè)置后,當(dāng)使用瀏覽器訪問頁(yè)面的時(shí)候,會(huì)先彈出一個(gè)提示輸入用戶名和密碼的提示框[10],輸入用戶名和密碼即可訪問到www.sxjdxy.org頁(yè)面信息,如圖14所示。
圖14 帶用戶認(rèn)證訪問
通過在Linux平臺(tái)下從Squid的安裝、Squid服務(wù)器端的配置及客戶端的配置對(duì)Squid PRoxy代理服務(wù)的實(shí)現(xiàn)進(jìn)行了研究,客戶端從用戶認(rèn)證和非用戶認(rèn)證對(duì)代理服務(wù)器的訪問進(jìn)行了驗(yàn)證,借助于Squid代理服務(wù)器,客戶端獲得了自己所需要的信息,又沒有泄露自己的信息,提高了訪問效率和安全防護(hù)。