本帖最后由 民审-M 于 2016-11-24 20:37 编辑 Discuz! LAMP Apache环境配置mod_evasive模块抵御暴力开源和DDoS攻击
教程:
实测演示效果地址:
demo.caogen8.co/ck 【建站学习研究如需服务器环境配置协助:@站长窝官方】
以AMH 5.3编译环境为例:【
站长窝source包支持Apache 2.4↓】
wget http://bbs.zhanzhangwo.com/linux/mod_evasive.tar.gz
chmod 777 mod_evasive.tar.gz
tar -zxvf mod_evasive.tar.gz
cd mod_evasive
/usr/local/apache-2.4/bin/apxs -c -i -a mod_evasive24.c
#编译、安装、并加载模块
#注:/usr/local/apache-2.4/bin/apxs 用于编译模块工具【← AMH环境命令执行路径】;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;
以上命令执行后会自动编译配置到/usr/local/apache-2.4/conf/httpd.conf,并在/usr/local/apache-2.4/conf/下备份原配置文件。
#注:如果没有自动编译配置到/usr/local/apache-2.4/conf/httpd.conf,
请手工添加下行:
LoadModule evasive20_module modules/mod_evasive24.so
配置mod_evasive:
在路径:/usr/local/apache-2.4/conf/extra/
下创建:
mod_evasive.conf
输入内容为:
<IfModule mod_evasive24.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 10
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify caogen8@vip.qq.com
#DOSSystemCommand "su - onovps -c iptables -I INPUT -s %s --dport 80 -j DROP"
DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"
DOSLogDir "/var/log/mod_evasive"
DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*
</IfModule>
#以上配置注释:
DOSHashTableSize 3097 #表大小
DOSPageCount 2 #限制单位时间内同一IP请求同一网页次数
DOSSiteCount 10 #限制单位时间内同一IP请求网站次数
DOSPageInterval 1 #网页存取间隔
DOSSiteInterval 1 #网站存取间隔
DOSBlockingPeriod 10 #限制访问时间
DOSEmailNotify #疑似攻击时邮件通知
DOSSystemCommand "su - ono
vps -c iptables -I INPUT -s %s --dport 80 -j DROP"
#疑似攻击时用防火墙限制IP访问80端口
DOSLogDir "/var/log/ #日志目录
DOSWhiteList 127.0.0.1 #添加白名单
上面一行的%s代表了由mod_evasive检测到的攻击IP地址。
【以上更多配置参考:
https://www.linode.com/docs/websites/apache-tips-and-tricks/modevasive-on-apache】
加载扩展配置文件:
编辑:
/usr/local/apache-2.4/conf/httpd.conf
查找:
Include /usr/local/amh-5.3/vhost/amh-apache.conf
在其下行添加:
Include conf/extra/mod_evasive.conf
保存!
承接以上配置还需要:
在/usr/local/bin下创建一个叫做scripts-tecmint的文件夹(或其他的名字),以及一个叫做ban_ip.sh的文件。
用于iptables防火墙
shell脚本内容为:
#!/bin/sh
IP=$1
IPTABLES="/sbin/iptables"
mod_evasive_LOGDIR=/var/log/mod_evasive
$IPTABLES -I INPUT -s $IP -j DROP
rm -f "$mod_evasive_LOGDIR"/dos-"$IP"
#以上脚本注释:
- #!/bin/sh
- # 由mod_evasive检测出,将被阻挡的IP地址
- IP=$1
- # iptables的完整路径
- IPTABLES="/sbin/iptables"
- # mod_evasive锁文件夹
- mod_evasive_LOGDIR=/var/log/mod_evasive
- # 添加下面的防火墙规则 (阻止所有从$IP流入的流量)
- $IPTABLES -I INPUT -s $IP -j DROP
- # 为了未来的检测,移除锁文件
- rm -f "$mod_evasive_LOGDIR"/dos-"$IP"
将apache用户添加到sudoers文件
请注意,如果您不给予apache用户以无需终端和密码的方式运行我们脚本(关键就是这个脚本)的权限,则这一切都不起作用。通常,您只需要以root权限键入visudo来存取/etc/sudoers文件,接下来添加下面的两行即可:
输入命令:visudo
再最后一行添加(I)如下内容:
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty
重要: 在默认的安全策略下您只能在终端中运行sudo。由于这个时候我们需要在没有tty的时候运行sudo,我们必须像下图中那样注释掉下面这一行:
找到:
#Defaults requiretty
注释掉 Defaults requiretty 即可!
:wq
保存!
然后重启,让所有配置加载生效!
init 6
查看环境是否正常安装并启用了mod_evasive模块检测方法:
/usr/local/apache-2.4/bin/apachectl -t -D DUMP_MODULES
如果看到:
Quoteevasive20_module (shared)
则证明是正常加载并启用mod_evasive模块的。
[backcolor=magenta]
推荐搭配使用:[/backcolor]
Discuz! LAMP Apache环境配置mod_security模块引擎防御Web应用入侵检测及防护
http://bbs.zhanzhangwo.com/t-24700-1-1.html
(出处:
站长窝)