摘 要
本指南描述如何利用京東云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請求的檢測和過濾,減少因應用安全漏洞所造成的資訊泄漏風險,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/508082.html
標籤:其他
上一篇:如何在我的javascript函式中為影像設定自定義寬度和高度?
下一篇:Java反序列化之原生
