閆 梅
(山西機電職業技術學院信息工程系 山西 長治 046011)
web服務器為了提供更為快捷、高效的服務,提高時間和帶寬的使用效率,可以在瀏覽器和源服務器之間設置代理服務器,客戶端向位于中間位置的PRoxy代理服務器發起數據請求,代理服務器對接收到的數據信息進行分析與處理,將客戶端請求的數據返回給瀏覽器[1]。可以將其理解為網絡信息的中轉站,尤其在大型高負載web站點的訪問中發揮著至關重要的作用,代理服務作為性能優化的重要手段,客戶端在刷新瀏覽器時,不用重新請求,而是從PRoxy服務中讀取,極大減輕原始服務器的負載。其主要作用有:①資源獲取:幫助客戶端向目的地獲取所需的資源;②提高訪問速度:代理服務器保存從原始服務器所獲取的資源,從而實現客戶端快速的獲取,達成節省帶寬以及加快內部網絡對因特網WWW訪問速度的目的;③提高內部網絡的安全性:代理服務器代替客戶端去獲取原始服務器資源,隱藏了客戶端真實信息,同時PRoxy代理服務一般架設在內部網絡的網關之上,承擔部分防火墻的功能,對內部網絡的安全起到防護作用。目前代理服務器有很多,本文將在Linux平臺下對Squid PRoxy代理服務的實現進行研究。
代理服務器通常應用于以下場景:客戶端數量巨大,且大部分需要www網絡服務和瀏覽靜態網站[2];PRoxy服務器被賦予了防火墻的功能;客戶端需要訪問傳輸速度很慢的網站,比如一些國外的網站等。
代理服務器作為一種既是服務端又是客戶端的中間程序,主要用于轉發客戶端系統的網絡訪問請求,具體工作流程如下,如圖1所示。

圖1 代理服務器的工作原理
①客戶端向代理服務器端發送一個請求的數據包;
②PRoxy服務器接收之后,首先查找數據緩存中是否包含客戶端請求的數據信息;
③如果數據緩存中存儲有客戶端請求的數據信息,PRoxy服務器將取出相關的數據信息;
④PRoxy服務器將取出的數據回傳給客戶端。
a.客戶端向代理服務器端發送一個請求的數據包;
b.代理服務器端接收之后,首先查找自己的數據緩存中是否包含客戶端請求的數據信息,通過檢查發現數據緩存中沒有用戶請求的數據信息;
c.數據緩存反饋信息給PRoxy服務器;
d.代理服務器接收到反饋信息后,繼而向遠端的原始服務器發出數據請求信息;
e.遠端服務器收到請求數據后,將請求的數據信息返回給PRoxy服務器;
f.PRoxy服務器將收到的信息回傳給客戶端,同時在數據緩存中進行備份。
Squid軟件是Linux平臺下常用的代理服務器軟件,可以代理HTTP、FTP、GOPHER、SSL和WAIS協議,因其快速響應、減少網絡阻塞、增強訪問控制、提高安全性的優點,同時可以針對特定的網站、用戶、網絡數據類型實施訪問控制,因此在UNIX及Linux操作系統下有廣泛的應用。
2.1.1 檢查Squid軟件是否安裝
Squid具有下載安裝簡單、配置靈活的特點[3]。以管理員身份登錄Linux操作系統,在終端通過rpmqa|grep squid命令來檢查Squid軟件是否已經安裝,顯示package squid is not installed則表示沒有安裝,否則會顯示具體的安裝包信息。
2.1.2 如果未安裝,則使用yum方式安裝
通過命令yum install squid -y來安裝Squid軟件,如果不使用參數-y,安裝過程中找到安裝包之后,會詢問Is this OK[y/d/N],需要手動進行選擇;使用-y參數可以保證在安裝過程提示自動選擇全部為y,不再需要手動選擇,安裝完成后提示compelte,表示軟件安裝完成。
安裝完成后執行rpm -qa|grep squid命令來查看Squid軟件是否安裝成功,結果顯示squid的版本為squid3.5.20-17.e17_9.7.x86_64,如圖2所示。

圖2 安裝好的Squid版本
2.1.3 啟動并開啟squid服務
驗證squid成功安裝后,使用#systemctl start squid命令啟動Squid,并使用#systemctl enable squid命令設置squid服務為自啟動[4]。
#systemctl start squid
#systemctl enable squid
2.1.4 查看squid服務運行狀態
squid服務開啟后,為驗證服務是否處于開啟的狀態,可通過systemctl status squid來查看squid服務是否處于active(running)運行狀態,如圖3所示。

圖3 squid運行狀態
2.2.1 不帶用戶認證的squid代理服務端的配置
默認情況下squid本身不帶任何認證程序,客戶端可以直接通過代理服務器訪問網絡資源,位于/etc/squid/目錄下的squid.conf是squid服務中最核心的配置文件。
①查看squid.conf配置文件:以管理員身份登錄linux服務器后,通過cd /etc/squid命令切換至squid.conf配置文件存儲的目錄下,使用ls命令查看該目錄下存在的文件及目錄信息,顯示存在squid.conf 文件,如圖4所示。

圖4 查看squid.conf文件
②編輯配置文件,設置監聽端口和允許所有ip訪問:使用vi編輯器打開squid.conf配置文件,并通過i鍵切換至編輯模式。通過“#”號注釋http_access deny all此行代碼,并添加http_access allow all代碼允許所有ip訪問,同時設置端口為3712。
http_port 3712 #設置監聽的端口,默認為3128
#http_access deny all #注釋此行代碼
http_access allow all #添加,為允許所有ip
③添加代碼塊:在配置文件后面添加以下的代碼內容,添加代碼后通過wq!保存并退出編輯模式,如圖8所示。
#配置squid進程使用的內存大小為64 MB
cache_mem 64 MB
#最大緩存的靜態資源對象,超過這個大小將不會緩存數據
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
#隨意填寫一個名字
visible_hostname squid.chao
④重新啟動squid服務,并檢查配置文件是否有誤:對squid.conf配置文件編輯后,需要使用systemctl resatrt squid命令重新啟動squid服務。同時,為了檢驗squid.conf配置文件是否有錯誤,通過squid -k parse命令進行檢測,若沒有出現ERROR就沒有問題,如圖5所示。

圖5 檢查配置文件
⑤查看squid監聽的端口:配置文件檢測無誤后,通過netstat -ntlp命令查看squid監聽的端口,輸入該命令提示command not found,發現Linux系統中缺少netstat對應的包,這時需要通過yum install net-tools命令安裝net-tools工具,提示complete,表示工具安裝完成,如圖6所示。

圖6 net-tools工具安裝
安裝完成后,netstat即可正常使用,再次使用netstat -ntlp命令可查看到squid監聽的端口3712,如圖7所示。

圖7 系統監聽的端口
⑥關閉CentOS的防火墻:為了監聽端口能夠正常訪問,可以通過#systemctl stop firewall.service和#systemctl disable firewall.service命令關閉防火墻,放行squid監聽端口。
#systemctl stop firewall.service
#systemctl disable firewall.service
帶用戶認證的squid代理服務端的配置
為了增加訪問的安全性,可以對其用戶身份信息進行驗證,本文采用Squid自帶的認證程序ncsa來實現用戶認證[5]。
由于用戶認證需要訪問密碼的生成,需要使用到命令行工具htpassword,此工具可以生成訪問密碼,此命令是httpd-tools包的一部分。
⑦httpd-tools工具的安裝:Centos可以直接使用yum install httpd-tools -y命令進行安裝,當提示“完畢”后,表示httpd-tools工具安裝完成,如圖8所示。

圖8 httpd-tools工具安裝完成
⑧添加認證用戶并生成密碼文件:htpasswd生成的密碼和關聯的用戶名將存儲在指定的文件中,密碼將被加密,本文的賬號信息保存在/etc/squid/passwd文件下[6],這里的yan是用戶名,執行命令后會提示設置yan用戶的密碼,輸入成功后,會提示已經為yan這個用戶添加了密碼。

圖9 用戶設置密碼
⑨驗證用戶密碼:為了驗證密碼文件是否生效,使用命令/usr/lib64/squid/basic-ncsa_auth /etc/squid/passwd來進行驗證,輸入用戶名和密碼,若提示OK表示成功,如圖10所示。

圖10 驗證用戶密碼
⑩配置squid.conf:在打開squid.conf配置文件中添加如下代碼塊:
#選擇認證方式為basic,定義認squid密碼文件與ncsa_auth文件位置
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
#認證程序進程數數量
auth_param basic children 5
#在使用PRoxy彈出來的提示框中的描述信息
auth_param basic realm Squid Bacsic Authentication
#認證的有效時間
auth_param basic credentialsttl 2 hours
#允許認證的用戶訪問
acl cangluan proxy_auth REQUIRED
#允許認證的成員用戶訪問
http_access allow auth_users
?重新啟動squid服務:squid配置文件內添加允許授權用戶訪問后,再次需要使用systemctl restart squid命令,重新啟動squid服務使其生效。
在完成服務端的配置后,可通過客戶端的瀏覽器進行驗證,在對squid服務器端配置時發現系統就只有命令行界面,但是沒有圖形化界面,無法打開瀏覽器。
2.3.1 安裝圖形界面
為了使用圖形界面下的瀏覽器進行測試,需要安裝系統的GNOME圖形界面,在命令行界面下使用yum grouplist命令列出本系統支持的圖形化界面有哪些,如圖11所示。

圖11 本系統支持的圖形化界面
研究人員選擇默認的圖形化界面(GNOME Desktop),使用命令#yum groupinstall“GNOME Desktop” “Graphical Administration Tools”獲取并安裝CentOS默認的圖形界面GNOME程序包,提示complete表示圖形界面安裝成功。
2.3.2 修改CentOS7默認啟動模式為圖形化模式
使用systemctl get-default命令提示multi-user.target,說明當前默認啟動模式為命令行模式,使用systemctl set-default graphical.target修改默認啟動為GNOME界面模式[7]。
#systemctl get-default
#systemctl set-default graphical.target
systemctl get-default
#reboot
使用命令reboot重啟CentOS系統,重啟之后就已經切換到GUI圖形界面模式,通過對圖形化界面的設置,即可實現從命令行到圖形化界面的所有操作[8]。
2.3.3 不帶用戶認證的客戶端配置
在圖形界面下打開火狐瀏覽器,通過“設置”找到“網絡設置”,單擊“設置”,在打開的網絡設置中,勾選“手動配置代理”,設置HTTP代理為“127.0.0.1”端口為“3712”,同時勾選“也將次代理用于HTTPS”,完成代理的配置。嘗試用瀏覽器中訪問www.sxjdxy.org,頁面回顯查看的頁面信息,如圖12所示。

圖12 代理服務器的設置
在squid中位于/var/log/squid/access.log的日志文件會將HTTP響應的關鍵信息記錄并存放其中,在GNOME桌面上打開終端,切換目錄至/var/log/squid,使用cat access.log查看日志文件[9],查看日志文件,可查看到瀏覽器訪問www.sxjdxy.org的記錄信息被保存到日志文件中,如圖13所示。

圖13 查看日志文件
2.3.4 帶用戶認證的客戶端配置
在對瀏覽器進行PRoxy設置后,當使用瀏覽器訪問頁面的時候,會先彈出一個提示輸入用戶名和密碼的提示框[10],輸入用戶名和密碼即可訪問到www.sxjdxy.org頁面信息,如圖14所示。

圖14 帶用戶認證訪問
通過在Linux平臺下從Squid的安裝、Squid服務器端的配置及客戶端的配置對Squid PRoxy代理服務的實現進行了研究,客戶端從用戶認證和非用戶認證對代理服務器的訪問進行了驗證,借助于Squid代理服務器,客戶端獲得了自己所需要的信息,又沒有泄露自己的信息,提高了訪問效率和安全防護。