找回密码
 注册帐号
查看: 4549|回复: 0

防护DDoS,我们应当从哪几个方向着手?

[复制链接]
发表于 2019-8-22 14:32 | 显示全部楼层 |阅读模式

DDoS防御与DDoS攻击双方总是此消彼长,每一位系统管理员都为自己能够抵御DDoS攻击而自豪,因为这是对自己水平肯定。

面对现在DDoS泛滥的问题,新睿云把这里把自身的经验和小技巧分享给您!让您的网站避免遭受攻击,虽然它不一定是觉得的好用,但绝对可以让您避免受到大多数攻击风险。


                               
登录/注册后可看大图

以下是新睿云这里总结的技巧:

1.尽量避免使用Windows Server

实践表明,在DDoS的情况下,在Windows上运行的站点(2003或2008 都一样)容易遭受DDoS攻击。使用Windows难以抵抗的原因就是网络堆栈:当存在大量连接时,服务器肯定会开始响应不佳。我们不知道为什么Windows Server在这种情况该怎么避免,或许是系统本身底层的问题,但我们遇到过这种情况不止一两次。因此,本文将重点讲述在Linux上运行时对DDoS攻击的防护。如果你是一个相对新内核(2.6以上版本)的使用着,那么iptables和ipset实用程序(用于快速添加IP地址)作为主要工具,您可以使用它快速禁止机器人。

2.如非必要可以放弃Apache

第二个重要条件是放弃Apache。Apache从根本上(简直不可救药)容易受到最危险的Slowloris攻击,这种攻击几乎可以充斥服务器。为了对抗各种类型的Slowloris,Apache用户首先发明了Anti-slowloris.diff补丁,然后是mod_noloris,然后是mod_antiloris,mod_limitipconn,mod_reqtimeout ...但是如果你想在晚上安静地睡觉,那么在架构层面上采用对Slowloris无懈可击的HTTP服务器会更容易代码。因此,我们所有进一步的配方都基于nginx用于前端的假设。

抵御DDoS

如果DDoS来了怎么办?传统的自我防御技术是读取HTTP服务器的日志文件,为grep编写模式(捕获机器人请求)并禁止任何属于它的人。运气好的话这项技术将有效。僵尸网络有两种类型,一种是快速打死你网站服务器,另一种则让您时断时续。第一个一次杀死所有内容,但所有内容都完全出现在日志中,如果您对它们进行编程并禁止所有IP地址,那么您就是胜利者。第二个僵尸网络轻轻缓缓侵蚀您的网站,但你必须禁止它,也许是一天,也许是几天。对任何管理员来说都很重要:如果你计划与grep战斗,你必须准备好花几天时间来对抗攻击。

3.使用testcookie模块

也许是本文最重要,最有效和最可操作的配方。如果DDoS进入您的站点,那么testcookie-nginx模块可以成为最有效的反击方式由Habrauser @kyprizel开发。这个想法很简单。大多数情况下,实现HTTP泛洪的僵尸程序非常愚蠢,并且没有HTTP cookie和重定向机制。有时会遇到更高级的 - 这些可以使用cookie并处理重定向,但几乎从来没有DoS机器人不带有完整的JavaScript引擎(尽管这越来越常见)。在L7 DDoS攻击期间,Testcookie-nginx可用作机器人和后端之间的快速过滤器,允许您过滤掉垃圾请求。这些支票包含哪些内容?客户端是否知道如何执行HTTP重定向,它是否支持JavaScript,它是否是它声称的浏览器(因为JavaScript在各处都是不同的,如果客户端说它是,比如Firefox,那么我们可以检查它)。使用不同方法使用cookie实现验证:

“Set-Cookie”+使用301 HTTP位置重定向;

使用HTML元刷新“Set-Cookie”+重定向;

任意模板,你可以使用JavaScript。

为了避免自动解析,验证cookie可以使用AES-128加密,然后在JavaScript的客户端解密。新版本的模块能够通过Flash设置cookie,这也允许您有效地过滤掉机器人(Flash通常不支持),但它也阻止了许多合法用户(几乎所有移动设备)的访问。值得注意的是,开始使用testcookie-nginx非常简单。特别是,开发人员使用nginx的配置样本提供了几个可理解的使用示例(针对各种攻击案例)。

除了优点,testcookie还有缺点:

削减所有机器人,包括Googlebot。如果您打算持续离开testcookie,请确保您不会从搜索结果中消失;

使用Links,w3m浏览器等为用户创建问题;

不能从装备有成熟浏览器引擎的机器人中获取JavaScript。

简而言之,testcookie_module并不普及。但是从许多方面来看,例如Java和C#中的原始工具包,它会有所帮助。因此,你切断了部分威胁。

4.代码444

DDoS的目标通常成为网站资源最密集的部分。典型示例是执行复杂数据库查询的搜索。当然,攻击者可以通过立即向搜索引擎收取数万个查询来利用这一点。我们能做什么?暂时禁用搜索。让客户端无法使用内置工具搜索必要的信息,但整个主站点将保持运行状态,直到找到所有问题的根源。Nginx支持非标准代码444,它允许您简单地关闭连接而不返回任何内容:

location /search { return 444; }

因此,例如,可以通过URL快速实现过滤。如果您确定位置/搜索请求仅来自僵尸程序(例如,您的信心基于您的站点根本没有/搜索部分这一事实),您可以在服务器上安装ipset程序包并使用简单的shell脚本禁用机器人:

ipset -N ban iphash tail -f access.log | while read LINE; do echo "$LINE" | / cut -d'"' -f3 | cut -d' ' -f2 | grep -q 444 && ipset -A ban "${L%% *}"; done

如果日志文件的格式是非标准的(未组合),或者您希望在响应状态之外的其他基础上禁用它,则可能需要使用正则表达式替换cut。

5.禁止使用地理标记

非标准响应代码444对于基于地理的客户端的操作禁止也是有用的。您可以严格限制您感到不舒服的个别国家/地区。比如说,顿河畔罗斯托夫的在线相机商店不太可能在埃及有很多用户。这不是一个好方法(坦率地说 - 恶心),因为GeoIP数据不准确,而Rostovites有时会在度假时飞往埃及。但如果您没有任何损失,请按照说明操作:

连接nginx GeoIP模块(wiki.nginx.org/HttpGeoipModule)。

在访问日志中打印地理位置信息。

此外,修改上面的shell脚本,编写nginx accesslog并将按地理标志踢出的客户端添加到禁令中。

例如,如果机器人主要来自中国,那么这可能会有所帮助。

6.神经网络(PoC)

最后,你可以重复使用神经网络PyBrain的haberuser @SaveTheRbtz的经验,填写日志并分析请求(habrahabr.ru/post/136237)。该方法正在工作,虽然不是通用的:)。但是,如果您真的了解您网站的内部 - 而且您作为系统管理员应该 - 那么您有可能在最悲惨的情况下,基于神经网络的工具,预先收集的培训和信息将对您有所帮助。在这种情况下,在DDoS启动之前拥有access.log是非常有用的,因为它描述了几乎100%的合法客户端,因此,它是用于训练神经网络的优秀数据集。此外,日志中的眼睛并不总是可以看到机器人

如果想要知道更多抵御DDoS的知识请阅读《所有黑客都能进行20GDDoS攻击?本文详细讲述黑客界的“等级链”https://www.xinruiyun.cn/ddos/2107.html

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

Archiver|小黑屋|手机版|外贸之家

GMT+8, 2024-3-29 02:08

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表