随着时间的推移,我们在实践中也不断的演进我们的服务部署方案,希望WEB防护,不只是单独的云WAF来保护服务,而有其它的相关服务,对WAF进行增强加固的合理配合。我们使用Openresty+系统构建了WAF,而在实际的应用场景中,WAF也要嵌入我们的已有防护体系中,与其它系统一起协同工作。

概要

随着时间的推移,我们在实践中也不断的演进我们的服务部署方案,希望WEB防护,不只是单独的云WAF来保护服务,而有其它的相关服务,对WAF进行增强加固的合理配合。我们使用Openresty+系统构建了WAF,而在实际的应用场景中,WAF也要嵌入我们的已有防护体系中,与其它系统一起协同工作。我们从最开始的服务无保护状态,到日志分析威胁,到流量镜像,都是渐进发展的过程,有了基本的蓝图构想,可以使用各种技术手段去完成安全防护系统的建设。

1 无保护业务系统

从多种的角度出发,我们可以基于被保护系统,构建复合的安全保护方案,代码审计、WAF、反抓站DDOS、日志分析、蜜罐、IDS等各种安全子系统,构建较丰富立体的安全防护系统解决方案,但最开始的系统,往往都是只有纯业务系统,并没有更多的安全系统为其护航,面对各种攻击,显的比较脆弱,被黑客利用漏洞,上传木马、篡改页面等危险攻击操作。

2 代码审计系统

典型的WEB服务,都会涉及到域名解析,负载均衡和代理服务的,多层WEB服务结构,而WEB服务的保护会涉及到,对源代码的安全审计,便于发现被挂马和被恶意篡改的威胁问题。可以用很多的开源审计工具,也可以买商业审计工具,来进行定期的代码审计。审计工具只是一种威胁发现的手段,当我们挖掘出了一些威胁规则,可以通过WAF提供的接口服务,将涉及工具的检查规则,转换成WAF可以理解的安全策略规则,推送给WAF系统进行拦截。

3 反抓站与DDOS防护

在没有WAF系统之前,或者说,如果不用传统的7层流量监听的WAF,我们也可以把各个WEB服务应用的访问志进行落地收集,然后通过大数据统计的方式,挖掘日志中存在的威胁,识别抓站,进行CC或是DDOS的防护,然后通过告诉代理服务器,对统计出的威胁目标进行封禁。今天,基于ZK、Kafka、Spark的大数据工具,可以很好的完成数据统计分析任务,优良的算法,可以实时高效的进行防护拦截攻击。

因为有负载均衡和代理服务器存在,让日志收集可以变的更集中方便。

4 传统云WAF

大数据分析固然很好, 但是做HTTP请求到日志落地也会损失一些数据,比如Post、session、cookies这些数据的检查,使用直接7层HTTP流量分析的模式可以获取更多的一手数据。这种情况,在服务的7层引入了WAF防火墙拦截监听服务,这种传统WAF模式,可以更直接深入到HTTP请求的协议的内部数据,过去我们将业务系统的日志,直接发给反抓站系统,当引入云WAF的时候,我们也可以通过WAF向其推送数据。

之前都是业务系统通过向kafka队列推送数据给反抓站系统进行数据分析,如果使用WAF向反抓站系统推日志数据也可以,是对地集群内的结点收集发送数据有管理成本。对反抓站系统来说WAF就是一个拦截模块,对于WAF来说反抓站就是一个分析模块, 反抓站可以把分析的结果告诉WAF进行拦截,子系统之间进行互动。

5 WAF与蜜罐

WAF与业务服务的连接方式,把原有域名指向,指向WAF集群,再由WAF集群回源到服务的负载均衡,完成http流量的分的拦截到放过,交给原有业务服务响应。WAF系统本身也提供了类似REST接口,将代码审计的威胁和反抓站DDOS的威胁,通过接口传给WAF拦截。这种模式,意味着,如是有人直接攻击WAF,使用UDP等垃圾数据攻击。这种情况,保留流量包pcap的原始数据,对后期分析就比较有意义了。

6 攻击流量记载

如果我们不想把WAF和业务进行串接,只想做流量监听,我们也可以不把DNS指向WAF集群,而是在代量服务那层通过HTTP-MIRROR等类似镜像技术,将HTTP流量复制一份到WAF,然后不做回源,将流量引入fake upstream,fake upsatream的响应会被上层的服务丢弃,如果我们想将威胁流量和威胁流量进行分开引流,可以再加入一个honeypot的upstream,收集威胁流量,这样主干业务上,请求的都是正常请求响应的,而在镜像给WAF的流量中,可以识别生产流量中存在的威胁请求,将威胁请求切到honeypot上进行威胁分流,因为不回源,只能做分类,不能做诱导性的数据收集,串接WAF的方式就可以,但如果真是把威胁流量引到真的honeypot上,honeypot本身也会发出报警,并收集payload。

7 日志中心

如果不满足于,只是将威胁流量记录到Honeypot上,也可以将流量在动态切换到Honeypot的服务时, 通过pcap录制技术将流量包记载,类似netflow的模式,按时间分割流量保存,并可重放。这样就不仅仅有日志文本、payload、还有原始的请求包,通过类似wireshark等工具仔细分析,后期也可以通过重放技术,把当时攻击发生时的流量,重放到靶机测机上,进行案发现场分析。

8 大数据与威胁报警

关WAF日志部分,WAF通过传统的Syslog吐出高中低危的报警事件和数据,更便于我们对攻击的行为的分析和定位,我们也可以将syslog日志数据收集到,自建的数据中心中,进行后期的分析与预警,有了报警数据,我们也可以将数据与其它子系统进行数据对碰。

9 总结

围绕被保护的WEB构建代码审计服务、WAF、反抓站分析、蜜罐、日志分析报警和Payload流量记载等多种方式,来监听WEB服务,发现攻击威胁,定位威胁。可以根据实际的应用场景和自身情况,选择商用服务、开源服务、或是自主构建安全系统都可以。 采用模块化的构建方法,每个子系统可能都有多种的实现解决方案,但始终离不开的都是流量的监听、数据落地、与后期分析、预警报告等阶段,后面我们也会选择使用具体的工具,来完成图上的安全系统建设。

基于Openresty+的WEB安全防护系统架构--转的更多相关文章

  1. 打破基于OpenResty的WEB安全防护(CVE-2018-9230)

    原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 ​ OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...

  2. 基于Hadoop开发网络云盘系统架构设计方案

    基于Hadoop开发网络云盘系统架构设计方案第一稿 引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己 ...

  3. 基于Flume的美团日志收集系统 架构和设计 改进和优化

    3种解决办法 https://tech.meituan.com/mt-log-system-arch.html 基于Flume的美团日志收集系统(一)架构和设计 - https://tech.meit ...

  4. 基于Hadoop开发网络云盘系统架构设计方案第一稿

    引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己的网络云盘系统,方案为初步设计方案,不断完善中. 一 ...

  5. python_基于反射模拟Web框架路由系统

    根据用户输入的内容,导入模块 #根据用户输入的内容,导入模块 inp = input("请输入模块名: ") print(inp,type(inp)) dd = __import_ ...

  6. 系统架构:Web应用架构的新趋势---前端和后端分离的一点想法

    最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...

  7. 基于HTML5气3D仿真培训系统

    根据最近的上线HTML5的燃气3D培训仿真系统.曾经的老系统是採用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但由于这次新产品需求要求能 ...

  8. 基于Hadoop开发网络云盘系统客户端界面设计初稿

    基于Hadoop开发网络云盘系统客户端界面设计初稿 前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹 ...

  9. 基于OpenResty和Node.js的微服务架构实践

    什么是微服务? 传统的单体服务架构是单独服务包,共享代码与数据,开发成本较高,可维护性.伸缩性较差,技术转型.跨语言配合相对困难.而微服务架构强调一个服务负责一项业务,服务可以单独部署,独立进行技术选 ...

随机推荐

  1. 【Java】 剑指offer(53-3) 数组中数值和下标相等的元素

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程 ...

  2. 试安装pyQt5+eric6+python安装

    1.先安装pip最新版 安装之前把sit-packages----pip旧版本删掉 然后再cmd输入pip install --user update pip 2.安装pyqt5 pip instal ...

  3. python selenium-webdriver 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  4. 《Gradle权威指南》--Gradle任务

    No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...

  5. HihoCoder - 1078 【区间修改】

    题目链接:https://vjudge.net/contest/241135#problem/A 题目大意:(与区间修改模板题相同) 输入 每个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的 ...

  6. LeetCode刷题笔记--Python--28. 实现strStr()

    class Solution: def strStr(self, haystack, needle): """ :type haystack: str :type nee ...

  7. STL之双向队列(dequeue)

    //双向队列 deque #include <deque> #include <cstdio> #include <algorithm> using namespa ...

  8. OSINT系列:网站信任评估WOT

     OSINT系列:网站信任评估WOT Web of Trust(WOT)是芬兰的一家网站信任评估服务公司.它通过收集用户对网站的评价,来评估网站的可信任度.在该公司网站www.mywot.com,用户 ...

  9. [ 转载 ]Java:成员变量,局部变量,静态变量的区别

    精简后方便自己理解. 成员变量 我们研究一个事物: 属性:外在特征:如身高,体重 行为:能做什么:如说话,打球. 在Java语言中,最基本的单位是类(class),类就是用来体现事物的. 属性:类中的 ...

  10. BZOJ.2834.回家的路(最短路Dijkstra 拆点)

    题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #inclu ...