最近小涛博客受到蛋疼者的攻击,闲着没事攻击我的博客,
小涛博客似乎没有多大的流量,也没有多大的名气!居然也有人来ddos?真是不可思议,不过心里也暗喜一番,小涛已经引起别人的注意了,不过这给小涛一个很好的考验,让我好好的对服务器防御这一块好好的研究一下:
我用netstat -na命令看了一下,擦,好几百个占用80端口ESTABLISHED连接,流量也蹭蹭蹭的往上涨,没几天10g流量木有了,唉,那个心疼啊,不过一个月500g的流量也够用了,呵呵,刚开始攻击的时候,没当回事,以为过几天就过去了,哪有这么无聊的人,花费那么大的精力来搞我,然后小涛看了一下服务器的一些数据:
1)统计80端口连接数
netstat -nat|grep -i “80”|wc -l 最大时能到300多个连接数,让我的小博客何以奈何
2)统计httpd协议连接数
ps -ef|grep httpd|wc -l
3)、统计已连接上的,状态为“established
netstat -na|grep ESTABLISHED|wc -l 此状态的有260多个……
经过这几天的尝试,先是禁用进攻者的ip,发现进攻者的ip不在同一段,随时在变化,此尝试失败。
其次,是限制连接数,虽然有些时候能打开,但几率很小,而且很慢,所以也已失败告终。
再次,我是这样想的,他进攻的80端口,我把端口改成8080端口,然后重启,用https://zoneself.vip:8080 用此方式进行访问,这样有个弊端,就是以前收录的内容不能正常访问,通过规则可以实现不过相对麻烦一些,但关键的是改成8080端口访问的时候出现了 403错误,悲催,又失败。
最后,经过牛人介绍,曾经的一位牛人自行开发了一个DDos防御工具ddos-defender-v2.1.0 ,这个工具能实现在受到cc、压测工具等拒绝服务攻击时,进行比较有效的防御。实际上,它并不具备阻截能力,它是基于IPtables 防火墙,利用 netstat+过滤规则,与 IPtables防火墙实现联动。在发生恶意拒绝服务攻击时,本软件会实时分析连接来源的企图。当连接IP 有明显的非正常连接时,插件自动将其加入iptables 防火墙条目进行阻截。同时将攻击IP 记录到计划解封文件里,当达到预定时间后,插件自动从 IPtables 防火墙中解封对应IP。在基本测试过程中,应付单 IP 并发连接攻击、cc攻击等效果明显。但它并不适合于随机伪造 IP 的恶意攻击,但能对抗轻量DDOS。工具完全由bash shell开发,程序简单易读,方便后期修改。
DDoS-Defender-v2.1.0版的改进以下:
===============================================
1. 编写核心连接分析代码,不再依赖netstat命令;由于高并发连接下使用netstat处理连接数,使CPU占用率高达100%,严重影响系统性能;直接对/proc/net下的连接记录文件进行分析,使高并发连接状态下比netstat速度提高5倍以上,CPU占用率不超过10%。
2. 优化IP审计算法,减少多余的处理而消耗CPU的BUG
3. 优化运行进程的优先级,增强CPU亲和性
4. 将临时数据加载到内存虚拟交换区里,降低磁盘IO
5. 新增邮件通知功能
===============================================
程序安装:
# tar zxvf DDoS-Defender-v2.1.0.tar.gz
# cd DDoS-Defender-v2.1.0
# ./autoinstall.sh
# /usr/local/DDos/sbin/ddosDer start #启动程序
安装完成后,重新Login终端可直接使用 “ ddosDer start” 命令启动和关闭。
查看监控状态:
# ddosDer status
程序主要目录介绍:
+ /usr/local/DDos/sbin #主要程序运行文件夹
— ddos_daemon #主守护进程
— ddos_flush # IP自动解锁控制进程
— ddosDer #启动控制脚本
+ /usr/local/DDos/logs #事件记录
+ /usr/local/DDos/conf #配置文件
+ /usr/local/DDos/lib #功能模块库
— core_netstat.so #网络连接处理模块(代替netstat)
— sendmail.so #邮件发送模块
配置文件说明:
——————————————————————————
##### 定义文件夹
PROC_DIR=”/usr/local/DDos/”
LOGS_FILE=”/usr/local/DDos/logs/running.log”
TMP_DIR=”/dev/shm/tmp”
IPT=”/sbin/iptables”
### 加载lib模块
CORE_NETSTAT=”/usr/local/DDos/lib/core_netstat.so”
SENDMAIL_EXE=”/usr/local/DDos/lib/sendmail.so”
CHECKIPTABLES=”/usr/local/DDos/lib/check_iptables.so”
### 计划清理队列
CROND_LIST=”/usr/local/DDos/logs/crond_list.dat”
### 白名单
IGNORE_IP=”127.0.0.1|0.0.0.0″
### 监控端口
MONT_PORT=”80|8080|443″
### 调和模式,0表示只监测,1表示主动防御
KILL=1
### 监控密度,单位为秒
REXEC_TIME=10
### 锁定连接数,该项能确定监控的敏感度,非常重要
NO_OF_CONNECTIONS=100
### 管理员邮箱,空格隔开,EMAIL_ATTACH是否启用附件,0为Off
SENDMAIL_ON=1
EMAIL_ATTACH=0
EMAIL_SIGE=”4399运维团队”
EMAIL_TO=”350311204@qq.com”
### 封锁时间
BAN_PERIOD=3600
——————————————————————————
刚开始用的时候防御能力不错,但是访问我的博客时候还是403错误,然后我又针对导致403错误找到了可能导致的原因:
访问网时出现403 Forbidden错误的原因:
1.你的IP被列入黑名单。
2.你在一定时间内过多地访问此网站(一般是用采集程序),被防火墙拒绝访问了
3.网站域名解析到了空间,但空间未绑定此域名
4.你的网页脚本文件在当前目录下没有执行权限
5.在不允许写/创建文件的目录中执行了创建/写文件操作
6.以http方式访问需要ssl连接的网址
7.浏览器不支持SSL 128时访问SSL 128的连接
8.连接的用户过多,可以过后再试
9.在身份验证的过程中输入了错误的密码
Forbidden的意思就是被禁止的,就是说你没有权限访问此站。
这些原因经过我一个一个的排错尝试,最后也没成功,然后我就想,为什吗我的博客出现403错误,而哥们的博客和哦我同时寄居在我的vps上的,为啥他们的博客就可以访问呢,最后我决定打开我的博客的配置文件看了看,soga,终于找到原因了,原来是因为先前经过低三次尝试的时候,吧80端口改成8080端口了,忘记改回来了,唉,这几天被整的头都大了,改过的东西都忘记了,然后改城80端口重启服务器,访问就正常了。
最后小涛提供DDoS-Defender-v2.1.0下载地址:点我下载