概要
随着时间的推移,我们在实践中也不断的演进我们的服务部署方案,希望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安全防护系统架构--转的更多相关文章
-
打破基于OpenResty的WEB安全防护(CVE-2018-9230)
原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...
-
基于Hadoop开发网络云盘系统架构设计方案
基于Hadoop开发网络云盘系统架构设计方案第一稿 引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己 ...
-
基于Flume的美团日志收集系统 架构和设计 改进和优化
3种解决办法 https://tech.meituan.com/mt-log-system-arch.html 基于Flume的美团日志收集系统(一)架构和设计 - https://tech.meit ...
-
基于Hadoop开发网络云盘系统架构设计方案第一稿
引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己的网络云盘系统,方案为初步设计方案,不断完善中. 一 ...
-
python_基于反射模拟Web框架路由系统
根据用户输入的内容,导入模块 #根据用户输入的内容,导入模块 inp = input("请输入模块名: ") print(inp,type(inp)) dd = __import_ ...
-
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...
-
基于HTML5气3D仿真培训系统
根据最近的上线HTML5的燃气3D培训仿真系统.曾经的老系统是採用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但由于这次新产品需求要求能 ...
-
基于Hadoop开发网络云盘系统客户端界面设计初稿
基于Hadoop开发网络云盘系统客户端界面设计初稿 前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹 ...
-
基于OpenResty和Node.js的微服务架构实践
什么是微服务? 传统的单体服务架构是单独服务包,共享代码与数据,开发成本较高,可维护性.伸缩性较差,技术转型.跨语言配合相对困难.而微服务架构强调一个服务负责一项业务,服务可以单独部署,独立进行技术选 ...
随机推荐
-
IP和端口的意义
百科说明 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器.交换机.路由器上用 于连接其他网络设备的接口,如RJ-45端口.S ...
-
QCon 2015 阅读笔记 - 团队建设
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...
-
BZOJ1758: [Wc2010]重建计划
题解: 这题我居然做了一星期?... 平均值的极值其实也可以算是一种分数规划,只不过分母上b[i]=1 然后我们就可以二分这个值.类似与 HNOI最小圈 如果没有 链的长度的限制的话,我们直接两遍df ...
-
Linux Shell 示例精解(第七章 gawk编程)转载
第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量 初始化和类型强制 在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...
-
给当前的URL添加/更新新的参数
/** * 给当前的URL添加/更新新的参数 * @param a 参数 * @param b 值 * @returns {string} 新的参数 * @constructor */ functio ...
-
Python 3 利用 Dlib 19.7 实现人脸识别和剪切
0.引言 利用python开发,借助Dlib库进行人脸识别,然后将检测到的人脸剪切下来,依次排序显示在新的图像上: 实现的效果如下图所示,将图1原图中的6张人脸检测出来,然后剪切下来,在图像窗口中依次 ...
-
复习C#的方法Math.Max和Math.Min
温故而知新,今天学习Math.Max和Min的方法.这2个方法,均需要传入2个参数,返回参数中最大值和最小值. class Ac { public void LeanMathFunction() { ...
-
Android requires compiler compliance level 5.0 or 6.0. Found &#39;1.4&#39; instead.解决方法
今天在eclipse里报这个错误: Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Please ...
-
CodeForces 682B Alyona and Mex (题意水题)
题意:给定一个序列,你可以对这里面的数用小于它的数来代替,最后让你求,改完后的最大的序列中缺少的最小的数. 析:这个题,读了两个多小时也没读懂,要是读懂了,肯定能做出来...没什么可说的,就是尽量凑1 ...
-
spring espect XX but YY
注入和查找问题 HSF Consumer bean, 注入的是beanName='实际接口名', type='HSFSpringConsumerBean', 造成Autowire时查询出来的类型不匹 ...