您的位置:首页 > 运维架构 > 网站架构

网站遭受CC攻击的解决办法

2015-11-13 17:55 423 查看
前两天,网站的注册发送手机短信验证码的接口受到攻击,一个半小时,1万条短信都发出去了。可见,我们的安全防护做的多么不好。

分析攻击方式:

1) 多台机器模拟人工操作,随机输入手机号,就点击发送短信;

2) 多台机器上的部署的相同的脚本,在对网站发起攻击;

针对可能的第一种攻击方式: 在前端加了一个滑动解决的功能(一个jquery插件),必须手动拖动滑动解锁,输入框才是可点的;

针对可能的第二种攻击方式,应对策略:

1)在服务端接口加上验证,限制相同的IP,多长时间之内可以访问几次;限制相同的手机号,多长时间之内可以发送短信几次;具体实现是在redis/memcache中存储两个值;key1=该IP第一次访问的时间,key2=该IP总访问的次数;比如10分钟内可访问3次,超过3次就不让发送短信了。手机号的限制方式也是一样的;

2)配置nginx,限制IP在一定时间内的访问次数,以及同一时刻的并发数;

参考网址:/content/2644480.html (nginx限制特定ip的并发连接数

/article/1751654.html (nginx限制某个IP同一时间段的访问次数
http://blog.csdn.net/dingyingguidyg/article/details/8523421nginx利用limit模块设置IP并发防CC攻击
http://blog.csdn.net/plunger2011/article/details/37812843nginx配置limit_conn_zone来限制并发连接数以及下载带宽

http{

.......

........

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; #1秒发起2个请求)
limit_conn_zone $binary_remote_addr zone=perip:10m;

}

server{

location /{

limit_req zone=one burst=1 nodelay;
limit_conn perip 2; #连接数限

}

}

3)通过分析nginx的access日志,筛选出访问量最高的IP,封掉;

按照某个时间点统计ip的访问次数,并排序

cat access.log |grep "11/Nov/2015:12:30*" | awk '{print $1}' | sort | uniq -c | sort -rn > iptong.txt

筛选出IP之后新建一个blockIp.conf文件,文件内容为:

deny xx.xx.xx.xx ;

deny xx.xx.xx.xx ;

deny xx.xx.xx.xx ;

在nginx.conf中http{

include blockIp.conf;

}

重启nginx , nginx -s reload 即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: