• 利用京东云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 -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)
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在配置完域名和公网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
    
    • 1
    • 2
    • 3
    • 4

    通过互联网远程访问该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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    应用安全网站不允许通过生成的CNAME或者IP地址进行访问,如果直接访问,将报“Bad Request“错误。

    MacBook:etc user001$ curl waf-demo.jdcoe.top-15f08249c274.jdcloudwaf.com
    

    Bad Request

    MacBook:etc user001$ MacBook:etc user001$ curl 101.124.23.163

    Bad Request

    MacBook:etc user001$
    • 1
    • 2
    • 3
    • 4

    修改本机IP地址101.124.23.163和域名waf-demo.jdcoe.top的映射,在Linux下,域名配置文件为/etc/hosts。

    1101.124.23.163 waf-demo.jdcoe.top
    
    • 1

    然后在本地执行如下命令“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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    此时,看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"
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    101.124.31.248/30
    101.124.23.116/30
    14.116.246.0/29
    103.40.15.0/29 
    
    • 1
    • 2
    • 3
    • 4

    因此需要在安全组中删除允许所有源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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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"
    
    • 1

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    但是如果通过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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.3 安全分析报表

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

    4 环境清理

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

    总结:

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

  • 相关阅读:
    Compose 组件 - 分页器 HorizontalPager、VerticalPager
    复习单片机部分:1.开发板功能及使用介绍 2.51 单片机介绍 3.数字电路与 C 语言基础
    UE4 基础篇十四:自定义插件
    正确认识HTTP和HTTPS协议及其在Java Web项目中的应用!
    【vue会员管理系统】篇六之退出系统功能
    Node.js的基本使用(四)项目实战——项目初始化及用户注册登录接口的实现
    分布式事务解决方案
    《JavaSE-第十六章》之ArrayList源码与扩容机制
    一文掌握CodiMD安装与使用
    【Element UI】解决 el-button 禁用状态下,el-tooltip 提示不生效问题
  • 原文地址:https://blog.csdn.net/jdcdev_/article/details/126761841