吳金堂,耿方方
(河南中醫藥大學 信息化辦公室,鄭州 450046)
IPv6作為下一代互聯網關鍵技術,是網絡信息技術發展和互聯網演化升級的必然趨勢。2018年9月教育部發布《推進IPv6規模部署行動計劃》,主要目標是要求到2020年底,教育系統的各類網絡、門戶網站和重要應用系統完成升級改造,支持IPv6訪問。為了降低各類網站及業務應用向IPv6升級轉換的難度,實現現有Web應用的IPv6訪問,本文提出基于Nginx的反向代理實現IPv4網站應用的轉換及網站的安全防御。
現階段由于網站規劃、應用開發均基于IPv4網絡,將業務直接由IPv4部署到IPv6中,可能會出現網站、應用無法訪問或出現錯誤的情況。IPv4到IPv6環境的轉換,需要經歷網絡改造、軟硬件更新以及對業務系統內核的重構、測試及重新編譯上線。如果想在短時間內基于IPv6對網站、應用系統進行重新開發部署,對于普通內容類網站較為容易實現,但對于一些業務應用系統,如財務、教務等系統則需要較長的時間。
目前,正處于IPv4向IPv6過渡階段,網站及業務應用系統需同時滿足IPv4/IPv6用戶訪問IPv4/IPv6網站應用服務的需求,這就需要從應用服務端實現IPv4和IPv6用戶的訪問。現在已經實現IPv6部署的網站應用,其服務器通常是基于原生IPv4/IPv6雙棧提供Web服務,它可避免因轉換導致的復雜性。但是,基于IPv6的應用安全防御設備不夠成熟,這就增加了IPv6環境下的網站應用服務的安全風險。
反向代理是指某臺服務器用來接受網絡上用戶的連接請求,然后將請求轉發給網絡上對應的應用服務,并將從應用服務上得到的結果返回給網絡上請求的用戶客戶端,此時這臺服務器對外表現即為一個反向代理服務器[1]。用戶通過代理服務器訪問網站應用時,并不需要更改任何配置,正常訪問網站即可。常見的反向代理工具有HAProxy、Fikker、Squid、Nginx等。
本文主要以Nginx為反向代理工具進行研究,實現在不更改原有網站應用系統的前提下,網站應用能夠在IPv6下的訪問。
反向代理服務器需要支持用戶能夠同時訪問IPv4地址與IPv6地址,因此,在反向代理服務器上需配置IPv4地址與IPv6地址。IPv4地址除了為用戶提供IPv4的服務外,主要是讓代理服務器將請求的IPv4應用系統轉換為IPv6服務。反向代理服務可以同時為多個應用系統提供代理服務,因此,可以在代理服務器上配置多個IPv4或IPv6地址,方便不同業務使用不同的IP地址進行訪問。
反向代理服務器只需部署在用戶可以訪問到的網絡下即可,不需要改造網絡結構。如果內部網絡暫時沒有IPv6網絡,可以把代理服務器部署在其他支持IPv4與IPv6的網絡機房,從而實現IPv4與IPv6的同時訪問。
Web應用支持IPv6網絡訪問時,需要網站具有相對應的DNS解析,即AAAA記錄。當網站支持IPv4與IPv6同時訪問時,需要有對應的A記錄和AAAA記錄。域名的解析地址為反向代理服務器上配置的IPv4與IPv6地址。當IPv4用戶訪問域名時,用戶自動解析并訪問反向代理服務器的IPv4地址;當IPv6用戶訪問域名時,用戶自動解析并訪問反向代理服務器的IPv6地址。
基于Nginx反向代理技術的服務器配置較為簡單靈活,可以同時代理多個后端Web應用。例如,反向代理后端IPv4網站應用,在代理服務器中配置對應的IPv4請求源地址,并配置監聽對應Web應用的IPv6地址端口即可。
Nginx反向代理配置如下:


以上示例配置中,同時配置了兩個反向代理域名,分別對應后端IPv4應用地址,當IPv6用戶訪問www域名時,通過DNS解析出域名IPv6地址為反向代理服務器地址,用戶請求到反向代理服務器,服務器會根據用戶請求的域名自動轉發請求到其對應的211.66.66.66(www網站)服務器,并將請求結果返回給用戶。
針對一些特殊應用,使用非80端口,如8080等,只需要在反向代理服務中配置對應回源端口,并在服務器中監聽相應端口即可實現端口轉發功能。當某業務需要使用HTTPS安全連接,且源Web應用不支持修改啟用HTTPS時,同樣可以通過反向代理服務器把對應服務轉換為HTTPS安全連接,在反向代理服務器中配置安全證書,并監聽443端口,用戶可以直接訪問HTTPS的安全連接,回源請求還是Web應用80端口,不需要源服務做任何改變。
在使用反向代理服務器轉換IPv6時需要注意,代理內容中有跨協議資源時,非對應協議用戶會出現無法訪問的情況。例如,只有IPv6網絡的用戶訪問轉換后的網站時,網站內容包含有鏈接為IPv4的資源,此時IPv6訪問用戶就不能加載相應資源,這就需要在做轉換時一定要進行嚴格的訪問測試,保證數據調用協議一致性。我們可以利用Nginx中的subs_filter內容過濾模塊,把單協議資源轉換為雙協議資源或替換為本地資源[2]。
當用戶訪問代理服務時,代理服務器就必須開啟兩個連接,一個為訪問用戶的連接,一個為對后端Web應用的連接,因此,對于連接請求數量非常大的時候,代理服務器的負載也就非常高。在實際應用中,如果代理業務過多,可以部署多臺反向代理服務器,配合DNS服務,把需要做代理轉換的服務域名同時解析到多臺代理服務器IP,實現反向代理前端負載均衡,分散多個業務的請求,這個過程其實已經實現了內容分發網絡功能(CDN)。我們可以把代理服務器部署在不同運營商的線路中,并結合反向代理的內容緩存功能,配合智能DNS服務,以實現網站業務的IPv6轉換、內容分發與快速訪問。
現階段針對IPv6業務應用層的安全設備相對不完善,業務系統接入IPv6后的安全風險增加,而通過反向代理服務后,所有的用戶請求都必須通過代理服務器訪問后端服務,因此,可在代理服務器上設置相關安全配置,過濾某些不安全信息,攔截惡意請求。
在搭建IPv6反向代理服務器時,可以使用OpenResty做為反向代理服務工具,OpenResty是一個基于Nginx與Lua的高性能Web平臺,可以方便地搭建能夠處理超高并發、擴展性極高的動態Web應用、Web服務和動態網關。
網站應用層的安全防御主要依靠Web應用防火墻(Web Application Firewall,WAF)來檢測攔截,通過開源框架OpenResty和相應Lua程序語言可以輕松構建Web應用防火墻,實現通過對HTTP(S)請求進行檢測,識別并阻斷SQL注入、跨站腳本攻擊(Cross Site Scripting xss)、網頁木馬上傳、命令/代碼注入、文件包含、敏感文件訪問、第三方應用漏洞攻擊、CC(挑戰黑洞)攻擊、惡意爬蟲掃描、跨站請求偽造等攻擊,保護后端Web應用安全穩定。
相對于在原有IPv4/IPv6網站應用系統中部署應用防御,在中間代理轉換層做應用安全防御更簡單便捷,不用對原有系統做任何改變,也不會對原有業務系統產生影響。各業務系統的訪問日志格式不統一,收集整理分析難度大,但通過中間的反向代理服務后,可以統一規范訪問日志格式,做集中式日志管理系統,以便對日志進行分析,例如,結合ELK(Elasticsearch、Logstash、Kibana)日志系統可以對日志統一標準化收集傳輸、日志查詢分析并到最后實現日志的實時可視化。
結合以上的理論知識,在實際環境中構建了一臺反向代理服務器,具體配置信息如下。
在VM虛擬化中開設一臺服務器,4核,8G內存。安裝Centos6操作系統,使用OpenResty作為反向代理服務工具,使用Iptables和Ip6tables防火墻軟件。配置千兆網卡,設置IPv4與IPv6雙棧網絡。
OpenResty服務配置成反向代理模式,在配置中監聽指定業務域名并設置對應業務回源請求地址,結合基于Lua語言的開源OpenWAF模塊,實現Web應用防火墻功能。
服務器配置syslog-ng日志收集傳輸工具,Nginx和OpenWAF模塊在產生日志的同時對日志進行遠程傳輸。
VM中開設虛擬服務器,配置8核,16G內存。安裝Centos6操作系統,配置ELK日志服務,通過收集反向代理服務器傳輸過來的日志,進行分類整理分析,并最終實現日志實時可視化。
本實例未對原有Web應用做任何改動,實際應用中,可以把后端業務放入內部網絡,并設置只允許反向代理服務器的請求通過,以增加原應用服務的安全性。
該系統部署在IPv4/IPv6雙棧環境下,反向代理并轉換原IPv4網絡下的學校門戶網站為IPv6服務,已經正常連續運行一個月,通過日志分析系統可以看出IPv6用戶已經增長很快,每天有1千余用戶通過IPv6網絡訪問網站,訪客來源于全國不同地方,如圖1所示。另外,根據Web防火墻日志可以看出,IPv6下的攻擊類型多種多樣,惡意請求數量也在遞增,如圖2和圖3所示。

圖1 訪問用戶

圖2 攻擊類型
反向代理技術可以實現IPv4到IPv6的Web應用轉換,是IPv6過渡階段最方便快捷的業務向IPv6轉換的方法。同時,通過反向代理服務后,用戶與應用系統中間增加了一層防護,提高了內部系統的安全性。該方法的使用為IPv6在業務系統方面的推廣提供了解決方案,同時也為業務系統的信息安全提供了保障。

圖3 IPv6下的日志分析