Nginx 过滤恶意请求 短信防刷 DDOS

最近公司的短信接口被大量无效手机号请求,查看Nginx日志后,发现以下问题记录

ip随机,并发访问,参数一致,明显是被攻击了(响应404是处理之后的,下面会有)

 

 

 由于前人写的这个项目逻辑过于复杂,短信业务存在了大量的数据库连接,直接造成项目挂掉,而且Linux服务器大量的日志文件、临时session、内存占用,也会造成服务器挂掉

从Nginx入手,随机的ip请求让我们不能设置ip黑名单了,那就从User-Agent入手

观察发现,这些恶意请求全部来自"Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)"

在Nginx配置里添加

过滤指定参数以及网络爬虫和模拟请求

 if ($http_user_agent ~* "MSIE 9.0" )
 {

   return 404;

 }

 if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
 {
   return 404;
 }

重载配置 nginx -s reload 

这样来自那个客户端的垃圾请求,就全部被Nginx返回404了,不会走到业务层,当然,业务层的代码已经被我重构了,使用缓存避免频繁的数据库连接

其实这样的垃圾请求,完全不需要麻烦就可以大量模拟,即便是有验证码,也是可以被抓出来,只是门槛提高了,没有遇到过的朋友特别容易被搞的头疼

我们一般暴露在外不需要token或签名的请求,再加上业务代码的冗余沉重,很容易出现这种问题,就造成了项目挂掉的风险。所以在做项目的时候,不仅要合理的代码规范,还要有适当的Nginx配置

 

posted @ 2020-09-27 12:43  TuiHo  阅读(887)  评论(0编辑  收藏  举报