写点什么

利用京东云 Web 应用防火墙实现 Web 入侵防护

  • 2022 年 9 月 08 日
    北京
  • 本文字数:3736 字

    阅读完需:约 12 分钟

利用京东云Web应用防火墙实现Web入侵防护

摘 要

本指南描述如何利用京东云 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 -vDiG 9.9.4-RedHat-9.9.4-72.el7
# Nginx服务信息[root@waf-demo ~]# service nginx statusRedirecting 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 -IHTTP/1.1 200 OKServer: nginx/1.12.2Date: Mon, 24 Dec 2018 03:22:21 GMTContent-Type: text/htmlContent-Length: 3700Last-Modified: Tue, 06 Mar 2018 09:26:21 GMTConnection: keep-aliveETag: "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.comPING waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com (101.124.23.163): 56 data bytes64 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 lossround-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 -IHTTP/1.1 200 OKServer: jfeDate: Mon, 24 Dec 2018 07:12:03 GMTContent-Type: text/htmlContent-Length: 3700Connection: keep-aliveLast-Modified: Tue, 06 Mar 2018 09:26:21 GMTETag: "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 -IHTTP/1.1 200 OKServer: nginx/1.12.2Date: Mon, 24 Dec 2018 07:20:08 GMTContent-Type: text/htmlContent-Length: 3700Last-Modified: Tue, 06 Mar 2018 09:26:21 GMTConnection: keep-aliveETag: "5a9e5ebd-e74"Accept-Ranges: bytes
复制代码


京东云 WAF 服务所采用的 IP 地址为如下:

101.124.31.248/30101.124.23.116/3014.116.246.0/29103.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 -IHTTP/1.1 200 OKServer: jfeDate: Mon, 24 Dec 2018 07:52:19 GMTContent-Type: text/htmlContent-Length: 3700Connection: keep-aliveLast-Modified: Tue, 06 Mar 2018 09:26:21 GMTETag: "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 -IHTTP/1.1 200 OKServer: jfeDate: Mon, 24 Dec 2018 08:35:24 GMTContent-Type: text/htmlContent-Length: 3700Connection: keep-aliveLast-Modified: Tue, 06 Mar 2018 09:26:21 GMTETag: "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 -IHTTP/1.1 404 Not FoundServer: nginx/1.12.2Date: Mon, 24 Dec 2018 08:37:15 GMTContent-Type: text/htmlContent-Length: 3650Connection: keep-aliveETag: "5a9e5ebd-e42"
复制代码


但是如果通过 WAF 防护,WAF 将检测出请求中包含了对敏感文件访问,因此阻止该访问请求。

[root@jdcoe-bastion ~]# curl waf-demo.jdcoe.top/index.html/etc/passwd -IHTTP/1.1 403 ForbiddenServer: jfeDate: Mon, 24 Dec 2018 08:37:22 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-alive
复制代码


3.3 安全分析报表

京东云 WAF 将根据配置阻断非法的 HTTP 请求,并通过安全报表获得攻击的来源和攻击类型的相关信息。下图是 WAF 实例下的 waf-demo.jdcoe.top 网站的防护报告。


4 环境清理

本指南会用到云主机、公网带宽和 Web 应用防火墙等收费资源。如果购买时采用按配置计费,建议删除资源。


总结:

本指南介绍了如何利用 Web 应用防火墙实现一个网站的安全防护。通过 Web 应用防火墙对 HTTP/HTTPS 请求的检测和过滤,减少因应用安全漏洞所造成的信息泄漏风险。

发布于: 刚刚阅读数: 8
用户头像

拥抱技术,与开发者携手创造未来! 2018.11.20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
利用京东云Web应用防火墙实现Web入侵防护_网络安全_京东科技开发者_InfoQ写作社区