可以說是我試圖進入安全口的天才第一步了,能走多遠鬼知道呢
背景
去年年前接到的一個外包專案,是一個base在日本的中國人留學機構做的靜態頁面,出于鍛煉自己的目的,選擇為他們按次結薪做長期服務維護,20年618當天給我越洋電話打過來說大量潛在客戶試圖訪問機構官網報錯無法訪問服務器,讓我去幫他們看看怎么回事,
回到電腦前登陸阿里云,發現帶寬和CPU被占滿了,如下圖所示:

第一反應就是:壞了,拒絕服務攻擊,搞不好還是分布式的……然后登陸后臺嘗試看日志,發現還真是拒絕服務攻擊:

還行,不是分布式的,不過也夠吃滿了服務器的1核1G1MBps小水管了……對方還挺無聊,發post沒把body整的整齊劃一,內容繽紛多彩
處理程序
第一階段:請求洪泛
iptable bans:
由于發現對方沒有使用分布式的攻擊手段,我考慮停止對攻擊流量的來源IP地址進行HTTP回應,經過查詢學習,我選擇使用iptables命令完成這一操作:
iptables -I INPUT -s <ip addr.> -j DROP
通過此命令,當傳入網關的ip地址為定義的ip時,網關會直接丟棄請求,不做任何處理,然而很快我就發現自己太年輕了,對方顯然不是抱著筆記本在攻擊我,他們不僅更換了ip, 還歡樂罵我的話……

我當時很幼稚的不死心,又用iptables ban了對面五個IP,然后對方換了IP繼續打我,我真的毫無辦法……
第二階段 分布式請求洪泛
ddos deflate:
由于對方會動態更換IP地址,單純手動封禁IP只能做到“見招拆招”,假設對方用的手動更換IP還好,拼手速即可,一旦人家用的是IP池自動呼叫,人是肯定干不過機器的,一開始打算造輪子,結合
iptables -I INPUT -s <addr> -j DROP
弄個腳本自動封IP,后來覺得雇主給不了讓我滿意的錢而且我太懶,于是轉而上網尋找輪子——找到了ddos deflate
這款軟體完全實作我的想法:輪詢拿指定時間范圍內的網路訪問記錄,把設定時間長度內連續請求數量大于指定值的IP自動關進小黑屋一段時間,但是他不是萬能的,對于雇主的小水管,一秒一次的請求居然也能造成服務延遲,對方不斷試探我配置的引數,先后有過一秒一次,五分鐘30次然后停止攻擊5分鐘、半小時攻擊停止五分鐘等各種憨批操作……下圖這些稀奇古怪的字串是寫成16進制的機器碼,又名shellcode,只要攻擊者通過overflow等方式將這些代碼覆寫在記憶體,就有可能執行這些機器碼的功能,一般來講會獲取服務器的控制權限、安裝后門、下載惡意程式等,

后來我配上一小時內連續訪問50次就ban的自殺式配置了以后,服務器太平了10天左右,我自以為高枕無憂,沒想到……
第三階段 SYN 半開鏈接攻擊
強安全策略 + CDN掩蓋源站地址
這次雇主又給我打電話,說裂開了,訪問時斷時續的,我上去看發現對方每三十秒給我發一次臟話,奇了怪了,這怎么會讓服務崩潰呢?用netstat命令查看發現有些IP地址連接數很高卻沒有被 ddos deflate屏蔽掉,于是查看這些IP的鏈接情況(圖是我后來截的):

可以看到,有些IP一直處于 SYN_RECD 狀態(這里沒有是因為攻擊已經被屏蔽了,命令是對的哈),意即為已經向其發送了SYN信號等待第三次握手,卻沒有收到ACK,每當一個IP地址埠向我們的服務器發送TCP鏈接請求,都會有一個執行緒被喚起對其提供服務,如果攻擊者drop我們發回的SYN,默認的該執行緒會等待15分鐘并重試3次,也就是說對方每個埠發動攻擊一次就會浪費一個執行緒45分鐘,當量足夠大,執行緒池爆掉的時候,你的服務器就再也無法為正常用戶提供服務了,
這一攻擊致命在于你不能判斷一個TCP半開鏈接是真的網不好還是有惡意,所以超時太短會導致影響正常用戶體驗,太長則會被對方攻擊流量洪泛,網傳的哪些加大視窗佇列長度、縮短超時時間等方法實際上并不能解決本質問題,
那么我們怎么解決這個問題呢?
答案是使用分布式內容分發網路(CDN),由于CDNIP不固定且遍布全球,某個IP如果被短時間高流量爆破,還有其他的IP為用戶提供服務,不會導致系統完全停止回應,而大多CDN提供了更好用的防火墻設定,也能方便我們自定義安全策略,本次處置我采用了CloudFlare CDN(免費版)+ 阿里云強安全策略解決了這一問題,
第一步:部署CloudFlare
登陸注冊以后,前往你的域名服務商,將DNS重定向至Cloudflare提供的地址:

隨后,等待24h使修改生效,
第二步:應用強安全策略
在阿里云上使用網路安全組策略,設定一個優先級為2的禁止任何流量流入或流出服務器的組策略和一個優先級為1的允許Cloudflare IP地址通過防火墻的組策略:


這時你的服務應該已經恢復正常了,因為攻擊者就算知道源站IP,也沒有辦法用垃圾流量塞滿你的服務器了,但是這還不夠太平,因為他們有可能洪泛掉免費CDN那點可憐的帶寬,怎么辦呢:
第三步:使用Cloudflare防火墻策略
在Cloudflare上,根據雇主特點(訪問集中于東亞洲幾個國家和幾個VPS常見地址)部署自定義的防火墻策略,如圖:

成效是顯著的,域外發動的攻擊基本全部被屏蔽,一個月以來,我們的服務再也沒有中斷過,而對方的攻擊流量全部被Cloudflare 一 瞬 緩 存

愿大家在防御的路上武運方昌!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/73518.html
標籤:其他
