拒绝服务攻击

3月11号,星期二,GitHub由于分布式拒绝服务攻击(DDos)宕机两小时。我知道你希望GitHub一直是可访问的,我非常抱歉让你失望了。我想解释发生了什么,我们如何应对的,以及我们正在做未来减少这种攻击的影响的工作。

背景

从去年开始,我们已经注意到了大量的、形式多样的、针对GitHub基础设施各个部分的拒绝服务攻击。我们在建立减弱策略时要考虑的两种大概的攻击类型有:容量耗尽的攻击和复杂的攻击。

我们已经设计的DDos减弱策略可以响应这两种攻击。

容量耗尽攻击

容量耗尽攻击目的是通过陡增的攻击来消耗某些资源。随着基于使用DNS、SNMP或NTP之类的协议的放大攻击的、UDP的越来越快频率的延迟,这种攻击逐渐显现。抵御攻击的唯一办法是拥有比所有攻击节点总量还要多的可用网络容量,或者在它达到你的网络之前过滤掉攻击流量。

对付容量耗尽攻击是一个数量游戏。谁有更多的容量谁就获胜。在这个思路下,我们采取了一些步骤让我们防御这些种类的攻击。

我们以非常低效的方式操作外部网络连接。我们内部运输环路能够处理比正常每日峰值差不多更多的流量。我们也继续评估扩展网络容量的机会。这给我们更大流量的净空,尤其是,一段时间内它们倾向于加速增长到其最大峰值的吞吐量。

除了管理我们自己网络的容量,我们和一家领先的DDoS减弱服务提供商进行合作。一个简单的Hubot命令能够重新路由我们的流量到他们的网络,而他们的网络每秒处理T字节数据。他们能够吸收攻击,过滤恶意流量,把合法的流量引向我们做正常处理。

复杂的攻击

复杂的攻击也被设计为消耗资源,但通常是运行昂贵的操作,而不是大量占用网络连接。这些例子就像SSL协商攻击,请求web应用程序的计算密集部分,和”Slowloris”攻击。这些种类的攻击经常需要深入理解应用程序的架构,因此我们宁可自己处理它们。这允许我们在选择对策以及把它们对合法请求的影响最小化时,做出最好的决定。

首先,我们投入了巨大的工程师资源来加固计算基础设施的所有环节。比如调优Linux的网络缓冲区大小,配置载入平衡为合适的超时,在应用层做速率限制等等。在我们的基础设施建立恢复机制对于我们来说是一个核心工程,需要持续迭代和提高。

我们也购买、安装了一个软件和硬件平台,用来检测、减弱复杂DDoS攻击。这让我们执行详细的流量监控,便于能够应用流量过滤和访问控制规则来阻止攻击流量。拥有平台的操作控制使我们能够快速调整对付展开的攻击的对策。

我们的DDoS减弱伙伴也能够抵御这些种类的攻击,我们把他们作为最后一道防线。

发生了什么?

在21:25...

赚钱的4种方式

确定创业想法时要考虑的因素

每个业务都想赚钱,这包括了初创企业,也包括了大公司。然而,最近已经有大量正在支撑的创业公司,那里有极端聪明的人在开发酷炫的产品,却没有注意到盈利潜能。主要想法是开发酷炫产品,集中于用户需求。然后,下一个目标是盈利。

虽然这是致力于创办公司的一条相当有效的方式,但仍然有其他方式。这篇文章探索了4种方式,按照盈利难度由低到高的顺序排列。为了说明清楚,我使用了一个村子的例子,那里的村民在家里没有水源。例子仅供参考,不代表贬低某人的创业想法。

好运降临

这是最难的赚钱方式。通用模式是:你开发酷炫产品,人们喜欢它,积攒使用的用户,某人因为那些用户而买下你的公司。

这种方法可以有很多潜在好处,但是开发其他人喜欢的酷炫产品需要大量时间、努力和(我冒昧地说)运气。你能够开发解决你自己的问题或你看到的身边的问题。但是必要条件是没有人会为你的服务买单。你寄希望于受欢迎,并获取或赚得广告收益。一个说明:

假定村子里的村民从一口井打水。井边地滑,因此一些人在井边会摔倒。现在考虑一个创业公司,它在井边修筑人行道------免费。想法是很多人将使用这个人行道,因为它实用,然后有人为了访问所有走过人行道的人们,将收购这家创业公司。或者,他们在人行道附近显示一些广告,并从广告商那里赚钱。

这种方法的问题是,这家创业公司的唯一赚钱方式是希望足够多的人会使用人行道,使得广告收益行得通;或者,其他公司对获取 他们还无法拥有的用户 感兴趣。

解决一个潜在需求

这种方式需要较少运气的因素,但需要一个好的推销员。想法是,你让某人轻松搞定一件事,然后寻求报酬。一个说明:

考虑上面提到的同样的村子。村民使用水桶从井里打水。他们不得不每天往返两次才能满足日常需要。现在考虑一家创业公司,它的水桶是正常水桶容量的两倍。这种水桶的价格是10美元。

如果这家创业公司雇佣了一个好的推销员(或女推销员),这就好办了。需要注意的关键点是,村民为了得到需要的水,要花费更多的时间和精力而不是钱。早期免费,现在收费了。前几笔生意需要一些努力,但是后面的生意,就平稳多了了。

为客户省钱或赚钱

很可能最容易的宣传口号是这样一种情况,当服务是为某人省钱或帮某人赚钱。好处非常明显了。如果没有其他考虑(比如,一些安全因素),这种生意通常比较顺畅。

...

我在工作中的首次编程

事实证明在工作中你不必是一名程序员才能使用编程。当我还是一名大学生的时候,我在一家律师事务所做了几年文员。基本上,工作无聊之极:从文件室收到文件需求,手工整理箱子,找到需要的文件,送过去。偶尔为了容纳更多的箱子才重新归置整个文件室。

因为有个和我做同样工作的全职文员,两个人没有足够多的活儿,所以我兼职充当一下助理IT。那也是无聊的,几乎不需要技术:为律师重装Windows 98拷贝,给他们换新键盘等。

有一次,一个特别恐怖的任务出现了。为了某个案子做展览,公司不得不先排列好,再打印数以千张的图片。由于上帝才知道的原因,他们打算在这个工作中使用的软件是Microsoft Excel。实际上他们使用一个电子表格,分别导入每一张图片,再把它拖放到合适的位置,每页六张图片。任务落在了负责IT的这个女人头上,马上就踢到了我这边。

想象一下,逐个导入、拖拽数以千张的图片到一个Excel文件。更糟的是,随着单个XLS文件消耗越来越多的系统内存,任务会变得越来越慢。我先花10分钟计算了我的进展速度,发现这会花去我3-4天才能完成。3-4天作同样的、单调的45秒的任务。

好吧,真操蛋。20分钟后我想终止自己的方式。因此,我没有实际继续那样做,而是打开了Excel宏编辑器,开始试着找到如何自动化一些过程。约一小时后,我有了进展,通过读取部分文件系统来寻找合适的文件。万岁,进展!

我激动地告诉老板,我想我能够自动化这个痛苦的、单调的过程(一年不得不做几次的过程)。我忘了她说的原话了,但是她基本上告诉我不要那样做,而要按照他们的方式来做:她不相信这是可行的,并认为这是在浪费时间。

好吧,再操一次。又经过几个小时的实际努力,我做了一个宏,循环遍历目录树下的所有图片,并在Excel里排列好。我在接下来的4天里用来上网、派发文件。

这就是为什么我鼓励每个人学习一些基本编程的原因。

原文地址:http://justinkan.com/the-first-time-i-used-programming-at-work