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

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

      分析攻击方式:

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

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

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

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

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

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

          参考网址:http://boyseegirl.iteye.com/blog/2033717  (nginx限制特定ip的并发连接数

                         http://blog.csdn.net/gebitan505/article/details/17610485  (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 即可

        

posted on 2015-11-13 17:55  mingaixin  阅读(3111)  评论(0编辑  收藏  举报