很多人都知道,DDoS攻击没有100%有效的防御手段。但换个角度思考,攻击者要组织一场像样的攻击,所付出的资源和精力远比防御者大得多——这本身就是一种天然的不对称优势。因此,只要我们能真正吃透DDoS的攻击原理,主动部署好防御措施,绝大多数威胁还是能被有效缓解甚至阻挡在门外。
增强防御力
对抗DDoS,一个绕不开的思路就是“硬扛”——提升自己的带宽和硬件性能。这确实是最直接的应对方法。对于那些把业务命脉系于在线系统的企业来说,这笔投入是值得的。不过,问题来了:投入多少才算合适?
资源终究有限。如果投入100%的成本,只换来10%的性能或防御提升,那显然得不偿失——毕竟我们还有其他选择。而且,在你加固防御的同时,攻击者也不得不调集更多傀儡机才能奏效,这无形中增加了他们的暴露风险。但需要记住的是,真正有效的DDoS防御,绝不是与攻击者陷入“拼资源”的恶性循环。更明智的做法是:综合运用各种手段,给攻击者设置足够多的障碍,让他们知难而退。
目标系统处理
攻击者的目标可能是一台服务器,也可能是一台网络设备。除了增强硬件,我们同样可以挖掘系统自身的潜力——通过对目标系统进行针对性优化,能把现有资源的能量放大好几倍。
最基础也是最容易被忽视的工作:打补丁。很多操作系统在通讯协议栈上存在漏洞,一旦被利用,拒绝服务攻击就能轻松得手——这比硬碰硬地拼带宽要容易得多。如果连这些明显的漏洞都不补,其他防御措施基本就是摆设。好在目前各大厂商的补丁更新速度还算靠谱,你只需要根据自身环境跟踪相关系统的补丁发布即可。
另外一些常用技巧包括:限制连接队列长度、减少处理延时。前者能缓解系统资源被耗尽的速度——虽然不能完全避免拒绝服务,但至少降低了系统崩溃的概率。后者能加快系统处理速度,让队列里的等待连接被更快地丢弃,而不是任其堆积。不过要注意,这种方法并非万能,因为很多DDoS攻击(比如应用层攻击)并不依赖SYN Flood这类畸形连接来淹没队列。
纵深防御
攻击者和目标之间通常隔着不少网络节点。因此,我们可以在受保护系统前面部署多层屏障,提前卸掉压力。其中最核心的工具就是防火墙——现在很多先进的防火墙产品能识别数据包的深层内容,让我们制定更精细的过滤规则。
不少防火墙已经集成了反DDoS功能,能够识别常见攻击包的特征。这类产品最大的价值在于:不需要对每个数据包做完整检查,就能判断出“恶意行为”。判断越轻量,处理能力越不容易被耗尽,攻击者的成本也就越高。包括路由器在内的很多网络设备也自带一些防火墙功能,尽量把它们用起来。
路由器本身负责数据转发,最好把它放在“前哨”位置。这样既能御敌于千里之外,又能灵活地把攻击流量导到无害的位置,甚至让攻击“化为虚无”。当然,攻击者也不是傻子——他们可能会绕过这些设施,直接针对你的防御层本身发起攻击。这就需要我们动态调整策略,随机应变。
除了这些基础方法,还有更高级的技巧:比如做冗余设计,当主系统被击瘫时能立即切换备用机制;或者部署一些“蜜罐”陷阱,既能吸引攻击流量,又能迷惑攻击者,让他们摸不清你的真实防御重心。
知己者胜
安全防御最重要的因素之一,是对自己系统的透彻了解。你必须清楚:系统对外开放了哪些服务?哪些访问是被禁止的?当DDoS攻击出现时,还要能判断攻击利用了哪个处理机制。虽然“关闭不必要服务”这句话已经被说了无数遍,但它的重要性依然被低估。
很多人以为端口没开放就安全了,其实不然。有些端口虽然显示关闭,但由于设计原因,仍会响应某些查询——这正是DDoS攻击喜欢利用的点。攻击者通过向这些“沉睡的端口”发送海量查询,耗尽系统资源,达到拒绝服务的目的。有一个叫Shields UP的基于Web的检查工具,可以帮你了解端口的真实状态。
你只需要在一台联网的工作站上登录它的页面,执行All Service Ports检测,返回的结果会列出一个从0到1055端口的状态方格图:绿色小块表示端口处于安全的“隐秘”状态,不会对外做任何响应;红色小块表示端口开放,危险;蓝色小块表示端口关闭——虽然大部分程序无法使用,但并不意味着绝对安全。借助这类工具,你才能摸清自己暴露在网络上的到底是什么,从而进行真正有效的处理,同时不放过任何隐患。
