专栏首页云计算教程系列如何在CentOS 7上使用mod_evasive for Apache来防御DoS和DDoS
原创

如何在CentOS 7上使用mod_evasive for Apache来防御DoS和DDoS

介绍

mod_evasive Apache模块(以前称为mod_dosevasive)有助于防止DoS,DDoS(分布式拒绝服务)以及对Apache Web服务器的暴力攻击。它可以在攻击期间提供规避行动,并通过电子邮件和系统日志工具报告滥用行为。该模块的工作原理是创建一个IP地址和URI的内部动态表,并拒绝以下任何一个IP地址:

  • 每秒请求同一页多次
  • 每秒对同一个孩子发出50多个并发请求
  • 暂时列入黑名单时提出任何要求

如果满足上述任何条件,则发送403响应并记录IP地址。可选地,可以将电子邮件通知发送给服务器所有者,或者可以运行系统命令来阻止IP地址。

在本教程中,我们将讨论如何在服务器上安装,配置和使用mod_evasive。

准备

在开始学习本教程之前,您应该具备以下条件:

  • 一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 在腾讯云CVM上运行的Apache Web服务器。

第1步 - 安装mod_evasive

在本节中,我们将安装mod_evasive所需的软件包,并最终安装mod_evasive。

首先,我们需要在服务器上安装EPEL(Enterprise Linux的额外软件包)yum存储库。EPEL是一个Fedora特别兴趣小组,负责为Enterprise Linux创建,维护和管理一套高质量的开源附加软件包。运行以下命令以在服务器上安装和启用EPEL存储库:

在CentOS 7上:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

在CentOS 6上:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

让我们使用以下方法验证EPEL repo是否已启用:

sudo yum repolist

如果启用,您将在输出中看到以下repo:

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

现在,让我们保护EPEL采用yum的插件基础包protectbase

sudo yum install yum-plugin-protectbase.noarch -y

protectbase插件的目的是保护某些yum存储库免受来自其他存储库的更新。即使未受保护的存储库具有更高版本,受保护存储库中的包也不会被非受保护存储库中的包更新或覆盖。

现在我们准备安装mod_evasive模块了。运行以下命令进行安装:

sudo yum install mod_evasive -y

第2步 - 验证安装

现在已经安装了mod_evasive,让我们验证是否已经安装了配置文件并且正在加载模块。

在安装过程中,添加了mod_evasive配置文件/etc/httpd/conf.d/mod_evasive.conf。要验证此运行:

sudo ls -al /etc/httpd/conf.d/mod_evasive.conf

输出应类似于:

-rw-r--r-- 1 root root 3473 Jul 21 01:41 /etc/httpd/conf.d/mod_evasive.conf

默认情况下,以下LoadModule行将添加到配置mod_evasive.conf文件的顶部。打开文件并添加该行(如果该行尚不存在)。该行告诉Apache Web服务器加载并使用mod_evasive模块。

在CentOS 7上,该行应如下所示:

LoadModule evasive20_module modules/mod_evasive24.so

在CentOS 6上,该行应如下:

LoadModule evasive20_module modules/mod_evasive20.so

让我们列出为Apache Web服务器加载的模块并查找mod_evasive:

sudo  httpd -M | grep evasive

输出应显示:

 evasive20_module (shared)

第3步 - 配置mod_evasive

现在安装已完成并经过验证,让我们看一下模块的配置。mod_evasive可以通过mod_evasive.conf配置文件轻松定制。我们将在本教程中讨论一些配置参数。有关所有参数的信息,请参阅配置文件 - 它包含每个参数的说明。

您需要更改的配置选项之一是DOSEmailNotify。这是一个非常有用的指令。如果设置了此值,则只要IP地址被列入黑名单,就会向指定的电子邮件地址发送电子邮件。电子邮件正文将显示mod_evasive HTTP Blacklisted 111.111.111.111

例如,如果要发送mod_evasive警报,请发送sammy @ example.com,编辑该文件:

sudo nano /etc/httpd/conf.d/mod_evasive.conf

通过删除该行的#前面取消注释该DOSEmailNotify行,并将电子邮件地址更改为您的:

DOSEmailNotify   sammy@example.com

注意: mod_evasive用 /bin/mail于发送电子邮件警报。

您可能想要设置的另一个参数是DOSWhitelist。使用此选项,可以将可信客户端的IP地址添加到白名单中,以确保它们永不被拒绝。白名单的目的是保护软件,脚本,本地搜索机器人或其他自动化工具不被拒绝从服务器请求大量数据。

要将IP地址列入白名单,例如111.111.111.111,请在配置文件中添加一个条目,如下所示:

DOSWhitelist    111.111.111.111

如有必要,可以在最多3个八位字节的IP地址上使用通配符。

要将来自不同IP范围的多个IP地址列入白名单,您可以在配置文件中添加单独的DOSWhitelist行,如下所示:

DOSWhitelist    111.111.111.111
DOSWhitelist    222.222.222.222

DOSPageCountDOSSiteCount是被建议的其他两个参数将更改为较不激进的值,以避免客户端被不必要地阻塞。

DOSPageCount是IP地址对每页页面间隔(通常设置为1秒)的同一页面请求数量的限制。超过该时间间隔的阈值后,客户端的IP地址将添加到阻止列表中。默认值设置为2相当低,您可以将其更改为更高的值,比如20,通过编辑以下/etc/httpd/conf.d/mod_evasive.conf

DOSPageCount 20

DOSSiteCount是每个站点间隔的IP地址对同一网站的请求总数的限制(默认为1秒)。要将其更改为更大的值,例如100秒:

DOSSiteCount 100

您可以更改其他一些参数以获得更好的性能。

一个是DOSBlockingPeriod,如果客户端(IP地址)被添加到阻止列表,将被阻止的时间量(以秒为单位)。在此期间,来自客户端的所有后续请求将导致403(禁止)错误并且计时器被重置(默认为10秒)。

例如,如果要将阻止时间增加到300秒:

DOSBlockingPeriod    300

另一个是DOSLogDir指mod_evasive使用的临时目录。默认情况下,/tmp将用于锁定机制,如果您的系统对shell用户开放,则会打开一些安全问题。如果您拥有非特权shell用户,则需要创建一个只能写给Apache正在运行的用户(通常是apache)的目录,然后在mod_evasive.conf文件中设置此参数。

例如,要设置mod_evasive使用的目录,请使用以下命令/var/log/mod_evasive创建目录:

sudo mkdir /var/log/mod_evasive

然后将所有权设置为apache用户:

sudo chown -R apache:apache /var/log/mod_evasive

现在编辑mod_evasive配置并更改目录,如下所示:

DOSLogDir           "/var/log/mod_evasive"

另一个参数是DOSSystemCommand。如果设置了值,则只要IP地址被列入黑名单,就会执行指定的命令。使用此参数,您可以将mod_evasive与服务器上安装的防火墙或shell脚本集成,并阻止防火墙中mod_evasive列入黑名单的IP地址。

第4步 - 加载mod_evasive模块

一旦我们在配置文件中进行了更改,我们就需要重新启动Apache Web服务器才能使它们生效。运行以下命令以重新启动Apache。

在CentOS 7上:

sudo systemctl restart httpd.service

在CentOS6上:

sudo service httpd restart

注意:请注意,mod_evasive似乎与FrontPage Server Extensions冲突。您可能还需要检查Apache Web服务器设置以确保mod_evasive能够正常运行。建议的Apache调整使MaxRequestsPerChild具有非常高的值,但不是无限制(值为零意味着无限制)并且用KeepAliveTimeout相当长的设置启用了KeepAlive

第5步 - 测试mod_evasive

让我们做一个简短的测试,看模块是否正常工作。我们将使用Perl脚本test.pl通过mod_evasive开发人员编写的。要执行脚本,我们需要首先perl使用以下命令在服务器上安装软件包:

sudo yum install -y perl

测试脚本与mod_evasive一起安装在以下位置:

/usr/share/doc/mod_evasive-1.10.1/test.pl

默认情况下,测试脚本连续100次从Apache Web服务器请求同一页面以触发mod_evasive。在上一节中,我们修改mod_evasive以更加容忍每秒对同一页面的请求。我们需要将脚本连续更改为200个请求而不是100个,以确保我们触发所有mod_evasive的通知方法。

编辑/usr/share/doc/mod_evasive-1.10.1/test.pl

sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl

找到以下行:

for(0..100) {

用200替换100:

for(0..200) {

保存并退出。

要执行脚本,请运行:

sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl

您应该看到类似于的输出:

HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
...

该脚本向您的Web服务器发出100个请求。403响应代码表示Web服务器拒绝访问。当IP地址被阻止时,mod_evasive也会记录到syslog。使用以下命令检查日志文件

sudo tailf /var/log/messages

它应该显示类似于的行:

Jul 29 00:11:18 servername mod_evasive[18290]: Blacklisting address 127.0.0.1: possible DoS attack.

指示IP地址被mod_evasive阻止。

如果您已将mod_evasive配置为在IP被阻止时发送电子邮件警报,则您的收件箱中将显示一封包含以下内容的电子邮件:

mod_evasive HTTP Blacklisted 127.0.0.1

结论

mod_evasive非常适合抵御单一服务器,脚本攻击以及分布式攻击。但是,只有服务器的总带宽和处理器容量才能处理和响应无效请求。因此,最好将此模块与服务器防火墙集成,以获得最大程度的保护。如果没有真正优秀的基础架构和防火墙,那么繁重的DDoS可能仍会让您脱机。如果攻击非常繁重且持久,您可能需要转向基于硬件的DDoS缓解解决方案。

更多CentOS教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Protect Against DoS and DDoS with mod_evasive for Apache on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 网站遭遇CC攻击怎么破?

    这里用一个段子做引,顾客点了份鱼香肉丝没有肉丝,找店家理论,店家矢口否认,于是第二天顾客找了 N 多闲杂人等把小饭馆全部坐满,还不消费,正常顾客无法消费就餐,店...

    天存信息
  • 五个最常出现的Linux故障处理方法

    当linux服务启动失败的时候,系统会提示我们使用 journalctl -xe 命令来查询详细信息,定位服务不能启动的原因。

    w9
  • 如何在 Ubuntu 上安装和优化 Apache

    这是我们的 LAMP 系列教程的开始:如何在 Ubuntu 上安装 Apache web 服务器。

    用户8639654
  • 如何将HTTP重定向到Apache上的HTTPS

    HTTP ( 超文本传输​​协议 )是万维网 ( WWW )上数据通信的基本协议; 通常在Web浏览器和存储Web文件的服务器之间。 而HTTPS是HTTP的安...

    子润先生
  • DDoS攻击多种多样,防DDoS事后补救恐怕鞭长莫及啊!

    随着如今DDoS攻击技术的不断成熟,关于防DDoS攻击的安全防护措施你知道多少?只有清楚的了解DDoS攻击的定义和原理和你有可能或者将会面临什么样的攻击,才更好...

    blublu7080
  • 网络安全趋势愈发严峻,你防御DDoS的方式选对了吗?

    伴随PC端运用范围的不断扩大,以及IT技术的日新月异,DDoS攻击以及防御DDoS的技术都在不断地演进。一些网络DDoS攻击的手段也愈发猛烈,如今早已发展成了T...

    blublu7080
  • 独家 | Fomo 3D 沦陷?为何又是 DDoS攻击?来听听区块链安全大牛的深度解析

    据国内多家区块链媒体报道:2018年7月31日晚,多个韩国社区爆出“Fomo 3D被黑客攻击之后停止运营了”传言,据DappRadar上以太坊Dapp数据显示,...

    区块链大本营
  • 双11来临,DDoS攻击应急预案必备技能

    十一即将到来,各位网络安保人员又要开始绷紧神经了。高流量同样意味着高风险,哪个企业尤其是电商行业谁都不想在这个时候网站出什么幺蛾子,如果不幸遭遇DDOS攻击,那...

    宇众小添
  • WEB应用常见15种安全漏洞一览

    SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。

    Fundebug
  • IPv6时代如何防御DDoS攻击?

    我们都知道现行版本的IP协议是IPv4协议,但由于最开始设计的时候没有考虑到互联网发展如此迅速,导致网络IP地址即将枯竭不够用了,于是推出IPv6协议用于代替I...

    墨者盾
  • 【链安科技】游戏Fomo 3D合约漏洞

    自7月8日,一款运行在以太坊上的带有明显博弈性质的区块链游戏火了,这是继EOS-RAM之后,又一个用惊人收益刷新着我们认知的“新物种”,它就是Fomo 3D。

    辉哥
  • Nginx 防御CC攻击的两种方法 原

    CC攻击可以归为DDoS攻击的一种。他们之间都原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡CC...

    拓荒者
  • 企业网站怎么才能防御DDOS攻击?

    昨天一个政府的站长告诉墨者安全,他想要做一个网络安全防护,因为网站设计到了支付这一块的业务,所以要做网络安全防护,想要实时监测,如果有攻击发生需要第...

    墨者安全筱娜
  • 浅析DDOS攻击及防御

    如今,信息技术的发展为人们带来了诸多便利,无论是个人社交行为,还是商业活动都离不开网络。但是,网络空间在创造机遇的同时,也带来了威胁,其中 DDoS 就是最具破...

    常见_youmen
  • 协议攻击(一)

    客户端(kali)基于tcp第一次握手,给服务器端(centos)发送了大量标记位为SYN的包。 服务器端收到来自客户端的syn包后,对源ip返回标记位为sy...

    宸寰客
  • 浅析高防云服务器是如何防御DDoS攻击?

    作为当前一种最常见的网络攻击方式,DDoS攻击导致很多企业用户的网站业务或主机/服务器深受其害。DDoS攻击也因其“破坏性较大、难以防范,且无法彻底根除”等特点...

    用户7261497
  • 如何减轻memcached的放大攻击

    在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝...

    姚啊姚
  • CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例

    数据可用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例,希望让使用者在浏览的过程中不会产生...

    用户7881870
  • 如何给女朋友解释什么是DDoS攻击?

    周五下班比较早,我正在家里面玩吃鸡游戏,正在疯狂的跑毒,这时候坐在旁边刷着抖音的女朋友问了我一个奇怪的问题。

    帅地

扫码关注云+社区

领取腾讯云代金券