红联Linux门户
Linux协助

用Apache服务器模块维护您的网站免受运用层进犯

发布时刻:2018-02-05 12:14:42来历:linux.cn作者:jessie-pang
有多种能够导致网站下线的进犯办法,比较复杂的办法要触及数据库和编程方面的技能知识。一个更简略的办法被称为“回绝服务”进犯。这个进犯办法的姓名来历于它的目的:使一般客户或网站拜访者的正常服务恳求被回绝。
一般来说,有两种方式的 DOS 进犯:
1.OSI 模型的三、四层,即网络层进犯
2.OSI 模型的七层,即运用层进犯
榜首种类型的 DOS 进犯——网络层,发生于当很多的废物流量流向网页服务器时。当废物流量超越网络的处理才能时,网站就会宕机。
第二种类型的 DOS 进犯是在运用层,是运用合法的服务恳求,而不是废物流量。当页面恳求数量超越网页服务器能接受的容量时,即使是合法拜访者也将无法运用该网站。
本文将着眼于缓解运用层进犯,由于减轻网络层进犯需求很多的可用带宽和上游提供商的协作,这一般不是经过装备网络服务器就能够做到的。
经过装备一般的网页服务器,能够维护网页免受运用层进犯,至少是适度的防护。避免这种方式的进犯是非常重要的,由于 Cloudflare 最近 陈述称 网络层进犯的数量正在削减,而运用层进犯的数量则在添加。
本文将介绍怎么运用 zdziarski 开发的 Apache2 的模块 mod_evasive。
别的,mod_evasive 会阻挠进犯者经过测验数百个用户名和暗码的组合来进行猜想(即暴力进犯)的妄图。
mod_evasive 会记载来自每个 IP 地址的恳求的数量。当这个数字超越相应 IP 地址的几个阈值之一时,会呈现一个过错页面。过错页面所需的资源要比一个能够呼应合法拜访的在线网站少得多。
 
在 Ubuntu 16.04 上装置 mod_evasive
Ubuntu 16.04 默许的软件库中包括了 mod_evasive,名称为 “libapache2-mod-evasive”。您能够运用 apt-get 来完结装置:
apt-get update
apt-get upgrade
apt-get install libapache2-mod-evasive
现在咱们需求装备 mod_evasive。
它的装备文件坐落 /etc/apache2/mods-available/evasive.conf。默许状况下,一切模块的设置在装置后都会被注释掉。因而,在修正装备文件之前,模块不会搅扰到网站流量。
<IfModule mod_evasive20.c>
#DOSHashTableSize 3097
#DOSPageCount 2
#DOSSiteCount 50
#DOSPageInterval 1
#DOSSiteInterval 1
#DOSBlockingPeriod 10
#DOSEmailNotify you@yourdomain.com
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
#DOSLogDir "/var/log/mod_evasive"
</IfModule>
榜首部分的参数的意义如下:
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 地址黑名单的电子邮件地址。
DOSSystemCommand - 检测到 DOS 进犯时运转的指令。
DOSLogDir - 用于寄存 mod_evasive 的临时文件的目录。
 
装备 mod_evasive
默许的装备是一个很好的开端,由于它不会堵塞任何合法的用户。撤销装备文件中的一切参数(DOSSystemCommand 在外)的注释,如下所示:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify JohnW@example.com
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/log/mod_evasive"
</IfModule>
必需求创立日志目录而且要赋予其与 apache 进程相同的一切者。这儿创立的目录是 /var/log/mod_evasive ,而且在 Ubuntu 上将该目录的一切者和组设置为 www-data ,与 Apache 服务器相同:
mkdir /var/log/mod_evasive
chown www-data:www-data /var/log/mod_evasive
在修改了 Apache 的装备之后,特别是在正在运转的网站上,在从头发动或从头加载之前,最好查看一下语法,由于语法过错将影响 Apache 的发动从而使网站宕机。
Apache 包括一个辅佐指令,是一个装备语法查看器。只需运转以下指令来查看您的语法:
apachectl configtest
假如您的装备是正确的,会得到如下成果:
Syntax OK
可是,假如呈现问题,您会被奉告在哪部分发生了什么过错,例如:
AH00526: Syntax error on line 6 of /etc/apache2/mods-enabled/evasive.conf:
DOSSiteInterval takes one argument, Set site interval
Action 'configtest' failed.
The Apache error log may have more information.
假如您的装备经过了 configtest 的测验,那么这个模块能够安全地被启用而且 Apache 能够从头加载:
a2enmod evasive
systemctl reload apache2.service
mod_evasive 现在已装备好并正在运转了。
 
测验
为了测验 mod_evasive,咱们只需求向服务器提出满足的网页拜访恳求,以使其超出阈值,并记载来自 Apache 的呼应代码。
一个正常并成功的页面恳求将收到如下呼应:
HTTP/1.1 200 OK
可是,被 mod_evasive 回绝的将回来以下内容:
HTTP/1.1 403 Forbidden
以下脚本会尽或许迅速地向本地主机(127.0.0.1,localhost)的 80 端口发送 HTTP 恳求,并打印出每个恳求的呼应代码。
你所要做的便是把下面的 bash 脚本复制到一个文件中,例如 mod_evasive_test.sh:
#!/bin/bash
set -e
for i in {1..50}; do
curl -s -I 127.0.0.1 | head -n 1
done
这个脚本的部分意义如下:
curl - 这是一个宣布网络恳求的指令。
-s - 躲藏进度表。
-I - 仅显现呼应头部信息。
head - 打印文件的榜首部分。
-n 1 - 只显现榜首行。
然后赋予其履行权限:
chmod 755 mod_evasive_test.sh
在启用 mod_evasive 之前,脚本运转时,将会看到 50 行 “HTTP / 1.1 200 OK” 的回来值。
可是,启用 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
...
前两个恳求被答应,可是在同一秒内第三个恳求宣布时,mod_evasive 回绝了任何进一步的恳求。您还将收到一封电子邮件(邮件地址在选项 DOSEmailNotify 中设置),告诉您有进犯被检测到。
mod_evasive 现在已经在维护您的网站啦!
 
怎么将Django布置到Apache服务器上:http://www.138comgov138.com/linux/30804.html
Linux翻开封闭Apache服务器:http://www.138comgov138.com/linux/30794.html
在Ubuntu中装置Apache服务器(运用openjdk java/oracle java):http://www.138comgov138.com/linux/30022.html
怎么装备fail2ban来维护Apache服务器:http://www.138comgov138.com/linux/12632.html
CentOS Apache服务器装置与装备:http://www.138comgov138.com/linux/11421.html