热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用Nignx巧妙解决我所遇到的DDOS攻击

:本篇文章主要介绍了利用Nignx巧妙解决我所遇到的DDOS攻击,对于PHP教程有兴趣的同学可以参考一下。
1. 问题

自家的APP上线已经有一段时间了,突然有一天发现线上产品居然不能发送验证码。

登录第三方短信验证码服务后台,发现问题很严重。

3youbiquan157972015-12-25
4youbiquan572015-12-23
5youbiquan492015-12-22
6youbiquan542015-12-21
7youbiquan642015-12-20

发现几天前,短信服务居然发出去15000多条短信出去,直接把服务费刷光了。

要找原因就只能找 Nignx 的日志了。

日志中,发现大量的对短信接口的访问,并且在我查看时候,日志依然在疯狂的追加,是典型的ddos攻击了。当然最核心的内容还是对短信接口的疯狂访问量

221.178.182.21 - - [05/Jan/2016:16:19:25 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.3; XM50h Build/19.1.1.C.1.2)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
118.114.160.200 - - [05/Jan/2016:16:21:26 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:39 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
119.122.0.136 - - [05/Jan/2016:16:21:41 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:51 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
甚至在很多访问量过大时候,都会觉得服务器不能正常提供服务,处于崩溃的边缘。

2. 临时方案

在搞清楚问题之前,首先想到的是,先把短信服务停掉,让攻击者不能访问服务,但是又不能将服务器关掉,毕竟线上用户还在使用。

所以先用nginx把这个接口rewrite了。

if ( $request_uri ~* "showType=smsAuthcode" )
{  
    rewrite ^/ http://www.baidu.com/;
}

当然配置方法可能有好多,这里只是提供一个解决问题的思路,具体配置还可以参考更专业的nginx配置的资料。

首先给百度抱歉,把攻击请求转发给百度了。其实随便return一个值就好了,例如200.

3. 基于log分析的方案

当然问题这样,并不能算解决,线上用户也不能注册新用户了。

我首先想到的方案还是对IP访问限制,分析了一下log,有的ip攻击次数到达几千次,当然也有的ip只有几次访问。对于访问几次的ip,其实没有办法确定是真用户还是攻击机器的IP。 在网上找了一个可以让某个接口,在一定时间内,限制ip访问次数的方案。

iptables -A INPUT -p tcp --dport 80 -d xx.xx.xx.xx -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --name httpuser --set
iptables -A INPUT -m recent --update --name httpuser --seconds 86400 --hitcount 4 -j LOG --log-level 5 --log-prefix 'HTTP attack: '
iptables -A INPUT -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --update --name httpuser --seconds 86400 --hitcount 10 -j REJECT                

基本的含义,就是对访问的请求进行字符串匹配,如果发现有对短信接口的访问,就使用recent模块记录下来访问,如果在一天中访问超过4次,就不让再访问短信接口。

其实也是有一定效果的方案

序号账号数量(条)日期
2youbiquan5402016-01-08
3youbiquan28572016-01-04
4youbiquan3882016-01-05
5youbiquan24692016-01-06

虽然采用基于ip地址的防范,有点效果,但是依然没有根本防住的,我们平时一天也就发50条左右,IP防火墙设置后,依然每天有几千条。分析后发现,这个攻击使用的IP地址是在太多了,所以感觉用IP地址防根本没有希望。

某一天,一筹莫展的时候,我又打开nginx访问日志,突然发现攻击的行为的 user-agent都好短,和其他访问的user-agent有明显差别。

似乎攻击者的user-agen都是“Mozila/5.0“,然后就没有了,而其他的访问,会有更多信息,包括系统版本,浏览器等。

按照这样的猜想,我去用程序分析user-agent,果然只有访问短信接口的UA中存在很短的 “Mozila/5.0“, 其他访问不存在这个UA,但是还有一些不短的UA

Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
于是就搜了一下,发现Dalvik是一个Android虚拟机,瞬间觉得明朗了,感觉完全可以基于UA防范,把Mozila/5.0和虚拟机全拦截住,问题不就解决了么。

于是在nginx的配置里,加了下面几段代码

if ($http_user_agent = "Mozilla/5.0") {
       return 503;
}

if ($http_user_agent ~* "Dalvik/1.6.0") {
       return 503;
}

第一段就是严格匹配 Mozila/5.0 第二段的意思以 Dalvik开头的UA,就是虚拟机的UA。

果然在采用这个方式防范以后,瞬间有了明显效果。

2youbiquan572016-01-09

按照新方法,从新防范后,短信发送的条数,直接回到之前的正常水平,自己用了几个手机测试了一下,也是OK的。

不过也不能高兴的太早,似乎攻击者也很容易伪造UA,想要完全解决DDOS,还要更多学习科学文化知识才行~

以上就介绍了利用Nignx巧妙解决我所遇到的DDOS攻击,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
author-avatar
mobiledu2502921803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有