花了几个月把系统开发出来,那时候云计算还不普及,专门买了服务器,在IDC机房托管,把系统部署上去,然后就美滋滋地等着收钱了。
第二天,我登录到服务器,想从Apache访问日志中看看网站的访问情况,一看就吓了一跳,日志文件竟然有好几个G!
我心想刚上线的网站,这么快就火了?
仔细一看,不对,这些日志没有几个是正常的,都是在访问一些奇奇怪怪的东西,类似这样:
GET /wp-admin/GET /phpmyadmin/GET /server-status?autoPOST /login.php?username=admin'--&password=fooGET /comments.php?c=%3Cscript%3Ealert(1)%3C%2Fscript%3EPOST /upload.phpGET /uploads/shell.php?cmd=cat+/etc/passwd
我突然意识到:这是黑客攻击!
在这方面我经验很少,立刻懵了,网站才上线一天,黑客就迅速把服务器攻占了?
服务器上是不是已经被黑客留下来后门?
这个服务器还能不能用?
......
最后痛定思痛,解决方案是:重装系统。
这件事我印象非常深刻:没有防火墙的Web应用,在互联网上几乎就是裸奔。
现在再做类似的应用,必然要先上一个Web Appliaction Firewall (WAF)。
比如说,国产的开源Web应用防火墙:雷池。

雷池WAF是一款开源的、简单高效的Web应用防火墙,不但能有效防御各类Web攻击,还能提供访问频率限制、人机验证、动态防护等功能。
它的原理很简单:以反向代理方式接入,优先于网站服务器接收流量,对流量中的攻击行为进行检测和清洗,将清洗过后的流量转发给网站服务器。

雷池全球装机量超40万台,日均处理300亿次请求,检出率76.17%,误报率仅0.22%。
雷池有一些软硬件的依赖,例如需要Linux操作系统,Docker 20.10.14版本以上,x86_64架构支持ssse3等,很容易满足,具体详情可以看官方文档。
然后就可以一键安装,等几分钟就好。
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
安装成功以后,就可以打开浏览器访问雷池控制台了
https://<safeline-ip>:9443/

作为Web应用防火墙,雷池防护Web攻击自然不在话下,常见的SQL注入攻击、XSS攻击、路径穿越攻击、代码注入攻击等都能轻松应对。

这些Web攻击大家应该都很熟悉了,不再展开介绍。雷池的准确率、检出率都非常高,误报率,漏报率非常低,性能指标优于全球的一些知名产品:

这么强悍的能力,一个重要原因就是雷池采用了语义分析算法。
传统的防火墙使用的是正则表达式匹配的方式,例如它会用这个表达式union[\w\s]*?select去检查流量数据,如果发现包含 union 和 select 这两个单词,就会被认为是SQL 注入攻击。
但是这种方式,不但可能会误报,黑客也可以轻松绕过,他可以可以用注释、空白、换行、分隔符、拼接或编码把关键字“拆开”而不影响执行。
例如只要在在 union 和 select 中间插入了注释字符:union /**/ select
这样破坏了关键字的特征,传统防火墙就检测不出来了。
而雷池的语义分析就不一样了,它并不是仅仅看字符或正则,而是理解请求意图和结构。
它内置了多种编程语言的编译器,对HTTP数据进行解码后,根据不同的语言(SQL,HTML/JS,命令行)找到不同的语法编译器,然后判断该数据是否会构成攻击。
很明显,这种方式深入了语义,精确理解了用户输入的数据,防护效果肯定有质的提升。
Web应用最大的特点就是:代码(JS+HTML+CSS)会被发到用户的浏览器端执行,一览无余,一点儿“隐私”都没有。
这对于爬虫、漏洞扫描、自动化攻击等行为提供了“温床”,针对这一点,雷池提供了动态防护的功能,可以对HTML,JS等代码进行动态加密,保证每一次访问时代码都能以不同的、随机的形态呈现,这就让爬虫和攻击者难以“理解”网站内容,大大增加了攻击者的难度。

比如这个JavaScript:

被雷池进行动态加密以后变成了这个样子,很难辨认了。

除此之外,雷池防火墙还能主动进行“人机验证”:

通过检测客户端的行为,比如鼠标键盘行为是否符合人类习惯,从而判断它是真人在使用,还是被自动化程序控制。

如果是真人自然放行,否则就会把它“踢”出去。
对Web服务器有一类非常“恶心”的攻击叫做“CC 攻击”( Challenge Collapsar 攻击),是一种分布式拒绝攻击的一种。
攻击者会控制大量肉鸡(被感染的电脑)或代理服务器,伪装成正常浏览器访问网站,如不断访问首页、搜索页、接口等。每个请求看起来都合法(有正常的 User-Agent、Referer、Cookie),但数量极其巨大。
最终让服务器过载,网页卡死、数据库阻塞或服务崩溃。

由于请求看起来都合法,这种攻击非常难以防御。
针对这种情况,雷池防火墙提供了“频率限制”的功能,如果某个 IP 在短时间内发起大量 HTTP 请求,就阻断该 IP 后续的所有访问,要求它通过人机验证,确保是真人才行。

还有不少应用存在高峰流量的情况,比如抢票,热点事件等,如果不进行限流,服务很容易被海量的请求冲垮,谁也用不了。
当然程序员可以写代码,深入到网站内部去实现限流功能,但是很麻烦,使用雷池的“等待室”功能,根本不用对应用做任何改变就可以实现限流。

这里配置的在线用户是超过了100人就需要进入等待室等候了,而进入应用的用户,如果超过3分钟在网页上没有操作,对不起,那就去等候室重新排队吧。
第一次看到这个功能可能会觉得奇怪,身份认证不是应用程序自己应该实现的吗?防火墙为什么要来掺和?
其实,很多旧系统、内网系统的认证是很弱的,甚至是没有的。
比如你开发了一个MQ的监控工具,部署到了服务器上,就是给内部的小团队使用,这时候再从头把身份认证搞起来是很麻烦的。
但是没有身份认证的Web网站,将会给服务器安全带来巨大的安全隐患,黑客很容易从这个“城墙缺口”进入。
这时候雷池的“身份认证”就可以上场了:

只需要在被保护的应用中简单地设置一下,配置一下用户账号,你的应用瞬间就拥有了身份认证的能力,非常方便。

回想当年那个网站,如果有雷池这样的WAF帮我镇守,肯定不会被黑掉了。
如果你也有Web网站要上线,务必要把安全防护做好,强烈建议考虑下雷池这个非常优秀的开源的WAF,它的语义分析算法(深度解码HTTP载荷)、Bot防护(人机验证、动态防护、防重放)、CC防护(频率限制、等候室)、身份认证等功能,会让你的网站高枕无忧。
本文链接:https://kinber.cn/post/5851.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
