网站遭受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/8523421 (nginx利用limit模块设置IP并发防CC攻击)
http://blog.csdn.net/plunger2011/article/details/37812843 (nginx配置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 即可
分析攻击方式:
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/8523421 (nginx利用limit模块设置IP并发防CC攻击)
http://blog.csdn.net/plunger2011/article/details/37812843 (nginx配置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 即可
相关文章推荐
- Jmeter性能测试-网站测试
- hadoop 2.7.1 高可用安装部署
- 网站内容建设策略
- 使用URL Rewrite实现网站伪静态
- 结巴net 分词 配置文件路径,在网站中的出现问题的解决
- 一些好的机器视觉相关网站推荐
- 【原创】揭秘_APIX_的高性能网关架构
- 帝国CMS安装问题及心得
- 软件的架构与模式之经典架构模式简介
- 软件架构
- 网站架构演变过程
- 国内大型网站系统架构的演化
- 体验监控宝免费网站服务器监控服务 附注册账户及网站监控部署方法
- 编程设计-如何写可维护的程序. 通往架构思维之路
- 体验监控宝免费网站服务器监控服务 附注册账户及网站监控部署方法
- 如何实现营销型网站推广的终极目标?
- java 服务器架构图 参考地址
- Android MVP架构浅析
- 常见的网站攻击方式(基础)
- Java分层架构的使用规则