摘要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请求的检测和过滤,减小因应用安全漏洞所形成的信息泄漏风险。
欢迎点击“连接”了解更多精彩内容