首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用 Apache 服务器模块保护您的网站免受应用层 DOS 攻击

通过配置普通的网页服务器,可以保护网页免受应用层攻击,至少是适度的防护。防止这种形式的攻击是非常重要的,因为 Cloudflare 最近 报告称 网络层攻击的数量正在减少,而应用层攻击的数量则在增加。

-- Elliot Cooper

本文导航

◈ 在 Ubuntu 16.04 上安装 mod_evasive

22%

◈ 配置 mod_evasive

50%

◈ 测试

73%

编译自 | https://bash-prompt.net/guides/mod_proxy/

作者 | Elliot Cooper

译者 | jessie-pang

有多种可以导致网站下线的攻击方法,比较复杂的方法要涉及数据库和编程方面的技术知识。一个更简单的方法被称为“拒绝服务Denial Of Service”(DOS)攻击。这个攻击方法的名字来源于它的意图:使普通客户或网站访问者的正常服务请求被拒绝。

一般来说,有两种形式的 DOS 攻击:

☉ OSI 模型的三、四层,即网络层攻击

☉ OSI 模型的七层,即应用层攻击

第一种类型的 DOS 攻击——网络层,发生于当大量的垃圾流量流向网页服务器时。当垃圾流量超过网络的处理能力时,网站就会宕机。

第二种类型的 DOS 攻击是在应用层,是利用合法的服务请求,而不是垃圾流量。当页面请求数量超过网页服务器能承受的容量时,即使是合法访问者也将无法使用该网站。

本文将着眼于缓解应用层攻击,因为减轻网络层攻击需要大量的可用带宽和上游提供商的合作,这通常不是通过配置网络服务器就可以做到的。

通过配置普通的网页服务器,可以保护网页免受应用层攻击,至少是适度的防护。防止这种形式的攻击是非常重要的,因为Cloudflare

[1]

最近报告称

[2]

网络层攻击的数量正在减少,而应用层攻击的数量则在增加。

本文将介绍如何使用zdziarski

[3]

开发的 Apache2 的模块mod_evasive

[4]

另外,mod_evasive 会阻止攻击者通过尝试数百个用户名和密码的组合来进行猜测(即暴力攻击)的企图。

mod_evasive 会记录来自每个 IP 地址的请求的数量。当这个数字超过相应 IP 地址的几个阈值之一时,会出现一个错误页面。错误页面所需的资源要比一个能够响应合法访问的在线网站少得多。

在 Ubuntu 16.04 上安装 mod_evasive

Ubuntu 16.04 默认的软件库中包含了 mod_evasive,名称为 “libapache2-mod-evasive”。您可以使用 来完成安装:

现在我们需要配置 mod_evasive。

它的配置文件位于 。默认情况下,所有模块的设置在安装后都会被注释掉。因此,在修改配置文件之前,模块不会干扰到网站流量。

第一部分的参数的含义如下:

◈ - 正在访问网站的 IP 地址列表及其请求数的当前列表。

◈ - 在一定的时间间隔内,每个页面的请求次数。时间间隔由 DOSPageInterval 定义。

◈ - mod_evasive 统计页面请求次数的时间间隔。

◈ - 与 相同,但统计的是来自相同 IP 地址对网站内任何页面的请求数量。

◈ - mod_evasive 统计网站请求次数的时间间隔。

◈ - 某个 IP 地址被加入黑名单的时长(以秒为单位)。

如果使用上面显示的默认配置,则在如下情况下,一个 IP 地址会被加入黑名单:

◈ 每秒请求同一页面超过两次。

◈ 每秒请求 50 个以上不同页面。

如果某个 IP 地址超过了这些阈值,则被加入黑名单 10 秒钟。

这看起来可能不算久,但是,mod_evasive 将一直监视页面请求,包括在黑名单中的 IP 地址,并重置其加入黑名单的起始时间。只要一个 IP 地址一直尝试使用 DOS 攻击该网站,它将始终在黑名单中。

其余的参数是:

◈ - 用于接收 DOS 攻击信息和 IP 地址黑名单的电子邮件地址。

◈ - 检测到 DOS 攻击时运行的命令。

◈ - 用于存放 mod_evasive 的临时文件的目录。

配置 mod_evasive

默认的配置是一个很好的开始,因为它不会阻塞任何合法的用户。取消配置文件中的所有参数( 除外)的注释,如下所示:

必须要创建日志目录并且要赋予其与 apache 进程相同的所有者。这里创建的目录是 ,并且在 Ubuntu 上将该目录的所有者和组设置为 ,与 Apache 服务器相同:

在编辑了 Apache 的配置之后,特别是在正在运行的网站上,在重新启动或重新加载之前,最好检查一下语法,因为语法错误将影响 Apache 的启动从而使网站宕机。

Apache 包含一个辅助命令,是一个配置语法检查器。只需运行以下命令来检查您的语法:

如果您的配置是正确的,会得到如下结果:

但是,如果出现问题,您会被告知在哪部分发生了什么错误,例如:

如果您的配置通过了 configtest 的测试,那么这个模块可以安全地被启用并且 Apache 可以重新加载:

mod_evasive 现在已配置好并正在运行了。

测试

为了测试 mod_evasive,我们只需要向服务器提出足够的网页访问请求,以使其超出阈值,并记录来自 Apache 的响应代码。

一个正常并成功的页面请求将收到如下响应:

但是,被 mod_evasive 拒绝的将返回以下内容:

以下脚本会尽可能迅速地向本地主机(127.0.0.1,localhost)的 80 端口发送 HTTP 请求,并打印出每个请求的响应代码。

你所要做的就是把下面的 bash 脚本复制到一个文件中,例如 :

这个脚本的部分含义如下:

◈ - 这是一个发出网络请求的命令。

◈ - 隐藏进度表。

◈ - 仅显示响应头部信息。

◈ - 打印文件的第一部分。

◈ - 只显示第一行。

然后赋予其执行权限:

在启用 mod_evasive之前,脚本运行时,将会看到 50 行 “HTTP / 1.1 200 OK” 的返回值。

但是,启用 mod_evasive 后,您将看到以下内容:

前两个请求被允许,但是在同一秒内第三个请求发出时,mod_evasive 拒绝了任何进一步的请求。您还将收到一封电子邮件(邮件地址在选项 中设置),通知您有 DOS 攻击被检测到。

mod_evasive 现在已经在保护您的网站啦!

via:https://bash-prompt.net/guides/mod_proxy/

作者:Elliot Cooper

[6]

译者:jessie-pang校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

LCTT 译者

jessie-pang

共计翻译:6篇

贡献时间:18 天

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205B051EJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券