实战在Centos5.3下mod_dosevasive对抗DDos攻击
2015-12-13 17:39
453 查看
转截请写明出处,谢谢!
最近老同事的电子商务网站经常性的对手ab,无奈我花些时间google,发现有不少朋友用mod_dosevasive来对抗ddos攻击(当然是小范围的,如果没有带宽和硬件的保障效果会更好).
居体的安装可以参看
关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明
上面写的够详细了。
下面是我的安装过程
1.安装apxs 即要有 apache开发版本的支持
#yum install httpd-devel
2.进入mod_evasive目录
查看apxs在哪里
#whereis apxs /* /usr/bin/apxs*/
#/usr/bin/apxs -i -a -c mod_dosevasive20.c
执行上面的命令后系统会在/etc/httpd/conf/httpd.conf中加入下面一行
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
3.加入在被DDOS时的处理操作
手工在/etc/httpd/conf/httpd.conf最下方加入下面内容
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotifymy@email.com
DOSSystemCommand "sudo iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
DOSLogDir "/tmp/lock/mod_evasive"
</IfModule>
针对上面的配置在mod_dosevasive目录下面的REAME中有详细说明。
做了上面的配置之后记得要重启apache
4.重启apache
#service httpd restart
4.测试
我用压力测试工具ab
#ab -n 1000 -c 100 http://192.168.1.254/index.php
5.查看是否本机IP(192.168.1.100)是否被封
#iptables -nvL
显示:
[c-sharp] view plaincopy
Chain INPUT (policy ACCEPT 64628 packets, 6176K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 49010 packets, 10M bytes)
pkts bytes target prot opt in out source destination
结果显示并没有封着我的本机IP
分析原因是apache用户执行sudo处没有执行,因为我把
DOSSystemCommand "sudo iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
改成了
DOSSystemCommand "/bin/touch /tmp/%s.log"
重启apache没有问题故可以判断是sudo执行iptables的问题。因iptables命令是一定要root用户才能执行的。
中间我还把相关的命令写在了一个shell(/tmp/do.sh)中,并且把do.sh的权限改为4755(该权限会改变文件执行的属主为root)
do.sh
[c-sharp] view plaincopy
#!/bin/sh
#相关的参数判断自己来吧
/sbin/iptables -A INPUT -s $1 -p tcp --dport 80 -j DROP
重启apache再压力测试。用iptables -nvL查看还是没有看到策略中有被封的IP
针对上面的测试问题就在定位到了sudo 下面就是google.
最终找到相关的答案
简单的步骤就是
#visudo
加入下面的内容
apache ALL=NOPASSWD: /sbin/iptables
然后用sudo -l可以查看apache用户是否成功加入可以执行sudo的行列
重启apache->压力测试->查看防火墙策略->结果依旧(失败)查看apache的error日志显示
sudo: sorry, you must have a tty to run sudo
意思就是apache运行sudo要求是终端模式,在做web服务器用sudo的时候肯定是不能用终端了。
经查看visudo的配置和google的结果显示 我们需要将visudo中的
Defaults requiretty
注解掉
#Defaults requiretty
最终重复测试流程在
#iptables -nvL的命令下看到了被封堵的记录
[c-sharp] view plaincopy
Chain INPUT (policy ACCEPT 64543 packets, 6168K bytes)
pkts bytes target prot opt in out source destination
836 39828 DROP tcp -- * * 192.168.1.100 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 48945 packets, 10M bytes)
pkts bytes target prot opt in out source destination
总结:
你需要了解一些基本的shell,iptables知识,当然还有google工具
上面只是一个简单的iptables策略,你需要什么特殊的控件可以把相关的控件(如发邮件,写数据库)等操作写入到一个shell中然后改为DOSSystemCommand "sudo /path/to/youshell %s"
说明:
如发现有不足之处请反馈我,我将非常感谢。
该文章是我在真实环境下面测试通过的总结。
参考资料:
http://www.toplee.com/blog/278.html
http://www.gentoo.org/doc/zh_cn/sudo-guide.xml
其它:
MediaLayer防DDOS:http://deflate.medialayer.com/
最近老同事的电子商务网站经常性的对手ab,无奈我花些时间google,发现有不少朋友用mod_dosevasive来对抗ddos攻击(当然是小范围的,如果没有带宽和硬件的保障效果会更好).
居体的安装可以参看
关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明
上面写的够详细了。
下面是我的安装过程
1.安装apxs 即要有 apache开发版本的支持
#yum install httpd-devel
2.进入mod_evasive目录
查看apxs在哪里
#whereis apxs /* /usr/bin/apxs*/
#/usr/bin/apxs -i -a -c mod_dosevasive20.c
执行上面的命令后系统会在/etc/httpd/conf/httpd.conf中加入下面一行
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
3.加入在被DDOS时的处理操作
手工在/etc/httpd/conf/httpd.conf最下方加入下面内容
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotifymy@email.com
DOSSystemCommand "sudo iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
DOSLogDir "/tmp/lock/mod_evasive"
</IfModule>
针对上面的配置在mod_dosevasive目录下面的REAME中有详细说明。
做了上面的配置之后记得要重启apache
4.重启apache
#service httpd restart
4.测试
我用压力测试工具ab
#ab -n 1000 -c 100 http://192.168.1.254/index.php
5.查看是否本机IP(192.168.1.100)是否被封
#iptables -nvL
显示:
[c-sharp] view plaincopy
Chain INPUT (policy ACCEPT 64628 packets, 6176K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 49010 packets, 10M bytes)
pkts bytes target prot opt in out source destination
结果显示并没有封着我的本机IP
分析原因是apache用户执行sudo处没有执行,因为我把
DOSSystemCommand "sudo iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
改成了
DOSSystemCommand "/bin/touch /tmp/%s.log"
重启apache没有问题故可以判断是sudo执行iptables的问题。因iptables命令是一定要root用户才能执行的。
中间我还把相关的命令写在了一个shell(/tmp/do.sh)中,并且把do.sh的权限改为4755(该权限会改变文件执行的属主为root)
do.sh
[c-sharp] view plaincopy
#!/bin/sh
#相关的参数判断自己来吧
/sbin/iptables -A INPUT -s $1 -p tcp --dport 80 -j DROP
重启apache再压力测试。用iptables -nvL查看还是没有看到策略中有被封的IP
针对上面的测试问题就在定位到了sudo 下面就是google.
最终找到相关的答案
Gentoo Sudo(ers)指南
简单的步骤就是
#visudo
加入下面的内容
apache ALL=NOPASSWD: /sbin/iptables
然后用sudo -l可以查看apache用户是否成功加入可以执行sudo的行列
重启apache->压力测试->查看防火墙策略->结果依旧(失败)查看apache的error日志显示
sudo: sorry, you must have a tty to run sudo
意思就是apache运行sudo要求是终端模式,在做web服务器用sudo的时候肯定是不能用终端了。
经查看visudo的配置和google的结果显示 我们需要将visudo中的
Defaults requiretty
注解掉
#Defaults requiretty
最终重复测试流程在
#iptables -nvL的命令下看到了被封堵的记录
[c-sharp] view plaincopy
Chain INPUT (policy ACCEPT 64543 packets, 6168K bytes)
pkts bytes target prot opt in out source destination
836 39828 DROP tcp -- * * 192.168.1.100 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 48945 packets, 10M bytes)
pkts bytes target prot opt in out source destination
总结:
你需要了解一些基本的shell,iptables知识,当然还有google工具
上面只是一个简单的iptables策略,你需要什么特殊的控件可以把相关的控件(如发邮件,写数据库)等操作写入到一个shell中然后改为DOSSystemCommand "sudo /path/to/youshell %s"
说明:
如发现有不足之处请反馈我,我将非常感谢。
该文章是我在真实环境下面测试通过的总结。
参考资料:
http://www.toplee.com/blog/278.html
http://www.gentoo.org/doc/zh_cn/sudo-guide.xml
其它:
MediaLayer防DDOS:http://deflate.medialayer.com/
相关文章推荐
- Linux下socket最大连接数 ulimit -n 最大值修改
- Linux 初步第一课
- linux下的时间调整
- Linux程序设计 读笔3 文件操作
- Linux新建虚拟机设置IP,配置主机映射,连接CRT
- 常用linux命令
- Linux进程间通信——使用共享内存
- Linux ->> Chmod命令改变文件/文件夹属性
- 如何在CentOS 7服务器上安装NodeJS
- linux修改时间 时区
- LINUX--特殊权限SUID,SGID,Sticky
- CentOS6.5 安装vncserver实现图形化访问
- centos安装软件Error: Cannot find a valid baseurl for repo: base
- Linux下常用命令
- Linux安全运维日志排查几个 tips
- Linux常用配置汇总(Centos 7及Debian 8)
- Linux 防火墙配置
- 深入理解Linux修改hostname
- Linux更新Python版本及修改python默认版本的方法
- Linux下头文件搜索路径