對于遭受DDOS攻擊的情況是讓人很尷尬的,如果我們有良好的DDoS防御方法,那么很多問題就將迎刃而解,我們來看看我們有哪些常用的有效地方法來做好DDoS防御呢。
對于DDoS防御的理解:
對付DDOS是一個系統(tǒng)工程,想僅僅依靠某種系統(tǒng)或產(chǎn)品防住DDOS是不現(xiàn)實(shí)的,可以肯定的是,完全杜絕DDOS目前是不可能的,但通過適當(dāng)?shù)拇胧┑钟?0%的DDoS攻擊是可以做到的, 基于攻擊和防御都有成本開銷的緣故,若通過適當(dāng)?shù)霓k法增強(qiáng)了抵御DDOS的能力,也就意味著加大了攻擊者的攻擊成本,那么絕大多數(shù)攻擊者將無法繼續(xù)下去而放棄,也就相當(dāng)于成功的抵御了DDoS攻擊。
舉個例子:
我開了一家餐廳,正常情況下,最多可以容納30個人同時進(jìn)餐。你直接走進(jìn)餐廳,找一張桌子坐下點(diǎn)餐,馬上就可以吃到東西。
很不幸,我得罪了一個流氓。他派出300個人同時涌進(jìn)餐廳。這些人看上去跟正常的顧客一樣,每個都說"趕快上餐"。但是,餐廳的容量只有30個人, 根本不可能同時滿足這么多的點(diǎn)餐需求,加上他們把門口都堵死了,里三層外三層,正常用餐的客人根本進(jìn)不來,實(shí)際上就把餐廳癱瘓了。
這就是 DDoS 攻擊,它在短時間內(nèi)發(fā)起大量請求,耗盡服務(wù)器的資源,無法響應(yīng)正常的訪問,造成網(wǎng)站實(shí)質(zhì)下線。
DDoS 里面的 DoS 是 denial of service(停止服務(wù))的縮寫,表示這種攻擊的目的,就是使得服務(wù)中斷。最前面的那個 D 是 distributed (分布式), 表示攻擊不是來自一個地方,而是來自四面八方,因此更難防。你關(guān)了前門,他從后門進(jìn)來;你關(guān)了后門,他從窗口跳起來。
1. 采用高性能的網(wǎng)絡(luò)設(shè)備
首先要保證網(wǎng)絡(luò)設(shè)備不能成為瓶頸,因此選擇路由器、交換機(jī)、硬件防火墻等設(shè)備的時候要盡量選用知名度高、口碑好的產(chǎn)品。再就是假如和網(wǎng)絡(luò)提供商有特殊關(guān)系或協(xié)議的話就更好了, 當(dāng)大量攻擊發(fā)生的時候請他們在網(wǎng)絡(luò)接點(diǎn)處做一下流量限制來對抗某些種類的DDoS攻擊是非常有效的。
這就是傳說中的技術(shù)不夠,用錢湊。
2. 盡量避免NAT的使用
無論是路由器還是硬件防護(hù)墻設(shè)備要盡量避免采用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT的使用,因?yàn)椴捎么思夹g(shù)會較大降低網(wǎng)絡(luò)通信能力,其實(shí)原因很簡單,因?yàn)镹AT需要對 地址來回轉(zhuǎn)換,轉(zhuǎn)換過程中需要對網(wǎng)絡(luò)包的校驗(yàn)和進(jìn)行計(jì)算,因此浪費(fèi)了很多CPU的時間,但有些時候必須使用NAT,那就沒有好辦法了。
3. 充足的網(wǎng)絡(luò)帶寬保證
網(wǎng)絡(luò)帶寬直接決定了能抗受攻擊的能力,假若僅僅有10M帶寬的話,無論采取什么措施都很難對抗現(xiàn)在的SYNFlood攻擊,當(dāng)前至少要選擇100M的共享帶寬, 最好的當(dāng)然是掛在1000M的主干上了。但需要注意的是,主機(jī)上的網(wǎng)卡是1000M的并不意味著它的網(wǎng)絡(luò)帶寬就是千兆的,若把它接在100M的交換機(jī)上,它的實(shí)際帶寬不會超過100M, 再就是接在100M的帶寬上也不等于就有了百兆的帶寬,因?yàn)榫W(wǎng)絡(luò)服務(wù)商很可能會在交換機(jī)上限制實(shí)際帶寬為10M,這點(diǎn)一定要搞清楚。
4. 升級主機(jī)服務(wù)器硬件
在有網(wǎng)絡(luò)帶寬保證的前提下,請盡量提升硬件配置,要有效對抗每秒10萬個SYN攻擊包,服務(wù)器的配置至少應(yīng)該為:P4 2.4G/DDR512M/SCSI-HD, 起關(guān)鍵作用的主要是CPU和內(nèi)存,若有志強(qiáng)雙CPU的話就用它吧,內(nèi)存一定要選擇DDR的高速內(nèi)存,硬盤要盡量選擇SCSI的,別只貪IDE價格不貴量還足的便宜,否則會付出高昂的性能代價, 再就是網(wǎng)卡一定要選用3COM或Intel等名牌的,若是Realtek的還是用在自己的PC上吧。
5. 把網(wǎng)站做成靜態(tài)頁面或者偽靜態(tài)
大量事實(shí)證明,把網(wǎng)站盡可能做成靜態(tài)頁面,不僅能大大提高抗攻擊能力,而且還給黑客入侵帶來不少麻煩,至少到現(xiàn)在為止關(guān)于HTML的溢出還沒出現(xiàn),看看吧!新浪、搜狐、 網(wǎng)易等門戶網(wǎng)站主要都是靜態(tài)頁面,若你非需要動態(tài)腳本調(diào)用,那就把它弄到另外一臺單獨(dú)主機(jī)去,免的遭受攻擊時連累主服務(wù)器,當(dāng)然,適當(dāng)放一些不做數(shù)據(jù)庫調(diào)用腳本還是可以的,此外, 最好在需要調(diào)用數(shù)據(jù)庫的腳本中拒絕使用代理的訪問,因?yàn)榻?jīng)驗(yàn)表明使用代理訪問你網(wǎng)站的80%屬于惡意行為。
6. 增強(qiáng)操作系統(tǒng)的TCP/IP棧
Win2000和Win2003作為服務(wù)器操作系統(tǒng),本身就具備一定的抵抗DDoS攻擊的能力,只是默認(rèn)狀態(tài)下沒有開啟而已,若開啟的話可抵擋約10000個SYN攻擊包, 若沒有開啟則僅能抵御數(shù)百個,具體怎么開啟,自己去看微軟的文章吧!《強(qiáng)化 TCP/IP 堆棧安全》。
7. 安裝專業(yè)抗DDOS防火墻
8. HTTP 請求的攔截
如果惡意請求有特征,對付起來很簡單:直接攔截它就行了。
HTTP 請求的特征一般有兩種:IP 地址和 User Agent 字段。比如,惡意請求都是從某個 IP 段發(fā)出的,那么把這個 IP 段封掉就行了?;蛘?,它們的 User Agent 字段有特征(包含某個特定的詞語),那就把帶有這個詞語的請求攔截。
9. 備份網(wǎng)站
你要有一個備份網(wǎng)站,或者最低限度有一個臨時主頁。生產(chǎn)服務(wù)器萬一下線了,可以立刻切換到備份網(wǎng)站,不至于毫無辦法。
備份網(wǎng)站不一定是全功能的,如果能做到全靜態(tài)瀏覽,就能滿足需求。最低限度應(yīng)該可以顯示公告,告訴用戶,網(wǎng)站出了問題,正在全力搶修。
這種臨時主頁建議放到 Github Pages 或者 Netlify,它們的帶寬大,可以應(yīng)對攻擊,而且都支持綁定域名,還能從源碼自動構(gòu)建。
10. 部署CDN
CDN 指的是網(wǎng)站的靜態(tài)內(nèi)容分發(fā)到多個服務(wù)器,用戶就近訪問,提高速度。因此,CDN 也是帶寬擴(kuò)容的一種方法,可以用來防御 DDOS 攻擊。
網(wǎng)站內(nèi)容存放在源服務(wù)器,CDN 上面是內(nèi)容的緩存。用戶只允許訪問 CDN,如果內(nèi)容不在 CDN 上,CDN 再向源服務(wù)器發(fā)出請求。這樣的話,只要 CDN 夠大, 就可以抵御很大的攻擊。不過,這種方法有一個前提,網(wǎng)站的大部分內(nèi)容必須可以靜態(tài)緩存。對于動態(tài)內(nèi)容為主的網(wǎng)站(比如論壇),就要想別的辦法,盡量減少用戶對動態(tài)數(shù)據(jù)的請求。
各大云服務(wù)商提供的高防 IP,背后也是這樣做的:網(wǎng)站域名指向高防 IP,它提供一個緩沖層,清洗流量,并對源服務(wù)器的內(nèi)容進(jìn)行緩存。
這里有一個關(guān)鍵點(diǎn),一旦上了 CDN,千萬不要泄露源服務(wù)器的 IP 地址,否則攻擊者可以繞過 CDN 直接攻擊源服務(wù)器,前面的努力都白費(fèi)。搜一下"繞過 CDN 獲取真實(shí) IP 地址",你就會知道國內(nèi)的黑產(chǎn)行業(yè)有多猖獗。
11. 其他防御措施
以上幾條對抗DDoS建議,適合絕大多數(shù)擁有自己主機(jī)的用戶,但假如采取以上措施后仍然不能解決DDoS問題,就有些麻煩了,可能需要更多投資, 增加服務(wù)器數(shù)量并采用DNS輪巡或負(fù)載均衡技術(shù),甚至需要購買七層交換機(jī)設(shè)備,從而使得抗DDoS攻擊能力成倍提高,只要投資足夠深入。