利用京東雲Web應用防火牆實現Web入侵防護

語言: CN / TW / HK

摘 要

本指南描述如何利用京東雲Web應用防火牆(簡稱WAF),對一個簡單的網站(無論執行在京東雲、其它公有云或者IDC)進行Web完全防護的全過程。該指南包括如下內容:

1 準備環境

1.1 在京東雲上準備Web網站

1.2 購買京東雲Web應用防火牆例項

2 配置Web應用防火牆

2.1 增加Web應用防火牆例項的網站配置

2.2 在雲平臺放行WAF回源IP

2.3 本地驗證配置

2.4 修改域名解析配置

3 測試Web防護效果

3.1 發起正常訪問

3.2 發起異常攻擊

3.3 分析安全報表

4 環境清理

 

1 準備環境

1 .1 在京東雲上準備Web網站

在京東雲上選擇CentOS系統建立一臺雲主機,分配公網IP,安裝Nginx,並在域名解析服務上配置域名和IP的對映。具體的Web應用資訊如下:

# 作業系統資訊
[root@waf-demo ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

# 安裝dig命令,該命令可顯示域名的解析情況
bash
[root@waf-demo ~]#  yum install bind-utils -y
[root@waf-demo ~]# dig -v
DiG 9.9.4-RedHat-9.9.4-72.el7

# Nginx服務資訊
[root@waf-demo ~]# service nginx status
Redirecting to /bin/systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
...

在配置完域名和公網IP對映後,通過dig命令可獲得域名解析情況。

[root@waf-demo ~]$ dig waf-demo.jdcoe.top +trace
...
waf-demo.jdcoe.top.    60  IN  A   114.67.85.98
;; Received 63 bytes from 153.99.179.161#53(ns2.jdgslb.com) in 13 ms

通過網際網路遠端訪問該Web網站。

MacBook:~ user001$ curl http://waf-demo.jdcoe.top -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 24 Dec 2018 03:22:21 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

 

1.2 購買京東雲Web應用防火牆例項

進入京東雲控制檯,點選雲安全, Web應用防火牆, 套餐購買, 進入"Web應用防火牆 - 購買“介面,選擇需要企業版套餐(每種套餐規格請參考套餐詳情)。具體的購買介面如下圖:

 

在購買完成後,將在例項管理介面中看到所購買的例項資訊。

 

 

2 配置Web應用防火牆

在使用京東雲Web應用防火牆保護網站前,需要完成下列配置,才能實現使用者提交的HTTP/HTTPS訪問請求通過Web應用防火牆檢測後,再發送到Web網站。

 

2.1 配置Web應用防火牆例項的防護網站

在Web應用防火牆介面,點選網站配置新增網站, 在下面介面中輸入相關配置資訊。

 

介面引數具體描述如下:

域名:輸入需要保護的網站的域名;

  • 協議:預設選擇HTTP,如果網站支援HTTPS,則選擇HTTPS,並選擇SSL證書;
  • 伺服器地址:網站的IP;
  • 伺服器埠:網站的訪問埠;
  • 是否已使用代理:預設選擇"否",但如果網站還使用了IP高防服務,也就是訪問請求來自於IP高防,則應選擇“是";
  • 負載均衡演算法:當配置多個源站IP,WAF在將過濾後的訪問請求回源時,將按照IP Hash或輪詢的方式去做負載均衡。

 

新建立的網站配置的防護設定是處於關閉狀態,需要點選防護配置連結進入配置介面。

 

在網站防護配置介面中,設定Web應用攻擊防護狀態為On模式為防護,防護規則策略等級為嚴格。設定CC安全防護狀態為On,模式為正常

 

2.2 本地驗證配置

在網站配置列表介面中,能獲得為被防護網站生成的CNAME。針對域名“waf-demo.jdcoe.top",生成的WAF CNAME是waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com.

 

通過執行ping命令,能獲得Web應用防火牆的IP地址為101.124.23.163。

MacBook:etc user001$ ping waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com
PING waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com (101.124.23.163): 56 data bytes
64 bytes from 101.124.23.163: icmp_seq=0 ttl=49 time=57.525 ms
^C
--- waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 57.525/57.525/57.525/0.000 ms

 

應用安全網站不允許通過生成的CNAME或者IP地址進行訪問,如果直接訪問,將報“Bad Request“錯誤。

MacBook:etc user001$ curl waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com
<h1> Bad Request </h1>MacBook:etc user001$ 
MacBook:etc user001$ curl 101.124.23.163
<h1> Bad Request </h1>MacBook:etc user001$ 

 

修改本機IP地址101.124.23.163和域名waf-demo.jdcoe.top的對映,在Linux下,域名配置檔案為/etc/hosts。

1101.124.23.163 waf-demo.jdcoe.top

 

然後在本地執行如下命令“curl waf-demo.jdcoe.top -I”,將在顯示Server是jfe,表明已經通過Web應用防火牆。

MacBook:~ user001$ curl waf-demo.jdcoe.top -I
HTTP/1.1 200 OK
Server: jfe
Date: Mon, 24 Dec 2018 07:12:03 GMT
Content-Type: text/html
Content-Length: 3700
Connection: keep-alive
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

 

此時,看Web的訪問日誌,將看到如下資訊,表明請求已經通過Web應用防火牆,然後轉發到Web源站。

1101.124.23.116 - - [24/Dec/2018:15:12:04 +0800] "HEAD / HTTP/1.0" 200 0 "-" "curl/7.54.0" "117.136.0.210"

 

2.3 在雲平臺放行WAF回源IP

在對源站配置了WAF服務後,源站原則上只能接收來自WAF的轉發請求。網站雲主機最初的安全組配置如下,這樣任何客戶端都可以直接訪問Web網站。

通過curl命令能直接訪問Web網站。

MacBook:~ user001$ curl 114.67.85.98 -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 24 Dec 2018 07:20:08 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

 

京東雲WAF服務所採用的IP地址為如下:

101.124.31.248/30
101.124.23.116/30
14.116.246.0/29
103.40.15.0/29 

 

因此需要在安全組中刪除允許所有源IP都可訪問Web網站的規則,並增加允許上述地址段可以訪問Web網站的規則。修改後的安全組配置資訊如下圖:

 

這樣Web網站將只接收來自WAF的請求,而不能直接訪問。

# 不能直接訪問源站
MacBook:~ user001$ curl 114.67.85.98 -I
 ^C
 # 可以通過WAF服務訪問源站
MacBook:~ user001$ curl waf-demo.jdcoe.top -I
HTTP/1.1 200 OK
Server: jfe
Date: Mon, 24 Dec 2018 07:52:19 GMT
Content-Type: text/html
Content-Length: 3700
Connection: keep-alive
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

 

2.4 修改域名解析配置

最後,需要在域名解析上修改原域名的解析規則,下面是京東雲的雲解析為例,配置域名waf-demo.jdcoe.top的CNAME為waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com。

 

最後刪除本機域名和IP地址的靜態對映,然後執行dig命令,將看到為域名waf-demo.jdcoe.top配置的CNAME。

[root@waf-demo ~]# dig waf-demo.jdcoe.top +trace
...
waf-demo.jdcoe.top. 60 IN CNAME waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com.
;; Received 107 bytes from 59.37.144.32#53(ns1.jdgslb.com) in 28 ms

 

3 測試Web防護效果

3.1 發起正常訪問

在一臺機器上正常訪問頁面,能獲得正常響應,同時在Web網站上能看到訪問日誌。

[root@jdcoe-bastion ~]# curl waf-demo.jdcoe.top/index.html -I
HTTP/1.1 200 OK
Server: jfe
Date: Mon, 24 Dec 2018 08:35:24 GMT
Content-Type: text/html
Content-Length: 3700
Connection: keep-alive
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

 

Nginx網站訪問日誌

101.124.31.248 - - [24/Dec/2018:16:35:24 +0800] "HEAD /index.html HTTP/1.0" 200 0 "-" "curl/7.29.0" "114.67.95.131"

 

3.2 發起異常攻擊

下面模擬一個"檔案讀取/包含攻擊",也就是說在HTTP請求中包含讀取特定的系統問題。在無WAF防護的情況下,Web網站將返回如下資訊:

[root@waf-demo ~]# curl localhost/index.html/etc/passwd -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.2
Date: Mon, 24 Dec 2018 08:37:15 GMT
Content-Type: text/html
Content-Length: 3650
Connection: keep-alive
ETag: "5a9e5ebd-e42"

 

但是如果通過WAF防護,WAF將檢測出請求中包含了對敏感檔案訪問,因此阻止該訪問請求。

[root@jdcoe-bastion ~]# curl waf-demo.jdcoe.top/index.html/etc/passwd -I
HTTP/1.1 403 Forbidden
Server: jfe
Date: Mon, 24 Dec 2018 08:37:22 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive

 

3.3 安全分析報表

京東雲WAF將根據配置阻斷非法的HTTP請求,並通過安全報表獲得攻擊的來源和攻擊型別的相關資訊。下圖是WAF例項下的waf-demo.jdcoe.top網站的防護報告。

 

4 環境清理

本指南會用到雲主機、公網頻寬和Web應用防火牆等收費資源。如果購買時採用按配置計費,建議刪除資源。

 

總結:

本指南介紹瞭如何利用Web應用防火牆實現一個網站的安全防護。通過Web應用防火牆對HTTP/HTTPS請求的檢測和過濾,減少因應用安全漏洞所造成的資訊洩漏風險。