摘要html
本指南描述如何利用京東雲Web應用防火牆(簡稱WAF),對一個簡單的網站(不管運行在京東雲、其它公有云或者IDC)進行Web徹底防禦的全過程。該指南包括以下內容:nginx
準備環境 在京東雲上準備Web網站 購買京東雲Web應用防火牆實例算法
配置Web應用防火牆 增長Web應用防火牆實例的網站配置 在雲平臺放行WAF回源IP 本地驗證配置 修改域名解析配置安全
測試Web防禦效果 發起正常訪問 發起異常攻擊 分析安全報表bash
準備環境服務器
1 在京東雲上準備Web網站負載均衡
在京東雲上選擇CentOS系統建立一臺雲主機,分配公網IP,安裝Nginx,並在域名解析服務上配置域名和IP的映射。具體的Web應用信息以下:curl
1# 操做系統信息 2[root@waf-demo ~]# cat /etc/redhat-release 3CentOS Linux release 7.6.1810 (Core) 4 5# 安裝dig命令,該命令可顯示域名的解析狀況 6bash 7[root@waf-demo ~]# yum install bind-utils -y 8[root@waf-demo ~]# dig -v 9DiG 9.9.4-RedHat-9.9.4-72.el7 10 11# Nginx服務信息 12[root@waf-demo ~]# service nginx status 13Redirecting to /bin/systemctl status nginx.service 14● nginx.service - The nginx HTTP and reverse proxy server 15 Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) 16...
在配置完域名和公網IP映射後,經過dig命令可得到域名解析狀況。測試
1[root@waf-demo ~]$ dig waf-demo.jdcoe.top +trace 2... 3waf-demo.jdcoe.top. 60 IN A 114.67.85.98 4;; Received 63 bytes from 153.99.179.161#53(ns2.jdgslb.com) in 13 ms
經過互聯網遠程訪問該Web網站。網站
1MacBook:~ user001$ curl http://waf-demo.jdcoe.top -I 2HTTP/1.1 200 OK 3Server: nginx/1.12.2 4Date: Mon, 24 Dec 2018 03:22:21 GMT 5Content-Type: text/html 6Content-Length: 3700 7Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT 8Connection: keep-alive 9ETag: "5a9e5ebd-e74" 10Accept-Ranges: bytes
2 購買京東雲Web應用防火牆實例
進入京東雲控制檯,點擊雲安全, Web應用防火牆, 套餐購買, 進入"Web應用防火牆 - 購買「界面,選擇須要企業版套餐(每種套餐規格請參考套餐詳情)。具體的購買界面以下圖:
在購買完成後,將在實例管理界面中看到所購買的實例信息。
配置Web應用防火牆
在使用京東雲Web應用防火牆保護網站前,須要完成下列配置,才能實現用戶提交的HTTP/HTTPS訪問請求經過Web應用防火牆檢測後,再發送到Web網站。
1 配置Web應用防火牆實例的防禦網站
在Web應用防火牆界面,點擊網站配置,添加網站, 在下面界面中輸入相關配置信息。
界面參數具體描述以下:
在網站防禦配置界面中,設置Web應用攻擊防禦狀態爲On模式爲防禦,防禦規則策略等級爲嚴格。設置CC安全防禦狀態爲On,模式爲正常。
2 本地驗證配置
在網站配置列表界面中,能得到爲被防禦網站生成的CNAME。針對域名「waf-demo.jdcoe.top",生成的WAF CNAME是waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com.
經過執行ping命令,能得到Web應用防火牆的IP地址爲101.124.23.163。
1MacBook:etc user001$ ping waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com 2PING waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com (101.124.23.163): 56 data bytes 364 bytes from 101.124.23.163: icmp_seq=0 ttl=49 time=57.525 ms 4^C 5--- waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com ping statistics --- 61 packets transmitted, 1 packets received, 0.0% packet loss 7round-trip min/avg/max/stddev = 57.525/57.525/57.525/0.000 ms
應用安全網站不容許經過生成的CNAME或者IP地址進行訪問,若是直接訪問,將報「Bad Request「錯誤。
1MacBook:etc user001$ curl waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com 2<h1> Bad Request </h1>MacBook:etc user001$ 3MacBook:etc user001$ curl 101.124.23.163 4<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應用防火牆。
1MacBook:~ user001$ curl waf-demo.jdcoe.top -I 2HTTP/1.1 200 OK 3Server: jfe 4Date: Mon, 24 Dec 2018 07:12:03 GMT 5Content-Type: text/html 6Content-Length: 3700 7Connection: keep-alive 8Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT 9ETag: "5a9e5ebd-e74" 10Accept-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"
3 在雲平臺放行WAF回源IP
在對源站配置了WAF服務後,源站原則上只能接收來自WAF的轉發請求。網站雲主機最初的安全組配置以下,這樣任何客戶端均可以直接訪問Web網站。
經過curl命令能直接訪問Web網站。
1MacBook:~ user001$ curl 114.67.85.98 -I 2HTTP/1.1 200 OK 3Server: nginx/1.12.2 4Date: Mon, 24 Dec 2018 07:20:08 GMT 5Content-Type: text/html 6Content-Length: 3700 7Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT 8Connection: keep-alive 9ETag: "5a9e5ebd-e74" 10Accept-Ranges: bytes
京東雲WAF服務所採用的IP地址爲以下:
1101.124.31.248/30 2101.124.23.116/30 314.116.246.0/29 4103.40.15.0/29
所以須要在安全組中刪除容許全部源IP均可訪問Web網站的規則,並增長容許上述地址段能夠訪問Web網站的規則。修改後的安全組配置信息以下圖:
這樣Web網站將只接收來自WAF的請求,而不能直接訪問。
1# 不能直接訪問源站 2MacBook:~ user001$ curl 114.67.85.98 -I 3^C 4# 能夠經過WAF服務訪問源站 5MacBook:~ user001$ curl waf-demo.jdcoe.top -I 6HTTP/1.1 200 OK 7Server: jfe 8Date: Mon, 24 Dec 2018 07:52:19 GMT 9Content-Type: text/html 10Content-Length: 3700 11Connection: keep-alive 12Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT 13ETag: "5a9e5ebd-e74" 14Accept-Ranges: bytes
4 修改域名解析配置
最後,須要在域名解析上修改原域名的解析規則,下面是京東雲的雲解析爲例,配置域名waf-demo.jdcoe.top的CNAME爲 waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com。
最後刪除本機域名和IP地址的靜態映射,而後執行dig命令,將看到爲域名waf-demo.jdcoe.top配置的CNAME。
1[root@waf-demo ~]# dig waf-demo.jdcoe.top +trace 2... 3waf-demo.jdcoe.top. 60 IN CNAME waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com. 4;; Received 107 bytes from 59.37.144.32#53(ns1.jdgslb.com) in 28 ms
測試Web防禦效果
1 發起正常訪問
在一臺機器上正常訪問頁面,能得到正常響應,同時在Web網站上能看到訪問日誌。
1[root@jdcoe-bastion ~]# curl waf-demo.jdcoe.top/index.html -I 2HTTP/1.1 200 OK 3Server: jfe 4Date: Mon, 24 Dec 2018 08:35:24 GMT 5Content-Type: text/html 6Content-Length: 3700 7Connection: keep-alive 8Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT 9ETag: "5a9e5ebd-e74" 10Accept-Ranges: bytes
Nginx網站訪問日誌
1101.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"
2 發起異常攻擊
下面模擬一個"文件讀取/包含攻擊",也就是說在HTTP請求中包含讀取特定的系統問題。在無WAF防禦的狀況下,Web網站將返回以下信息:
1[root@waf-demo ~]# curl localhost/index.html/etc/passwd -I 2HTTP/1.1 404 Not Found 3Server: nginx/1.12.2 4Date: Mon, 24 Dec 2018 08:37:15 GMT 5Content-Type: text/html 6Content-Length: 3650 7Connection: keep-alive 8ETag: "5a9e5ebd-e42"
可是若是經過WAF防禦,WAF將檢測出請求中包含了對敏感文件訪問,所以阻止該訪問請求。
1[root@jdcoe-bastion ~]# curl waf-demo.jdcoe.top/index.html/etc/passwd -I 2HTTP/1.1 403 Forbidden 3Server: jfe 4Date: Mon, 24 Dec 2018 08:37:22 GMT 5Content-Type: text/html 6Content-Length: 162 7Connection: keep-alive
3 安全分析報表
京東雲WAF將根據配置阻斷非法的HTTP請求,並經過安全報表得到攻擊的來源和攻擊類型的相關信息。下圖是WAF實例下的waf-demo.jdcoe.top網站的防禦報告。
環境清理
本指南會用到雲主機、公網帶寬和Web應用防火牆等收費資源。若是購買時採用按配置計費,建議刪除資源。
總結: 本指南介紹瞭如何利用Web應用防火牆實現一個網站的安全防禦。經過Web應用防火牆對HTTP/HTTPS請求的檢測和過濾,減小因應用安全漏洞所形成的信息泄漏風險。
歡迎點擊「連接」瞭解更多精彩內容