我在 DDoS 下。我能做些什麼?
這是關於 DoS 和 DDoS 緩解的規範問題。
我在我今天託管的網站上發現了巨大的流量高峰;我每秒獲得數千個連接,我看到我正在使用所有 100Mbps 的可用頻寬。沒有人可以訪問我的站點,因為所有請求都超時了,我什至無法登錄伺服器,因為 SSH 也超時了!這種情況以前發生過幾次,每次都持續幾個小時並自行消失。
有時,我的網站還有另一個明顯但相關的問題:我的伺服器的平均負載(通常在 0.25 左右)飆升至 20 或更多,並且沒有人可以像其他情況一樣訪問我的網站。幾個小時後它也會消失。
重新啟動我的伺服器沒有幫助;我該怎麼做才能讓我的網站再次可訪問,發生了什麼?
相關地,我發現有一兩天,每次我啟動我的服務時,它都會從特定的 IP 地址獲得連接,然後崩潰。一旦我再次啟動它,這種情況又發生了,它又崩潰了。這有什麼相似之處,我該怎麼辦?
您正在遭受拒絕服務攻擊。如果您看到來自多個網路的流量(不同子網上的不同 IP),則說明您遇到了分佈式拒絕服務 (DDoS);如果它們都來自同一個地方,那麼你就有了一個普通的舊 DoS。如果可以的話,檢查一下會很有幫助;使用 netstat 檢查。不過,這可能很難做到。
拒絕服務通常分為幾類:基於流量的和基於負載的。最後一項(帶有崩潰服務)是基於漏洞的 DoS,並且完全不同。
如果您試圖確定正在發生的攻擊類型,您可能想要擷取一些流量(使用 wireshark、tcpdump 或 libpcap)。如果可能,您應該注意,您可能會擷取大量流量。
通常情況下,這些將來自殭屍網路(在某些攻擊者的中央控制下的受感染主機的網路,他們將進行競標)。這是攻擊者(非常便宜)獲取不同網路上許多不同主機的上游頻寬以攻擊您的好方法,同時掩蓋他們的踪跡。低軌道離子炮是殭屍網路的一個例子(儘管是自願的,而不是惡意軟體衍生的);宙斯是一個比較典型的。
基於流量
如果您處於基於流量的 DoS 之下,您會發現進入您的伺服器**的流量如此之多,以至於它與 Internet 的連接已經完全飽和。**從其他地方 ping 您的伺服器時,丟包率很高,並且(取決於使用的路由方法)有時您還會看到非常高的延遲(ping 很高)。這種攻擊通常是 DDoS。
雖然這是一個非常“響亮”的攻擊,而且很明顯正在發生什麼,但伺服器管理員很難緩解(共享主機的使用者基本上不可能緩解)。您將需要 ISP 的幫助;讓他們知道您受到 DDoS 攻擊,他們可能會提供幫助。
但是,大多數 ISP 和傳輸提供商會主動了解正在發生的事情並為您的伺服器發布黑洞路由。這意味著他們以盡可能低的成本發佈到您的伺服器的路由,通過
0.0.0.0
:他們使到您的伺服器的流量不再可在 Internet 上路由。這些路由通常是 /32s 並最終被刪除。這對你一點幫助都沒有;目的是保護 ISP 的網路免受洪水侵襲。在此期間,您的伺服器將有效地失去 Internet 訪問權限。您的 ISP(或者您,如果您有自己的 AS)能夠提供幫助的唯一方法是,他們是否使用可以檢測和限制可能的 DDoS 流量的智能流量整形器。不是每個人都擁有這項技術。但是,如果流量來自一兩個網路或一台主機,它們也可能會阻止您前面的流量。
簡而言之,您對這個問題**幾乎無能為力。**最好的長期解決方案是將您的服務託管在 Internet 上的許多不同位置,這些位置必須單獨和同時進行 DDoS,從而使 DDoS 變得更加昂貴。這方面的策略取決於您需要保護的服務;可以使用多個權威名稱伺服器、帶有備份 MX 記錄和郵件交換器的 SMTP 以及帶有循環 DNS 或多宿主的 HTTP 來保護 DNS(但在此期間可能會出現一些退化)。
負載均衡器很少能有效解決這個問題,因為負載均衡器本身也會遇到同樣的問題,只會造成瓶頸。IPTables 或其他防火牆規則將無濟於事,因為問題在於您的管道已飽和。 一旦你的防火牆看到連接,就已經太晚了;您站點的頻寬已被消耗。你對連接做什麼並不重要。當傳入流量恢復正常時,攻擊會得到緩解或完成。
如果可以,請考慮使用Akamai、Limelight 和 CDN77 等內容分發網路(CDN),或使用 CloudFlare 或 Prolexic 等 DDoS 清理服務。這些服務採取積極措施來緩解這些類型的攻擊,並且在許多不同的地方擁有如此多的可用頻寬,以至於氾濫它們通常是不可行的。
如果您決定使用 CloudFlare(或任何其他 CDN/代理),請記住隱藏您伺服器的 IP。如果攻擊者找到了 IP,他可以繞過 CloudFlare 再次直接對您的伺服器進行 DDoS。要隱藏 IP,您的伺服器不應直接與其他伺服器/使用者通信,除非它們是安全的。例如,您的伺服器不應直接向使用者發送電子郵件。如果您在 CDN 上託管所有內容並且沒有自己的伺服器,則這不適用。
此外,一些 VPS 和託管服務提供商在緩解這些攻擊方面比其他服務提供商做得更好。一般來說,它們越大,他們在這方面的表現就越好;一家擁有良好同行且擁有大量頻寬的供應商自然會更具彈性,而擁有活躍且配備齊全的網路運營團隊的供應商將能夠更快地做出反應。
基於負載
當您遇到基於負載的 DDoS 時,您會注意到平均負載異常高(或 CPU、RAM 或磁碟使用率,取決於您的平台和具體情況)。儘管伺服器似乎沒有做任何有用的事情,但它非常忙碌。通常,日誌中會有大量條目指示異常情況。這通常來自許多不同的地方並且是 DDoS,但情況不一定如此。 甚至不必有很多不同的主機。
這種攻擊是基於讓你的服務做很多昂貴的事情。這可能類似於打開大量 TCP 連接並強制您為它們維護狀態,或者將過大或過多的文件上傳到您的服務,或者可能進行非常昂貴的搜尋,或者真的做任何處理成本高昂的事情。流量在您計劃的範圍內並且可以承受,但是發出的請求類型太昂貴,無法處理這麼多.
首先,這種類型的攻擊是可能的,這通常表明存在配置問題或錯誤在您的服務中。例如,您可能打開了過於冗長的日誌記錄,並且可能將日誌儲存在寫入速度非常慢的東西上。如果有人意識到這一點並做了很多事情導致您將大量日誌寫入磁碟,那麼您的伺服器將緩慢爬行。您的軟體也可能在某些輸入情況下效率極低;原因與程序的數量一樣多,但有兩個例子是導致您的服務不關閉否則已完成的會話的情況,以及導致它產生子程序並離開它的情況。如果你最終有數以萬計的打開連接狀態來跟踪,或者數以萬計的子程序,你會遇到麻煩。
您可以做的第一件事是使用防火牆來丟棄流量。這並不總是可能的,但是如果您可以在傳入的流量中找到一個特徵(如果流量很輕,tcpdump 可能會很好),您可以將它放在防火牆上,它不會再造成麻煩。另一件事是修復服務中的錯誤(與供應商聯繫並為長期支持經驗做好準備)。
但是,如果是配置問題,請從那裡開始。將生產系統上的日誌記錄降低到一個合理的水平(取決於程序,這通常是預設值,並且通常會涉及確保“調試”和“詳細”的日誌記錄級別關閉;如果使用者所做的一切都準確地登錄並且很好的細節,你的日誌太冗長了)。此外,檢查子程序和請求限制,可能會限制傳入請求、每個 IP 的連接以及允許的子程序數量(如果適用)。
不言而喻,您的伺服器配置得越好,配置得越好,這種類型的攻擊就越難。特別是避免對 RAM 和 CPU 吝嗇。確保您與後端數據庫和磁碟儲存等事物的連接快速可靠。
基於漏洞利用
如果您的服務在啟動後異常迅速地崩潰,特別是如果您可以在崩潰之前建立一個請求模式並且請求是非典型的或與預期的使用模式不匹配,那麼您可能遇到了基於漏洞的 DoS。這可以來自少至只有一台主機(具有幾乎任何類型的網際網路連接)或多台主機。
這在許多方麵**類似於基於負載的 DoS ,並且具有基本相同的原因和緩解措施。**不同之處僅在於在這種情況下,該錯誤不會導致您的伺服器浪費,而是當機。攻擊者通常利用遠端崩潰漏洞,例如導致空解引用的亂碼輸入或您的服務中的某些內容。
處理這類似於未經授權的遠端訪問攻擊。 防火牆針對原始主機和流量類型(如果可以固定)。 如果適用, **請使用驗證反向代理。**收集法醫證據(嘗試擷取一些流量),向供應商送出錯誤單,並考慮也針對來源提出濫用投訴(或法律投訴)。
如果可以找到漏洞利用,這些攻擊的安裝成本相當低,而且它們可能非常有效,但也相對容易追踪和阻止。但是,對基於流量的 DDoS 有用的技術通常對基於漏洞利用的 DoS 無用。