linux

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

发布时间:7年前热度: 3259 ℃评论数:

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

一般来说,有两种形式的 DOS 攻击: 
    1、OSI 模型的三、四层,即网络层攻击 
    2、OSI 模型的七层,即应用层攻击 
第一种类型的 DOS 攻击——网络层,发生于当大量的垃圾流量流向网页服务器时。当垃圾流量超过网络的处理能力时,网站就会宕机。 

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

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

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

本文将介绍如何使用 zdziarski 开发的 Apache2 的模块 mod_evasive。 

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

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

二、在 Centos7.2上安装 mod_evasive 
1、安装配置好epel源 
     rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 
2、安装yum插件基础包protectbase 
     yum install yum-plugin-protectbase.noarch -y 
(备注:protectbase插件的目的是为了保护某些yum储存库免受其他储存库的更新。即使非保护仓库具有更高版本,受保护仓库中的软件包也不会被非保护仓库中的软件包更新或覆盖。) 
3、安装mod_evasive模块 
    yum install mod_evasive -y 
4、配置mod_evasive模块 
   在安装过程中,/etc/httpd/conf.d/mod_evasive.conf添加了mod_evasive配置文件 
   默认的配置是一个很好的开始,因为它不会阻塞任何合法的用户。 
    <IfModule mod_evasive20.c> 
      DOSHashTableSize    3097 
      DOSPageCount        2 
      DOSSiteCount        50 
      DOSPageInterval     1 
      DOSSiteInterval     1 
      DOSBlockingPeriod   10 
      DOSEmailNotify      [email protected] 
      #DOSWhitelist   192.168.0.* 
      #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'" 
      DOSLogDir           "/var/log/mod_evasive" 
</IfModule> 
5、参数的含义如下: 
DOSHashTableSize - 正在访问网站的 IP 地址列表及其请求数的当前列表。 
DOSPageCount - 在一定的时间间隔内,每个页面的请求次数。时间间隔由 DOSPageInterval 定义。 
DOSPageInterval - mod_evasive 统计页面请求次数的时间间隔。 
DOSSiteCount - 与 DOSPageCount 相同,但统计的是来自相同 IP 地址对网站内任何页面的请求数量。 
DOSSiteInterval - mod_evasive 统计网站请求次数的时间间隔。 
DOSBlockingPeriod - 某个 IP 地址被加入黑名单的时长(以秒为单位)。 
如果使用上面显示的默认配置,则在如下情况下,一个 IP 地址会被加入黑名单: 

每秒请求同一页面超过两次。 
每秒请求 50 个以上不同页面。 
如果某个 IP 地址超过了这些阈值,则被加入黑名单 10 秒钟。 

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

其余的参数是: 

DOSEmailNotify - 用于接收 DOS 攻击信息和 IP 地址黑名单的电子邮件地址。 
DOSWhitelist - IP地址黑名单 
DOSSystemCommand - 检测到 DOS 攻击时运行的命令。 
DOSLogDir - 用于存放 mod_evasive 的临时文件的目录。 
6、创建mod_evasive日志目录 
    mkdir /var/log/mod_evasive    chown -R apache:apache /var/log/mod_evasive 
7、检查配置 
   apachectl configtest #返回结果:Syntax OK 
   systemctl restart httpd.service 
8、测试mod_evasive 
你所要做的就是把下面的 bash 脚本复制到一个文件中,例如 test.sh: 

   #!/bin/bash 
   set -e 
   for i in {1..50}; do 
        curl -s -I 127.0.0.1 | head -n 1 
   done 

启用 mod_evasive 后,您将看到以下内容: 
      HTTP/1.1 200 OK 
      HTTP/1.1 200 OK 
      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

 

服务器,模块,保护,网站,应用层,攻击

手机扫码访问