记一次针对静态页面的DDOS基本防护
可以说是我试图进入安全口的天才第一步了,能走多远鬼知道呢
背景
去年年前接到的一个外包项目,是一个base在日本的中国人留学机构做的静态页面。出于锻炼自己的目的,选择为他们按次结薪做长期服务维护。20年618当天给我越洋电话打过来说大量潜在客户试图访问机构官网报错无法访问服务器,让我去帮他们看看怎么回事。
回到电脑前登陆阿里云,发现带宽和CPU被占满了,如下图所示:
第一反应就是:坏了,拒绝服务攻击,搞不好还是分布式的……然后登陆后台尝试看日志,发现还真是拒绝服务攻击:
还行,不是分布式的,不过也够吃满了服务器的1核1G1MBps小水管了……对方还挺无聊,发post没把body整的整齐划一,内容缤纷多彩
处理过程
第一阶段:请求洪泛
iptable bans:
由于发现对方没有使用分布式的攻击手段,我考虑停止对攻击流量的来源IP地址进行HTTP响应,经过查询学习,我选择使用iptables命令完成这一操作:
iptables -I INPUT -s <ip addr.> -j DROP
通过此命令,当传入网关的ip地址为定义的ip时,网关会直接丢弃请求,不做任何处理。然而很快我就发现自己太年轻了。对方显然不是抱着笔记本在攻击我,他们不仅更换了ip, 还欢乐骂我的话……
我当时很幼稚的不死心,又用iptables ban了对面五个IP,然后对方换了IP继续打我,我真的毫无办法……
第二阶段 分布式请求洪泛
ddos deflate:
由于对方会动态更换IP地址,单纯手动封禁IP只能做到“见招拆招”,假设对方用的手动更换IP还好,拼手速即可,一旦人家用的是IP池自动调用,人是肯定干不过机器的。一开始打算造轮子,结合
iptables -I INPUT -s <addr> -j DROP
弄个脚本自动封IP,后来觉得雇主给不了让我满意的钱而且我太懒,于是转而上网寻找轮子——找到了ddos deflate
这款软件完全实现我的想法:轮询拿指定时间范围内的网络访问记录,把设定时间长度内连续请求数量大于指定值的IP自动关进小黑屋一段时间。但是他不是万能的,对于雇主的小水管,一秒一次的请求居然也能造成服务延迟,对方不断试探我配置的参数,先后有过一秒一次,五分钟30次然后停止攻击5分钟、半小时攻击停止五分钟等各种憨批操作……下图这些稀奇古怪的字符串有无大佬知道是什么,还请评论区教教我。
后来我配上一小时内连续访问50次就ban的自杀式配置了以后,服务器太平了10天左右。我自以为高枕无忧,没想到……
第三阶段 SYN 半开链接攻击
强安全策略 + CDN掩盖源站地址
这次雇主又给我打电话,说裂开了,访问时断时续的。我上去看发现对方每三十秒给我发一次脏话。奇了怪了,这怎么会让服务崩溃呢?用netstat命令查看发现有些IP地址连接数很高却没有被 ddos deflate屏蔽掉,于是查看这些IP的链接情况(图是我后来截的):
可以看到,有些IP一直处于 SYN_RECD 状态(这里没有是因为攻击已经被屏蔽了,命令是对的哈),意即为已经向其发送了SYN信号等待第三次握手,却没有收到ACK。每当一个IP地址端口向我们的服务器发送TCP链接请求,都会有一个线程被唤起对其提供服务,如果攻击者drop我们发回的SYN,默认的该线程会等待15分钟并重试3次,也就是说对方每个端口发动攻击一次就会浪费一个线程45分钟。当量足够大,线程池爆掉的时候,你的服务器就再也无法为正常用户提供服务了。
这一攻击致命在于你不能判断一个TCP半开链接是真的网不好还是有恶意,所以超时太短会导致影响正常用户体验,太长则会被对方攻击流量洪泛。网传的哪些加大窗口队列长度、缩短超时时间等方法实际上并不能解决本质问题。
那么我们怎么解决这个问题呢?
答案是使用分布式内容分发网络(CDN)。由于CDNIP不固定且遍布全球,某个IP如果被短时间高流量爆破,还有其他的IP为用户提供服务,不会导致系统完全停止响应。而大多CDN提供了更好用的防火墙设置,也能方便我们自定义安全策略。本次处置我采用了CloudFlare CDN(免费版)+ 阿里云强安全策略解决了这一问题。
第一步:部署CloudFlare
登陆注册以后,前往你的域名服务商,将DNS重定向至Cloudflare提供的地址:
随后,等待24h使修改生效。
第二步:应用强安全策略
在阿里云上使用网络安全组策略,设置一个优先级为2的禁止任何流量流入或流出服务器的组策略和一个优先级为1的允许Cloudflare IP地址通过防火墙的组策略:
这时你的服务应该已经恢复正常了,因为攻击者就算知道源站IP,也没有办法用垃圾流量塞满你的服务器了。但是这还不够太平,因为他们有可能洪泛掉免费CDN那点可怜的带宽,怎么办呢:
第三步:使用Cloudflare防火墙策略
在Cloudflare上,根据雇主特点(访问集中于东亚洲几个国家和几个VPS常见地址)部署自定义的防火墙策略,如图:
成效是显著的,域外发动的攻击基本全部被屏蔽,一个月以来,我们的服务再也没有中断过,而对方的攻击流量全部被Cloudflare 一 瞬 缓 存
愿大家在防御的路上武运方昌!
记一次针对静态页面的DDOS基本防护的更多相关文章
- 生成静态页面的PHP类
生成静态页面的PHP类: 复制代码代码如下: <?php class html { var $dir; //dir for the htmls(without/) var $ ...
- 一个简单的NodeJs静态页面的web服务器
主要功能 1 显示www文件夹下静态html或文本类型的文件. 2 缺省访问文件功能. 通过config.js的defaultfile属性设置 3 如果文件夹下没有缺省文件,显示文件夹下文件列表 4 ...
- 可以完成99%的静态页面的HTML标签
HTML:一套浏览器认知的规则HTML分为两个部分,头和身体.一个完整的网页相当于一个裸体的人,我们利用HTML给它穿上衣服,使它更好看.下面我将为大家介绍一下HTML一些基本的标签,而这些基本的标签 ...
- 删除静态页面的html
function dellist(obj) { $(obj).parent().parent().remove(); }
- [react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?
壹 ❀ 引 虚拟DOM(Virtual DOM)在前端领域也算是老生常谈的话题了,若你了解过vue或者react一定避不开这个话题,因此虚拟DOM也算是面试中常问的一个点,那么通过本文,你将了解到如下 ...
- ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面
DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认文件,那么前面介绍的StaticFileMiddleware中间件会 ...
- ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构
和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
- JS魔法堂:定义页面的Dispose方法——[before]unload事件启示录
前言 最近实施的同事报障,说用户审批流程后直接关闭浏览器,操作十余次后系统就报用户会话数超过上限,咨询4A同事后得知登陆后需要显式调用登出API才能清理4A端,否则必然会超出会话上限. 即使在页面 ...
随机推荐
- Java常见23中设计模式之【代理模式】
一.静态代理模式 静态代理,使用继承的方式实现自己新增的服务 这种模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成. 在某些情况下,一个客户不想或 ...
- css3条件判断_@supports的用法/Window.CSS.supports()的使用
为了判断浏览器是否支持css3的一些新属性样式,当不兼容该样式的时候,我们可以更优雅的降级处理.这就需要使用到css3的条件判断功能:在css中支持@supports标记.或者在js中使用CSS.su ...
- 状压DP之集合选数
题目 [HNOI2012]集合选数 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不 ...
- CF55D Beautiful numbers 题解
题目 Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer n ...
- 关于Dfs(1);
问: 我们大部分在根不定的情况下喜欢Dfs(1):到底要不要这样呢? 解释: 首先Dfs(1):是没有任何问题的,毕竟根不定,随便选一个肯定有1,这是没问题的,但是,很多数据也是这么造的,比如在1处卡 ...
- 利用docker部署elk交换机日志分析
今天我们来聊一下利用docker部署elk日志分析系统,这里解析一下elk是啥东西.elk分别是Elasticsearch,Logstash和Kibana的首字母缩写. Elasticsearch是一 ...
- 05 Vue项目搭建
Vue-CLI 项目搭建 1.环境搭建 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 安装cnpm npm install -g cnpm --regi ...
- 大前端时代搞定PC/Mac端开发,我有绝招
如果你是一位前端开发工程师,对"跨平台"一词应该不会感到陌生.像常见的前端框架:比如React.Vue.Angular,它们可以做网页端,也可以做移动端,但很少能做到跨PC.Mac ...
- Python之常用模块学习(一)
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- Ethical Hacking - GAINING ACCESS(22)
CLIENT SIDE ATTACKS - BeEf Framework Browser Exploitation Framework allowing us to launch a number o ...