nginx 防ddos,cc攻击 上

背景描述:9.28号中午网站突然打不开了,后台打不开了,app登录不上了,用户的各种反馈都来了 ,各个部门的同事 都找到技术反应问题了!一打开网页就502了;

(心里有一万头羊驼奔腾而过,快放假了,这是不让我过好这个假期了?)

根据经验 肯定是服务器或者数据库运行不正常导致的,首先登录服务器一切参数正常,没有问题,登录数据库 发现 cpu 占用了100% ;

问题找到了,数据库的问题,但是现在也不是旺季为什么cpu占用这么高,而iops几乎为0;

目测应该是高并发为处理完成,造成数据长久连接太多导致的,发现有1300多的连接数,太多了,并且发现了大量的待执行的 sql命令那就是  update app_sms set status=1 where ......

这个数据表是 发送短信的 接口才会调用的;难道是发送短信的接口有问题了,后来又去查看nginx日志分析  发现有大量的高并发 去访问 发送短信的 链接;

这个时候立刻停止对短信接口的访问,只能暴利接口把短信接口更改一个名字;如果再次访问时 就会返回404;同样正常用户也不能访问了;但是也么有特别好的方法,只能先这么处理

接下来就把数据库为执行的sql全部kill掉;一切恢复正常了;接下来就是在发送短信的接口上做了一个ip的限制,每天每个ip最多只能发送10个验证码;目测安然无恙,但是我心里知道这并没有结束;

10.8日假期结束恢复正常上班了,上班的第一件事情就是 打开服务器,打开数据库 查看参数正常;妥妥的没问题;

但是好日子到头了,在10.15号时候,我手机上连续发来6条服务器cpu占用资源过高的 提醒;我心里一想坏了,肯定又是那个接口出问题了;

打开电脑直奔数据库服务器查看后 一切正常,接下来打开服务器发现运行参数也正常,cpu赵勇60%左右也不算过高,在正常范围之内;查来查来都没有问题,但是打开网站时总是提示502 要么就是打开很慢;

这时候我就懵逼了,为啥各个运行参数正常,就是打开这么慢呢,到底是什么地方出现了问题呢,无意中我发现,带宽;被占用满了;典型的 ddos攻击;没办法了还是老样子 又把短信接口改了,立刻就恢复正常了;

10.16日,领导来了召开紧急会议要立刻修复;网上也搜过好多方法大概是以下几种方法

1.添加防火墙;(由于价格太贵放弃了)

2.更换域名,发现被攻击后,立刻解析到其他域名上,把被攻击的域名停止解析(由于需要人工操作,且dns解析与停止不是实时的需要时间)

3.在nginx中拦截cc攻击

最终讨论方法是在nginx中拦截

下面说一下原理

由ios,android端 写一个对称加密算法且吧时间戳也加密进去;作为 user-agent 来访问 服务器的接口,然后在nginx中 去解密这个user-agent来检验这个加密字符串是否合法或者是否过期;如果是合法的则去调用php-fpm运行程序,如果不合法则直接返回403;

那么问题了来了 如何在nginx拦截cc攻击了,也就说如何在nginx中编程了,我一个php程序员肯定不会;这个时候需要引入一个lua控件;

单独安装lua插件太麻烦了,后来直接安装了 openresty 直接在openresty中 编写lua脚本,成功防御了cc攻击

原文地址:https://www.cnblogs.com/ailingfei/p/7704704.html