蘇翔宇,朱愛群
(深圳技師學(xué)院,深圳 518116)
隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,網(wǎng)絡(luò)安全的重要性不言而喻,對于互聯(lián)網(wǎng)上數(shù)以百萬計的Web服務(wù)器來說,提升訪問效率的同時兼顧安全更是必不可少的。但近年來,針對Internet上的Web服務(wù)器的網(wǎng)絡(luò)攻擊屢見不鮮,攻擊手段也是層出不窮,如此嚴(yán)峻的網(wǎng)絡(luò)環(huán)境,對企業(yè)的網(wǎng)絡(luò)安全工程師提出了更高的要求。通常情況下,企業(yè)是通過購買價格昂貴的硬件安全設(shè)備和負載均衡器來應(yīng)對此類挑戰(zhàn)的,但對于預(yù)算有限的中小企業(yè)往往顯得力不從心,其實用戶也可以使用基于開源軟件的方案實現(xiàn),可定制的開源CentOS7 Linux操作系統(tǒng)再加上開源Nginx服務(wù)器就是最佳組合,既穩(wěn)定又高效,且具有良好的可擴展性。
反向代理服務(wù)器通常架設(shè)于企業(yè)網(wǎng)絡(luò)的邊界,不但可以通過訪問安全控制來阻斷外網(wǎng)對內(nèi)網(wǎng)服務(wù)器直接的惡性攻擊,還可以利用緩存后方服務(wù)器的靜態(tài)數(shù)據(jù)來減輕訪問壓力。其主要的工作模式就是將外網(wǎng)客戶端的訪問請求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)的Web服務(wù)器,并且將Web服務(wù)器經(jīng)過處理得到的結(jié)果頁面返回給發(fā)送請求的外網(wǎng)客戶端,這時的反向代理服務(wù)器和后端的Web服務(wù)器在外網(wǎng)看來就是一個整合在一起的單一服務(wù)器。一旦遭到外網(wǎng)攻擊,首當(dāng)其沖的就是反向代理服務(wù)器,而其后端存儲網(wǎng)站數(shù)據(jù)的Web服務(wù)器就得到了有效的保護。
負載均衡,顧名思義就是使得多臺服務(wù)器不要出現(xiàn)有些負載過重而有些又負載過輕的問題,盡量達到所謂的“均衡”。對于Web服務(wù)器來說,實現(xiàn)負載均衡的前提是有多臺內(nèi)容和應(yīng)用相同的物理服務(wù)器來共同承擔(dān)外部的訪問流量,負載均衡器通過適合的調(diào)度算法來決定由哪臺服務(wù)器來接收客戶端的請求。當(dāng)系統(tǒng)的整體負載趨向飽和時,可以通過線性增加物理服務(wù)器的數(shù)量和擴充網(wǎng)絡(luò)帶寬來解決,只要是所有的物理服務(wù)器處于同個負載均衡器的管控之下,指定的調(diào)度算法就會使得擴展之后的服務(wù)器資源實現(xiàn)新的均衡。
在Web服務(wù)器架設(shè)中引入負載均衡技術(shù),既可以通過多服務(wù)器的負載均衡有效的分散單一服務(wù)器的訪問壓力,而且還可以避免“單點故障”,當(dāng)一臺Web服務(wù)器發(fā)生故障或遭到攻擊無法對外提供服務(wù)以后,負載均衡技術(shù)會自動地將發(fā)生故障服務(wù)器的訪問流量轉(zhuǎn)移給其他的服務(wù)器,當(dāng)故障解決之后再把流量恢復(fù)過來,這樣對整個Web服務(wù)器的安全性能都會有很大的提升。
如圖1所示,在Nginx實現(xiàn)反向代理和負載均衡的案例中,安裝Nginx的CentOS7 Linux服務(wù)器上有內(nèi)外兩塊網(wǎng)卡,外網(wǎng)網(wǎng)卡/dev/ens37,在防火墻firewalld的public區(qū)域中,公網(wǎng)地址為202.96.133.100,內(nèi)網(wǎng)網(wǎng)卡/dev/eno16777736,在防火墻firewalld的work區(qū)域中,內(nèi)網(wǎng)地址為10.1.50.100。外網(wǎng)客戶端訪問公網(wǎng)地址202.96.133.100的80端口提交Web訪問請求,Nginx接收到請求后,通過反向代理機制將請求按照Nginx負載均衡器中分配的權(quán)值轉(zhuǎn)發(fā)給3臺不同的內(nèi)網(wǎng)Web服務(wù)器。這3臺Web服務(wù)器中運行的服務(wù),網(wǎng)站應(yīng)用以及數(shù)據(jù)庫都是相同的,外網(wǎng)客戶端并不知道具體訪問的是哪一臺,Nginx的反向代理有效地保護了最終提供服務(wù)的Web服務(wù)器。這樣通過Nginx的反向代理和負載均衡機制,多臺Web服務(wù)器有效的分擔(dān)了外網(wǎng)客戶端的訪問請求,而且當(dāng)某臺服務(wù)器故障時,還可以自動轉(zhuǎn)移請求到別的服務(wù)器上,保障服務(wù)不中斷。
圖1 Nginx實現(xiàn)反向代理和負載均衡
在如圖1所示的網(wǎng)絡(luò)模型中,Nginx通過反向代理和負載均衡機制成功的把外網(wǎng)客戶端的Web訪問請求按照如表1所示的Web服務(wù)器的地址、服務(wù)端口和weight值進行轉(zhuǎn)發(fā),然后再把Web服務(wù)器的結(jié)果返回給Internet上的客戶端。為了實現(xiàn)上述功能,需要在CentOS7上Nginx服務(wù)器的配置文件/etc/nginx.conf的http塊中添加下列腳本。
表1 Nginx負載均衡器包含的內(nèi)網(wǎng)Web服務(wù)器調(diào)度信息
在以上腳本中,首先使用Nginx的HTTP Upstream模塊新建了一個名為Webservers的負載均衡器,包含了內(nèi)網(wǎng)3臺Web服務(wù)器的調(diào)度算法,接著使用proxy_pass參數(shù)反向代理到負載均衡器Webservers,最后使用proxy_next_upstream參數(shù)定義了故障轉(zhuǎn)移策略,當(dāng)外網(wǎng)客戶端訪問后端的1臺Web服務(wù)器出現(xiàn)故障,返回404或者出現(xiàn)執(zhí)行超時等錯誤時,Nginx會自動將請求轉(zhuǎn)發(fā)到負載均衡器Webservers中的另一臺Web服務(wù)器,實現(xiàn)故障轉(zhuǎn)移,有效地避免了“單點故障”。
防火墻Firewalld是CentOS7較之前版本的Redhat Linux操作系統(tǒng)相比最明顯的變化之一。Firewalld較以前Redhat Linux系統(tǒng)默認安裝的防火墻Iptales/Netfilter,增加了“區(qū)域”、“IP偽裝”等很多實用的功能,操作也簡化了許多。為了實現(xiàn)上述方案的功能,防火墻Firewalld要添加以下配置策略。
(1)為防火墻的public區(qū)域和work區(qū)域同時開啟IP偽裝。
firewall-cmd--zone=public--add-masquerade--permanent
firewall-cmd--zone=work--add-masquerade--permanent
(2)為防火墻的public區(qū)域添加外網(wǎng)訪問網(wǎng)卡/dev/ens37的80端口的允許策略。
firewall-cmd--zone=public--add-port=80/tcp--permanent
(3)打開內(nèi)核IP數(shù)據(jù)包轉(zhuǎn)發(fā)功能。
echo"1">/proc/sys/net/ipv4/ip_forward
在上述實施方案中,負載均衡器采用指定輪詢權(quán)值的訪問方法分配資源,這種方法適用于Nginx的后端有多臺配置有明顯差異的Web服務(wù)器環(huán)境,性能高的服務(wù)器配以較高的weight值,相應(yīng)承擔(dān)的訪問流量也越大,反之亦然。但用戶的實施環(huán)境多種多樣,需求也不盡相同,為了滿足更多實際的需求,就需要采用不同的負載均衡調(diào)度算法,具體如下:
(1)ip_hash算法,能夠?qū)⒛硞€客戶端IP的請求通過哈希算法定位到同一臺后端服務(wù)器上,例如:當(dāng)來自某個IP的外網(wǎng)用戶在后端一臺Web服務(wù)器上登錄后,再訪問該服務(wù)器的其他頁面,該算法能夠保證其訪問的后端服務(wù)器不變化。這種調(diào)度算法主要適用于session數(shù)據(jù)廣泛使用的場景。
(2)fair算法,被稱為新一代的更為智能的負載均衡算法,其工作原理是后端Web服務(wù)器的資源分配是根據(jù)各自響應(yīng)客戶端訪問請求的時間長短來實現(xiàn)的,哪個響應(yīng)快就優(yōu)先分配,這種算法主要適用于對訪問性能有較高需求的業(yè)務(wù)應(yīng)用。
高效穩(wěn)定的CentOS7 Linux服務(wù)器系統(tǒng)搭配Nginx強大的反向代理和負載均衡機制,實現(xiàn)了開源領(lǐng)域的一次強強聯(lián)合。這種技術(shù)實施方案成本低、可靠性高,而且由于軟件本身的特點,可擴展性還十分出色。對于亟待加強Web服務(wù)器安全性的企業(yè)用戶來說,不失為一個經(jīng)濟高效的解決方案,有較為廣泛的推廣價值。
參考文獻:
[1]凌質(zhì)億,劉哲星,曹蕾.高并發(fā)環(huán)境下Apache與Nginx的I/O性能比較[J].計算機系統(tǒng)應(yīng)用,2013.
[2]張宴.實戰(zhàn)Nginx:取代Apache的高性能Web服務(wù)器.北京:電子工業(yè)出版社,2011.
[3]喬鑫.Nginx:新一代 Web服務(wù)器軟件[J].科技浪潮,2009(1).
[4]張云,許江淳,李玉惠,王志偉,史鵬坤.基于Nginx服務(wù)器負載均衡技術(shù)的研究與改進[J].軟件,2017.