共计 5418 个字符,预计需要花费 14 分钟才能阅读完成。
摘 要
本指南形容如何利用京东云 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 申请的检测和过滤,缩小因利用安全漏洞所造成的信息透露危险。