文/張煥杰 陳蕾 夏玉良
無論是單純發(fā)布信息的網(wǎng)頁或是WWW頁面訪問的應用,呈現(xiàn)給最終用戶的形式都是Web網(wǎng)站。用戶通過校園網(wǎng)或Internet網(wǎng)絡訪問這些網(wǎng)站時,希望能提供IPv6/IPv4多協(xié)議支持,提供多家運營商線路入口的就近訪問,提供HTTPS安全傳輸支持。網(wǎng)站運維方為了安全的考慮,希望將訪問流量引導經(jīng)過Web應用防火墻(WAF)設備過濾處理,提供對網(wǎng)站靈活可控的邊界防護手段,具備日志記錄功能以滿足法規(guī)要求。
Nginx是一個異步框架的Web服務器,也可用作反向代理、負載均衡和HTTP緩存服務器。中國人章亦春把LuaJIT VM(Lua語言是巴西教授發(fā)明的簡單腳本語言)嵌入 Nginx中,實現(xiàn)高性能服務端解決方案OpenResty。
Nginx使用高效率的操作系統(tǒng)內核epoll接口處理TCP并發(fā)連接,因此可以輕松支持幾十萬甚至更多并發(fā)連接。
Nginx運行在Unix類操作系統(tǒng)或Windows操作系統(tǒng),本文以最常見的Linux操作系統(tǒng)為運行環(huán)境。
如圖1所示,設立一臺Nginx服務器,將網(wǎng)站的域名解析到該Nginx服務器。用戶訪問網(wǎng)站時,Nginx服務器首先接收來自用戶的訪問請求,并將請求轉發(fā)到源網(wǎng)站,獲取到應答后再轉發(fā)給用戶。這樣工作的Nginx服務器被稱為反向代理服務器。設立Nginx反向代理服務器,集中處理用戶對網(wǎng)站訪問服務,在不修改源服務器的情況下,以幾乎零成本滿足引言中描述的最終用戶和網(wǎng)站運維方的多種需求。
圖1 Nginx反向代理工作示意
Nginx反向代理服務器上設置多個運營商網(wǎng)絡IP地址,并使用DNS的視圖功能,將不同運營商的用戶對域名的查詢請求解析到恰當?shù)腎P,這樣用戶的訪問就可以就近進行。Nginx服務器要把從某個運營商入口進來的請求對應的應答數(shù)據(jù)包,還要從該出口返回,確保用戶訪問服務器的任何IP都能正常進行。
Linux操作系統(tǒng)支持策略路由的設置。管理員使用ip rule命令讓不同IP發(fā)出的數(shù)據(jù)包查找不同的路由表,從而實現(xiàn)源地址策略路由。Nginx反向代理服務器中給出了設置策略路由的配置命令。設置完成后,使用https://www.17ce.com/可從國內外若干網(wǎng)絡對網(wǎng)站的訪問可達性、傳輸延遲和速度進行測試。
Linux操作系統(tǒng)與Nginx軟件提供完整的IPv6協(xié)議功能,簡單設置,不需要修改源站的設置,即可對外提供IPv6/IPv4協(xié)議服務,是將現(xiàn)有網(wǎng)站升級支持IPv6協(xié)議最簡單和便捷的方式。
超文本傳輸安全協(xié)議HTTPS提供對網(wǎng)站服務器的身份認證,保護交換數(shù)據(jù)的隱私與完整性。為了避免中間人的流量嗅探或流量劫持,越來越多的Web站點開始使用HTTPS協(xié)議。HTTP/2是一種二進制協(xié)議,帶來推送、數(shù)據(jù)流復用和幀控制等功能,目前主要用于減少HTTPS協(xié)議握手時延遲對訪問體驗的負面影響,已經(jīng)被主流的瀏覽器支持。
只要具有公認的CA機構發(fā)出的服務器證書,Nginx就可以方便地對外提供HTTPS協(xié)議訪問。為了簡化管理,我們僅僅在用戶和Nginx反向代理服務器間啟用HTTPS協(xié)議,在Nginx反向代理服務器與源服務器間仍使用HTTP協(xié)議。
Nginx反向代理服務器轉發(fā)請求時,向源服務器發(fā)送Host、X-REAL-IP和X-Forwarded-Proto三個HTTP頭,內容分別是請求的主機名、客戶端IP地址、客戶訪問時的協(xié)議(HTTP/HTTPS),以方便源服務器使用。
啟用HTTPS協(xié)議后,建議使用https://www.ssllabs.com評估HTTPS協(xié)議的安全性,必要時調整部分參數(shù),禁用不安全的加密算法,以達到更高的安全性。
提供HTTPS服務后,可以將用戶的HTTP訪問重定向到HTTPS訪問,并設置HSTS頭,強制將來一直使用HTTPS訪問,徹底杜絕中間人的流量嗅探或流量劫持。
只要讓Nginx反向代理服務器訪問源服務器的HTTP流量經(jīng)過Web應用防火墻(WAF)設備,就完成了引流工作。WAF設備上看到請求均是由Nginx服務器發(fā)起,因此需要調整WAF設置,讓WAF設備從HTTP請求的X-REAL-IP頭獲取客戶端IP信息。
為減少攻擊者對Nginx的影響,可以收集并分析WAF日志,獲取到攻擊者的IP地址,直接使用Nginx服務器上的包過濾防火墻將這些IP地址封禁,徹底切斷攻擊者的通信。
校園內網(wǎng)站數(shù)量龐大,不同的網(wǎng)站在不同的時期有不同的邊界防護需求。如在重要時期網(wǎng)絡保障階段,需要將可能存在潛在漏洞的信息化應用網(wǎng)站限制在校內,并將部分必須校外訪問的網(wǎng)站增加一個認證階段,避免這些網(wǎng)站直接暴露到校外的潛在安全風險。
使用反向代理對外服務的網(wǎng)站,源服務器不需要對外暴露,能讓反向代理服務器訪問即可,源服務器更加安全。
設置Nginx中的Acl訪問控制策略,僅允許自己校內的IPv4/IPv6地址訪問,即可將網(wǎng)站限制在校內訪問。
使用lua對反向代理做權限控制給出的方案,在Nginx反向代理服務器上運行一段lua腳本程序,不需對源網(wǎng)站做任何修改,能對校外訪問網(wǎng)站增加一次認證階段,實現(xiàn)靈活的邊界防護策略,并可隨時在Nginx代理服務器上切換。權限控制部分是運行在Nginx內的lua程序,開發(fā)簡單、執(zhí)行效率高、對性能影響小。權限控制部分通過檢查校外用戶請求中的nginx_auth_uid、nginx_auth_expire和nginx_auth_hash三個參數(shù),結合與認證部分共享的密鑰,判斷訪問者是否已通過認證,允許通過認證的用戶訪問。如果是未通過認證的用戶,重定向到獨立的認證部分。認證部分對接學校的統(tǒng)一身份認證系統(tǒng),平時使用簡單的用戶名和密碼認證,在重要時期網(wǎng)絡保障階段,可增加更加安全的雙因子認證。通過認證后會設置對應的nginx_auth_uid、nginx_auth_expire和nginx_auth_hash三個cookie,后續(xù)的訪問會被權限控制部分允許。
Nginx反向代理可以集中記錄Web網(wǎng)站的訪問日志,不依賴源站點即可滿足法規(guī)對日志的記錄要求。
依據(jù)這些集中記錄的日志,可以統(tǒng)計網(wǎng)站的IPv4/IPv6/HTTPS/HTTP/2訪問情況,還可以分析異常掃描和攻擊,找出潛在的威脅。
默認安裝的操作系統(tǒng)不能充分發(fā)揮Nginx的性能。step-by-step install Nginx反向代理服務器給出對操作系統(tǒng)的優(yōu)化建議。
conntrack優(yōu)化:對于Nginx服務器,因為有大量的短連接,最好不啟用conntrack連接跟蹤功能。如果因設置需要啟用連接跟蹤功能,需要在加載nf_conntrack內核模塊時增加一個較大的hashsize參數(shù),該參數(shù)*8即是內核可以記錄的最多連接數(shù),建議hashsize設置為50000。啟用連接跟蹤功能時,還應調整連接跟蹤的超時時間,讓異常狀態(tài)的連接及早超時刪除,減少需要跟蹤的連接數(shù)量。
單進程和系統(tǒng)打開的最多文件數(shù),建議增加到655360。
中國科學技術大學從2011年開始使用Nginx反向代理服務器。目前Nginx反向代理服務運行在一個2G內存/4個CPU的虛擬機中,集中對650個網(wǎng)站提供IPv4/IPv6、HTTPS服務。該虛擬機有中國教育和科研計算機網(wǎng)、中國科技網(wǎng)、中國電信、中國聯(lián)通和中國移動五個IPv4入口,并有CNGI-CERNET2 IPv6入口。DNS服務器上設置若干DNS view,將用戶的解析分配到對應的IP地址,引導用戶的就近訪問。
中國科學技術大學使用Let’s Encrypt免費提供的自動簽發(fā)服務器證書。由于Let’s Encrypt有每7天50個證書簽發(fā)速率限制,對于其中563個形如*.ustc.edu.cn域名,在DNS服務器上使用DNS驗證方式申請*.ustc.edu.cn證書,利用git傳遞到Nginx反向代理服務器上;而其他87個獨立域名,則在Nginx反向代理服務器上使用HTTP驗證方式分批申請證書。有了這些證書,Nginx中增加https配置,即可對外提供HTTPS及HTTP/2服務。Let’s Encrypt簽發(fā)的證書有效期為90天,服務器上每天凌晨運行一個腳本,申請更新60天前簽發(fā)的證書,更新成功后重啟Nginx進程以使用新證書,實現(xiàn)證書的自動更新。
對Nginx反向代理服務器上的日志文件統(tǒng)計可以掌握用戶的訪問情況。
圖2 學校主頁訪問統(tǒng)計
圖2是學校主頁http://www.ustc.edu.cn的訪問統(tǒng)計,約80%使用HTTPS方式,約60%使用HTTP/2協(xié)議,約10%使用IPv6協(xié)議。網(wǎng)站的訪問統(tǒng)計對比可以說明高校用戶在IPv6協(xié)議使用率和新版本瀏覽器(更好支持HTTPS及HTTP/2)普及率方面比普通網(wǎng)民要高。