开始学着折腾Apache的了,至于这个web应用程序的安装之类的,也没有出教程的必要,我只是想验证一下Apache在网站防御方面的功能。现在看起来,它确实功能强大,而且还体现在了拥有众多的模块,我相信大多数人除了使用Apache之外,就没有深入去玩了,我也是如此。所以在网上查询了资料后,决定做一个统一的整理,就是Apache比较基础的网站防御策略,可以很轻松的抵御各类不算强大的攻击。
感兴趣的可以根据这篇文章试试,应该是很有帮助的,主要的测试系统为linux,CentOS6.8。
本文章内容包括:
1.安装Apache mod_evasive的防御模块,并进行简单设置
2.配置X-Frame-Options请求头,限制Frame页面嵌套
3.安装配置mod_qos防御模板,进行CC攻击和采集防御设置
教程开始
DDOS攻击防御
mod_evasive
对于Apache下DDOS的防御,可以用到mod_evasive这个模块,这个工具在抵御基于请求的DoS攻击或脚本化方面非常出色,如果与防火墙或IP过滤器集成,mod_evasive甚至可以经受大型攻击。我参考官方的说明文档,只以Apache2.X为例进行设置,如果是1.X的版本
(网上大部分安装教程都已经失效,这是根据Github上项目的翻译重新进行整理)
【安装教程】
1.从github下载上传到服务器后,解压并进入mod_evasive目录,执行
Apache的安装目录/bin/apxs --c --i -a mod_evasive20.c
方便起见,可以不按上述操作方法,直接通过yum安装,不过不排除可能版本不是最新的可能。
yum install mod_evasive
2.查看http.conf,也就是Apache的主要配置文件,发现以下一行则代表成功引入,记得重启一下Apache。
LoadModule evasive20_module modules/mod_evasive20.so
3.然后就可以在规则配置文件,其实就是伪静态文件里开始配置了,范例如下。
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</ IfModule>
4.上述参数的详细说明,官方给出了整理,我进行了简单翻译。
DOSHashTableSize 3097 记录和存放黑名单的哈希表大小,可以根据访问量的大小进行修改提升
DOSPageCount 5 在限制时间内,单个ip的访问次数,时间范围在DOSPageInterval中设置。
DOSSiteCount 50 同ip用户在限制时间内可以打开的页面数,时间范围在DOSSiteInterval中设置。
DOSPageInterval 2 设置DOSPageCount中时间长度,默认值为1。
DOSSiteInterval 2 设置DOSSiteCount中时间长度。
DOSBlockingPeriod 10 对检测到攻击ip的封禁时间,这期间该ip的访问会提示404。
还有几个可以选的参数。
DOSEmailNotify you@yourdomain.com 被攻击后的通知邮箱
DOSSystemCommand"su - someuser -c'/sbin/...%s ...'" 被攻击后执行自定义的系统命令
DOSLogDir"/var/lock/mod_evasive" 攻击日志的存放目录
限制请求头
X-Frame-Options
其实这个不算是木马的真正防御,但是可以抵消被挂马后的一部分效果,一般来说,如果网站被挂马,页面上可能出现很多由js生成的Frame嵌套,那么通过简单的设置之后,可以让这些页面嵌套无法加载,从而让木马无法通过嵌套发送信息,或者收集用户信息。同时,网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
开启很简单,windows下是httpd.conf,liunx下是apache2.conf,根据实际情况为准,直接编辑该文件,在空行处添加以下代码。
Header always append X-Frame-Options SAMEORIGIN
最后的值有三种选择:
DENY --- 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN --- 表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM https://example.com/ --- 表示该页面可以在指定来源的 frame 中展示。
CC攻击和防止采集
mod_qos
这个模块配置起来很复杂,网上的教程也是似懂非懂,都不详细,或者说很多都是好几年前的了,比较过时。它的功能很强大,比如防止采集之类的也可以很容易做到。就算因为服务器有硬防而不适用mod_evasive,但是mod_qos仍旧是必要的选择。
【安装教程】
1.从官网下载源代码(最好是最新的,我只是随意拿了现在最新的版本),并解压出来。
wget --no-check-certificate https://jaist.dl.sourceforge.net/project/mod-qos/mod_qos-11.61.tar.gz
tar -xzvf mod_qos-11.61.tar.gz
2.进入目录,开始安装。
cd mod_qos-11.61
Apache安装目录/bin/apxs -i -c mod_qos.c
3.安装完成后,配置httpd.conf,加入一条,然后重启Apache
LoadModule qos_module modules/mod_qos.so
4.最后就可以编辑qos.conf设置想要的防御参数了,官方的说明地址是:点击进入,配置完成后,在httpd.conf通过Include conf/qos.conf就可以导入。注意,配置的复杂度极高,建议认真看,看不懂我也没办法了,我提供个简单的参考,这个配置只利用了不到百分之十的功能
。
/# 处理多达100000个不同IP的连接
QS_ClientEntries 100000
/# 每个IP仅允许50个连接
QS_SrvMaxConnPerIP 50
/# 活动TCP连接的最大数目限制为256
MaxClients 256
/# 当180(70%)TCP连接被占用时禁用保持活动
QS_SrvMaxConnClose 180
/# 最小请求/响应速度(拒绝低速客户端阻止服务器,保持连接打开而不请求任何内容)
QS_SrvMinDataRate 150 1200
#最低请求/响应速度(上传/下载)
#(拒绝缓慢客户端阻止服务器,保持连接打开而不请求任何东西)
#接收请求数据(请求行,标题字段或正文),发送响应数据(标题字段,正文)
QS_SrvMinDataRate 1024
#禁用某些客户端的连接限制:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10
教程就到这里了,希望给一些用Apache的朋友帮助,原本我是打算做个单纯的整理,但是却发现网上的教程很多都过时了,容易产生很大的误导性,比如源码的下载和安装方式早已因为官方更新而改变,或者相关的配置对于现在而言会报错之类的。所以,自己折腾着竟然也弄完了。