引言:隨著互聯(lián)網(wǎng)業(yè)務的急速增加,越來越多的企業(yè)服務需要在保證內網(wǎng)互聯(lián)的基礎上,進行公網(wǎng)的交互訪問。這時對于業(yè)務的訪問加速、安全增強、穩(wěn)定性鞏固,就變得越來越重要。為了提升網(wǎng)絡安全,設計并部署了Protal+Cache集成服務。
隨著互聯(lián)網(wǎng)業(yè)務的急速增加,越來越多的企業(yè)服務需要在保證內網(wǎng)互聯(lián)的基礎上,進行公網(wǎng)的交互訪問。這時對于業(yè)務的訪問加速、安全增強、穩(wěn)定性鞏固,就變得越來越重要。以筆者單位為例,本地某平臺需要能夠在內網(wǎng)環(huán)境下訪問公網(wǎng)上的某些資源,并且可以通過寬帶及手機流量訪問平臺中的某些信息。
為了提升網(wǎng)絡安全,我們沒有給相應的服務器和終端提供直接的網(wǎng)絡環(huán)境,而是設計并部署了Protal+Cache集成服務,并利用自己的DNS平臺為用戶提供網(wǎng)絡中繼,目前平臺已經(jīng)安全穩(wěn)定運行半年。
整套平臺采用NGINX的proxy_pass和DNS解析作為核心,即反向代理功能與域名解析功能,整體網(wǎng)絡拓撲如圖1所示,其中服務器集群分布式部署在各個縣區(qū)機房,防火墻與DNS服務統(tǒng)一放置在市級機房。
圖1 平臺網(wǎng)絡拓撲圖
網(wǎng)內擁有多臺互為備份的服務器,當公網(wǎng)用戶訪問網(wǎng)內設備時,通過兩臺暴露在公網(wǎng)環(huán)境的服務器與防火墻互備組合,利用反向代理提供負載均衡服務。網(wǎng)內用戶訪問公網(wǎng)設備時,使用另外兩臺部署在公網(wǎng)NAT后面的服務器與防火墻互備組合,除了提供反向代理外,還設計了緩存機制,加快訪問速度。
除上述公網(wǎng)、內網(wǎng)互訪機制,單位還部署了自己的DNS服務,通過定向解析的方式加速服務,即:平臺的全部域名,在公網(wǎng)上正常解析公網(wǎng)地址;內網(wǎng)用戶使用自己的DNS服務,訪問其他域名時正常轉發(fā)公網(wǎng)地址,訪問這些域名時直接解析內網(wǎng)地址。
平臺采用Centos6.8系統(tǒng),使用常規(guī)安裝的方法即可。兩塊系統(tǒng)磁盤使用RAID1部署,剩下的存儲磁盤使用RAID5部署;磁盤使用GPT分區(qū)方式,勿用MBR分區(qū);內存為96GB,CPU使用E5-2650v3兩顆。
需要注意的是,Centos在自動分區(qū)時,會自動分配/,/boot、/boot/efi三個數(shù)百兆字節(jié)的分區(qū)和swap分區(qū),然后剩下的全部磁盤空間自動分配給/home。本平臺具有緩存功能,緩存文件存儲在/usr/local/nginx/proxy_cache/中,因此可以簡單的將/home并入根目錄,或者修改分區(qū)方式,或者直接修改本文提供的源代碼。
Centos服務器本身倉庫中有編譯好的nginx,但為滿足大眾化的需求,其已經(jīng)安裝好了很多組件,本平臺不需使用的多余組件只會影響安全性,因此需要定制化從源碼開始調試。
本文僅涉及核心部分的調試,搭建Nginx服務還有很多細節(jié)需要調整,筆者編寫了一個自動部署項目,已經(jīng)以Leniy Tsan為昵稱開源發(fā)布到了GitHub上,項目名為Leniy/Install_Nginx,供參考。
(1) 首先創(chuàng)建nginx用戶和組
創(chuàng)建專門的nginx用戶,防止服務器腳本被提權。
(2) 安裝編譯環(huán)境
(3) Nginx源代碼編譯
使 用./configure編譯源代碼時,需要指定用戶和組--user=nginx,--group=nginx,然后設置安裝目錄--prefix=/usr/local/nginx,--sbin-path=/usr/sbin/nginx,最 后 調用本平臺需要使用的如下模塊編 譯 :--with-http_stub_status_module,--withhttp_realip_module,--with-stream,--with-http_gzip_static_module,--with-http_sub_module,--http-proxy-temp-path=/usr/local/nginx/proxy_temp/,其它參數(shù)可自行定義。
(4) 配置Nginx
Nginx需要調試配置文件。在服務開啟前需要通過chmod +w和chown -R設置www目錄權限。
然后將nginx設置為開機自啟chkconfig nginx on并開啟防火墻,只允許需要的端口通過。
5) 增強Nginx根目錄的安全并開啟服務
通過.user.ini中聲明open_basedir等參數(shù)限制基本目錄層級,并設置此文件為chmod 644和chattr +i屬性。
完整的配置文件同樣開源了,需要注意的是緩存部分的配置:
當內網(wǎng)訪問公網(wǎng)服務的時候,需要將一些大文件緩存,加快訪問速度,因此將名為content的緩存創(chuàng)建在了服務器的/usr/local/nginx/proxy_cache目錄中,即RAID5的六塊1.2TB SAS硬盤,并設計了二層緩存目錄,文件超過1年未使用自動刪除,最大緩存空間5TB。
當公網(wǎng)訪問內網(wǎng)時,不使用緩存策略,單獨進行負載均衡轉發(fā)。
單位中有多種服務需要能夠在公網(wǎng)訪問。暴露在公網(wǎng)環(huán)境的服務器與防火墻互備組合,具有相同的配置,由DNS同域名多IP解析進行負載均衡。服務器利用反向代理連接內網(wǎng)中的各個雙機熱備系統(tǒng)進行負載均衡。以某個服務為例,某一臺公網(wǎng)服務器的nginx配置文件如下(此處端口和IP僅為示例,非真實端口):
這個nginx配置文件會將全部訪問公網(wǎng)服務器9090端口的請求,輪詢的轉發(fā)到內網(wǎng)100和200兩臺服務器的8080端口,并將這兩臺的響應數(shù)據(jù)原路發(fā)回給用戶。
內網(wǎng)訪問公網(wǎng)的時候,為了加速并隔離業(yè)務,將相應的大文件緩存在服務器中。
為了防止公網(wǎng)網(wǎng)站出現(xiàn)訪問故障,整個網(wǎng)站默認情況下僅僅轉發(fā)不緩存,配置文件與上述類似,不使用upstream負載均衡的方法,如下所示(每個配置文件中都有三個與上面相同的proxy_set_header參數(shù),此處略過):
對于幾乎很難更改的文件,則使用前文中定義的content緩存空間:
以本項目為例,需要加速數(shù)十個企業(yè)網(wǎng)站,如果每個域名寫一個配置文件,將會極大地加重維護成本,故而可以在配置文件中設置正則表達式批量匹配:
本項目的服務加速不使用upstream負載均衡,因此直接設置resolver 114.114.114.114即可。
在域名注冊商的NS服務器中為服務器集群配置雙聯(lián)路,以portal-1域名為例:
非權威應答:
當用戶訪問portal-1的時候,DNS會輪詢的解析某一個公網(wǎng)地址,一旦某地址不可訪問,則僅僅解析另外一個地址。為了減少切換時間,同時考慮到服務器與電腦的DNS緩存,將TTL設為了120。
在第一部分概述中提到的三個目標中,內網(wǎng)加速與外網(wǎng)負載均衡第三部分已經(jīng)講到了,現(xiàn)在只需要讓內網(wǎng)用戶直接訪問內網(wǎng)服務器即可。
用戶訪問的業(yè)務全部通過域名提供服務,如`portal-1.leniy.org A 1.1.1.1`表示將`portal-1`這個二級域名綁定了`1.1.1.1`這個公網(wǎng)地址,域名的NS服務發(fā)布在公網(wǎng)上,則公網(wǎng)上的用戶可以直接解析。但是為防止內網(wǎng)用戶解析出公網(wǎng)地址,因此給用戶DHCP推送的DNS服務器是在內網(wǎng)專門建立的。
DNS服務器使用Windows Server 2008 R2自帶的DNS服務,直接添加正向查找zone區(qū)域,然后在里面添加需要解析的次級域名。為防止配置一個二級域名導致本域名下其他的三級域名無法轉發(fā)解析,現(xiàn)將各個多級域名分別單獨添加為一個zone,然后解析其@地址即可。核心代碼為:
其中192.168.100.50即前面提到的1.1.1.1這個公網(wǎng)地址的內網(wǎng)地址。
本平臺的DNS需要讓全部用戶能夠自動獲取到。我們使用BRAS進行用戶身份認證與IP池的分配,采用vbui用戶虛接口。
以平臺集群中某地的分節(jié)點為例,在BRAS上創(chuàng)建名為zhihuishequ的地址 池 :ip-pool pool-name zhihuishequ pool-id 3,然后設置接入域accessdomain yzzhihui。本地址池可以直接DHCP獲取,不需撥號,因此不用配置VCC和AAA認證,只需設置member 1 start-ip 10.0.0.1 endip 10.255.255.254。假設內網(wǎng)的DNS服務器的內網(wǎng)IP地址是192.168.100.60,則設置pppoe-dns-server 192.168.100.60即可實現(xiàn)目標。
本項目上線以來,業(yè)務量快速增加,特別是服務器集群中存儲的數(shù)據(jù)量越來越大。此時平臺網(wǎng)內流量已經(jīng)達到8Gbps,出口雙方向流量300Mbps。隨著本平臺的上線,網(wǎng)內用戶直接走內網(wǎng)線路,訪問直連公網(wǎng)網(wǎng)站大文件走緩存,節(jié)省了約1Gbps的帶寬,外網(wǎng)用戶通過Portal訪問,降低了業(yè)務宕機的風險并加強了安全防護。對整個項目的提升效果顯著。