盡管大型網站經常受到攻擊,並且在超負荷的負載下,這些公司和網絡仍然要竭盡所能地去轉移這些攻擊,而且是最最重要是要保持他們的網站能夠正常地浏覽。即便你管理的是一個小站點,比如小公司或者小型網站這種規模的網絡,你仍然不知道什麼時候就有人會對你下黑手。那麼接下來,讓我們一起來看看DDoS"背後"的一些細節和攻擊方式,以便於我們能夠讓我們的網絡更加地安全。
DDoS攻擊的多種途徑
拒絕服務曾經是一種非常簡單的攻擊方式。有些人開始在他們的電腦上運行PING命令,鎖定目標地址,讓其高速運轉,試圖向另一端發送洪水般的ICMP請求指令或者數據包。當然,因為這邊發送速度的改變,攻擊者需要一個比對方站點更大的帶寬。首先,他們會搬到有大型主機的地方,類似有大學服務器或者教研所那樣的大型帶寬的地方,然後從這裡發出攻擊。但現代的僵屍網絡在任何情況下幾乎都能使用,相對來說它的操作更簡單,使攻擊完全分布開來,顯得更加隱蔽。
事實上,因為惡意軟件的制造者,僵屍網絡的運營已經成為了一條鮮明的產業鏈。實際他們已經開始出租那些肉機,並且按小時收費。如果有人想要搞垮一個網站,只要給這些攻擊者付夠錢,然後就會有成千上萬的僵屍電腦去攻擊那個網站。一台受感染的電腦或許無法把一個站點搞垮,但若是有10000台以上的電腦同時發送請求,它們會將把未受保護的服務器"塞滿"。
多種攻擊類型
用PING命令就可以執行操作ICMP請求,這個請求非常容易造成網絡堵塞。DDoS攻擊可以通過多種途徑來完成,ICMP也只是其中之一。
此外,有一種Syn攻擊,發動這種攻擊時,實際上僅僅是打開了一個TCP鏈接,之後通常會連接到一個網站上,但關鍵是,這個操作並沒有完成初始握手,就離開了掛靠的服務器。
另一種聰明的做法是使用DNS。有很多網絡供應商都有自己的DNS服務器,而且允許任何人進行查詢,甚至有些人都不是他們的客戶。並且一般DNS都使用UDP,UDP是一種無連接的傳輸層協議。有了以上兩個條件作為基礎,那些攻擊者就非常容易發動一場拒絕服務攻擊。所有攻擊者要做的就是找到一個開放的DNS解析器,制作一個虛擬UDP數據包並偽造一個地址,對著目標網站將其發送到DNS服務器上面。當服務器接收到攻擊者發送的請求,將會信以為真,並且向偽造地址發送請求回應。事實上是目標網站接收了互聯網上一群開放的DNS解析器的請求與回復,從而代替了僵屍網絡的攻擊。另外,這類攻擊具有非常大的伸縮性,因為你可以給DNS服務器發送一種UDP數據包,請求某一側的轉存,造成一個大流量的回應。
如何保護你的網絡
正如你所見,DDoS攻擊五花八門,防不勝防,當你想建立一個防御系統對抗DDoS的時候,你需要掌握這些攻擊的變異形態。
最笨的防御方法,就是花大價錢買更大的帶寬。拒絕服務就像個游戲一樣。如果你使用10000個系統發送1Mbps的流量,那就意味著你輸送給你的服務器每秒鐘10Gb的數據流量。這就會造成擁堵。這種情況下,同樣的規則適用於正常的冗余。這時,你就需要更多的服務器,遍布各地的數據中心,和更好的負載均衡服務了。將流量分散到多個服務器上,幫助你進行流量均衡,更大的帶寬能夠幫你應對各種大流量的問題。但現代的DDoS攻擊越來越瘋狂,需要的帶寬越來越大,你的財政狀況根本不允許你投入更多的資金。另外,絕大多數的時候,你的網站並不是主要攻擊目標,很多管理員都忘了這一點。
網絡中最關鍵的一塊就是DNS服務器。將DNS解析器處於開放狀態這是絕對不可取的,你應當把它鎖定,從而減少一部分攻擊風險。但這樣做了以後,我們的服務器就安全了嗎?答案當然是否定的,即使你的網站,沒有一個可以鏈接到你的DNS服務器,幫你解析域名,這同樣是非常糟糕的事情。大多數完成注冊的域名需要兩個DNS服務器,但這遠遠不夠。你要確保你的DNS服務器以及你的網站和其他資源都處於負載均衡的保護狀態下。你也可以使用一些公司提供的冗余DNS。比如,有很多人使用內容分發網絡(分布式的狀態)給客戶發送文件,這是一種很好的抵御DDoS攻擊的方法。若你需要,也有很多公司提供了這種增強DNS的保護措施。
若是你自己管理你的網絡和數據,那麼就需要著重保護你的網絡層,要進行很多配置。首先確保你所有的路由器都能夠屏蔽垃圾數據包,剔除掉一些不用的協議,比如ICMP這種的。然後設置好防火牆。很顯然,你的網站永遠不會讓隨機DNS服務器進行訪問,所以沒有必要允許UDP 53端口的數據包通過你的服務器。此外,你可以讓你的供應商幫你進行一些邊界網絡的設置,阻止一些沒用的流量,保證你能夠得到一個最大的最通暢的帶寬。很多網絡供應商都給企業提供這種服務,你可以與其網絡運營中心聯系,讓他們幫你優化流量,幫你監測一下你是否到了攻擊。
類似Syn的攻擊,也有很多方法來阻止,比如通過給TCP積壓,減少Syn-Receive定時器,或者使用Syn緩存等等。
最後,你還得想想如何在這些攻擊到達你網站前就將它們攔截住。例如,現代網站應用了許多動態資源。在受到攻擊的時候其實帶寬是比較容易掌控的,但最終往往受到損失的是數據庫或是你運行的腳本程序。你可以考慮使用緩存服務器提供盡可能多的靜態內容,還要快速用靜態資源取代動態資源並確保檢測系統正常運行。
最糟糕的一種情況就是你的網絡或站點完全癱瘓了,你應該在攻擊剛剛開始的時候就做好預備方案。因為攻擊一旦開始,想要從源頭阻止DDoS是非常困難的。最後,你應該好好琢磨琢磨如何讓你的基礎建設更加合理與安全,並且要著重注意你的網絡設置。這些都是非常重要的。