常見ddos攻擊及防御
繼續秉承80sec的“Know it then hack it”,這裡簡單談一下ddos攻擊和防御方面的問題。ddos的全稱是分布式拒絕服務攻擊,既然是拒絕服務一定是因為某些原因而停止服務的,其中最重要 的也是最常用的原因就是利用服務端方面資源的有限性,這種服務端的資源范圍很廣,可以簡單的梳理一個請求正常完成的過程:
1 用戶在客戶端浏覽器輸入請求的地址
2 浏覽器解析該請求,包括分析其中的dns以明確需要到達的遠程服務器地址
3 明確地址後浏覽器和服務器的服務嘗試建立連接,嘗試建立連接的數據包通過本地網絡,中間路由最終艱苦到達目標網絡再到達目標服務器
4 網絡連接建立完成之後浏覽器根據請求建立不同的數據包並且將數據包發送到服務器某個端口
5 端口映射到進程,進程接受到數據包之後進行內部的解析
6 請求服務器內部的各種不同的資源,包括後端的API以及一些數據庫或者文件等
7 在邏輯處理完成之後數據包按照之前建立的通道返回到用戶浏覽器,浏覽器完成解析,請求完成。
上面各個點都可以被用來進行ddos攻擊,包括:
1 某些著名的客戶端劫持病毒,還記得訪問百度跳搜狗的事情麼?:)
2 某個大型互聯網公司發生的dns劫持事件,或者直接大量的dns請求直接攻擊dns服務器,這裡可以使用一些專業的第三方dns服務來緩解這個問題,如Dnspod
3 利用建立網絡連接需要的網絡資源攻擊服務器帶寬使得正常數據包無法到達如udp的洪水攻擊,消耗前端設備的cpu資源以使得數據包不能有效轉發如icmp 和一些碎片包的洪水攻擊,消耗服務器方建立正常連接需要的資源如syn flood或者就是占用大量的連接使得正常的連接無法發起,譬如這次的TCP flood
4 利用webserver的一些特點進行攻擊,相比nginx來說,apache處理一個請求的過程就比較笨重。
5 利用應用程序內部的一些特性攻擊程序內部的資源如mysql,後端消耗資源大的接口等等,這也就是傳統意義上的CC攻擊。
這裡涉及到攻防的概念,但是實際上如果了解對方的攻擊點和攻擊手法,防御會變成簡單的一個拼資源的過程,不要用你最弱的地方去抗人家最強的地方,應該從最 合適的地方入手把問題解決掉,譬如在路由器等設備上解決應用層攻擊就不是一個好的辦法,同理,在應用層嘗試解決網絡層的問題也是不可能的,簡單來說,目標 是只讓正常的數據和請求進入到我們的服務,一個完善的防御體系應該考慮如下幾個層面: