【黑客·DDoS系列】鐘南山:對抗DDoS的5大手段!
一、【暴力 | 有效】減少暴露端口
使用防火墻,或云服務(wù)器的安全組功能,配置端口訪問黑白名單。
盡量避免將非業(yè)務(wù)必須的服務(wù)端口暴露在公網(wǎng)上,從而避免與業(yè)務(wù)無關(guān)的請求和訪問。通過配置防火墻或安全組可有效防止系統(tǒng)被掃描或者意外暴露。
二、【云服務(wù) | 花錢】增加帶寬、服務(wù)器短期內(nèi),如果沒有很好的其他解決辦法,可以通過氪金的方式,臨時增加服務(wù)配置,短期提升抗壓能力。
1.通過負載均衡等方法,分攤攻擊流量
架構(gòu)更多服務(wù)器(一般云服務(wù)器有鏡像復(fù)制功能,可快速復(fù)制構(gòu)建),使用Nginx等將用戶訪問流量均衡分配到各個服務(wù)器上,降低單臺服務(wù)器的壓力,提升整體業(yè)務(wù)吞吐處理能力,可有效緩解一定流量范圍內(nèi)的DDoS攻擊。
2.增加單臺服務(wù)器配置
可短期彈性地增加單臺服務(wù)器配置或帶寬,保證DDoS攻擊時間段內(nèi),服務(wù)的正??捎?。
當然,一般來說,方案1更省錢一些!
三、【靈活 | 免費】防DDoS軟件1、使用Nginx,防HTTP DDoS攻擊
以下模塊,可根據(jù)需要,任選其N!
?ngx_http_limit_req_module模塊,限制每秒請求數(shù)
通過漏桶原理來限制單位時間內(nèi)的請求數(shù),一旦單位時間內(nèi)請求數(shù)超過限制,就會返回503錯誤。
http {????limit_req_zone?$binary_remote_addr?zone=one:10m?rate=10r/s;??//觸發(fā)條件,所有訪問ip?限制每秒10個請求????server?{location ~ \.php$ {????????????????limit_req?zone=one?burst=5?nodelay;?????//執(zhí)行的動作,通過zone名字對應(yīng)}}}
參數(shù)說明:
?$binary_remote_addr:二進制訪問IP?zone=one:10m:定義zone名字叫one,并為這個zone分配10M內(nèi)存,用來存儲會話(二進制遠程地址),1m內(nèi)存可以保存16000會話?rate=10r/s:限制頻率為每秒10個請求?burst=5:允許超過頻率限制的請求數(shù)不多于5個,假設(shè)1、2、3、4秒請求為每秒9個,那么第5秒內(nèi)請求15個是允許的,反之,如果第一秒內(nèi)請求15個,會將5個請求放到第二秒,第二秒內(nèi)超過10的請求直接503,類似多秒內(nèi)平均速率限制。?nodelay:超過的請求不被延遲處理,設(shè)置后15個請求在1秒內(nèi)處理。
?ngx_http_limit_conn_module模塊,限制IP連接數(shù)
http {????limit_conn_zone?$binary_remote_addr?zone=addr:10m;?????//觸發(fā)條件????server?{location /download/ {????????????limit_conn?addr?1;????//限制同一時間內(nèi)1個連接,超出的連接返回503}}}
?ngx_lua_waf模塊,實現(xiàn)應(yīng)用級防火墻功能經(jīng)常使用寶塔的人應(yīng)該知道,nginx配置中,有個include?luawaf.conf的配置。實際上,這就是大名鼎鼎的ngx_lua_waf防火墻!
它的一般功能包括:?防止SQL注入,本地包含,部分溢出,fuzzing測試,XSS,SSRF等Web攻擊?防止SVN/備份之類文件泄漏?防止ApacheBench之類壓力測試工具的攻擊?屏蔽常見的掃描黑客工具,掃描器?屏蔽異常的網(wǎng)絡(luò)請求?屏蔽圖片附件類目錄php執(zhí)行權(quán)限?防止WebShell上傳
同時,它也具備基本的CC攻擊攔截功能:可針對訪問IP,記錄其訪問次數(shù),當在一定時間內(nèi)達到指定訪問次數(shù),則會進行攔截處理。
博主針對其lua腳本,做了一些修改,可動態(tài)配置封禁時長。使用方法(寶塔):
1.Nginx配置文件開啟
include luawaf.conf;2.將下載的文件,覆蓋到/www/server/nginx/waf?3.重要配置說明(下載得到的config.lua文件,可自行酌情修改):
--是否開啟攔截cc攻擊CCDeny="on"--a/b-c 表示如果同一IP在b秒內(nèi)請求超過a次,則禁用該IP c秒CCrate="100/50-60"
附下載地址:https://download.csdn.net/download/localhost01/18964545

2、使用iptables,防DDoS攻擊
#限制SYN_RECV連接,每秒一次-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT#限制IP碎片,每秒鐘只允許100個碎片,用來防止DoS攻擊-A FORWARD -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT#限制ping,每秒一次,10個后重新開始-A FORWARD -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT#限制ICMP回應(yīng)請求,每秒一次-A?FORWARD?-p?icmp?-m?icmp?--icmp-type?8?-m?limit?--limit?1/sec?-j ACCEPT#防御大量DOS攻擊連接,可允許外網(wǎng)每個IP最多15個初始連接,超過的則丟棄,第二條是在第一條的基礎(chǔ)上允許已經(jīng)建立的連接和子連接數(shù)量(--connlimit-mask 32為主機掩碼,32即為一個主機ip,也可以是網(wǎng)段)iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 --connlimit-mask 32 -j DROPiptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT#抵御DDOS,允許外網(wǎng)最多24個初始連接,然后服務(wù)器每秒新增12個,訪問太多超過的丟棄,第二條是允許服務(wù)器內(nèi)部每秒1個初始連接進行轉(zhuǎn)發(fā)iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPTiptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT#允許單個IP訪問服務(wù)器的80端口的最大連接數(shù)為20iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT#對訪問本機的3306端口進行限制,每個ip每小時只能連接5次,超過的拒接,1小時候重新計算次數(shù)iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROPiptables -A INPUT -p tcp --dport 3306 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
3、使用Linux內(nèi)核參數(shù),削弱DDoS攻擊
以下均是linux內(nèi)核參數(shù),可使用命令echo 2 > /proc/sys/net/ipv4/下述key來進行設(shè)值。
#表示開啟?SYN?Cookies功能,當出現(xiàn)?SYN?等待隊列溢出時,?啟用?Cookies?來處理,?可防范少量SYN攻擊net.ipv4.tcp_syncookies = 1#新建TCP連接請求,需要發(fā)送一個SYN包,該值決定內(nèi)核需要嘗試發(fā)送多少次syn連接請求才決定放棄建立連接。默認值是5. 對于高負載且通信良好的物理網(wǎng)絡(luò)而言,調(diào)整為2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_synack_retries = 2#0:不進行源地址校驗;#1:嚴格模式,即RFC3704定義的嚴格反向路徑;每個入向報文都要經(jīng)過FIB進行反向路徑檢驗,如果反向路徑的出向端口不是最優(yōu)的,則檢測失敗。默認情況下,丟棄檢驗失敗的報文,在某些特殊情況下可能會丟包造成業(yè)務(wù)異常;#2:松散模式,即RFC3704定義的松散反向路徑過每個入向報文的源地址都要經(jīng)過FIB檢驗,如果入向報文的源地址不能通過反向路徑的任何出向端口到達,則檢測失敗。#RFC3704文檔建議使用嚴格模式,防止IP欺騙的DDos攻擊。如果使用非對稱路由或者其他復(fù)雜路由,建議使用松散模式net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1#表示套接字由本端要求關(guān)閉,這個參數(shù)決定了他保持在?FIN_WAIT_2?狀態(tài)的時間,默認值是?60?秒net.ipv4.tcp_fin_timeout = 15#忽略ICMP廣播請求,啟動設(shè)置為1:從 ICMP 的角度出發(fā),為了避免 ICMP 主機探測、ICMP Flood 等各種網(wǎng)絡(luò)問題,你可以通過內(nèi)核選項,來限制 ICMP 的行為,避免放大攻擊net.ipv4.icmp_echo_ignore_broadcasts = 1#開啟惡意icmp錯誤消息保護net.ipv4.icmp_ignore_bogus_error_responses = 1#系統(tǒng)所能處理不屬于任何進程的TCP sockets最大數(shù)量。假如超過這個數(shù)量,那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設(shè)定這個限制,純粹為了抵御那些簡單的 DoS 攻擊,千萬不要依賴這個或是人為的降低這個限制。net.ipv4.tcp_max_orphans = 16384#永久禁?ping,一定程度上在互聯(lián)網(wǎng)上隱藏自己防止一些批量掃描軟件探測主機,減少被入侵的幾率,不過卻減少了使用上的便利性net.ipv4.icmp_echo_ignore_all = 1
4、使用DDoS deflate等專業(yè)軟件
DDoS deflate是一款免費的用來防御和減輕DDoS攻擊的腳本。它通過netstat監(jiān)測跟蹤創(chuàng)建大量網(wǎng)絡(luò)連接的IP地址。
在檢測到某個結(jié)點超過預(yù)設(shè)的閾值時,該程序會通過apf或iptables禁止或阻擋這些IP。
DDoS deflate官方網(wǎng)站:http://deflate.medialayer.com/
我們可以通過ELK日志分析,結(jié)合具體業(yè)務(wù)情況,在業(yè)務(wù)系統(tǒng)層面編寫一定的過濾邏輯,實現(xiàn)有效的DDoS過濾。
ELK這里不多講,大家自行百度。下面放幾張之前排查CC攻擊的kibana統(tǒng)計圖:

X軸為所有IP(由于較多,所以看起來密密麻麻,幾近全黑),Y軸為每個IP訪問總次數(shù),然后按照訪問次數(shù)由高到低排序。
可以看到,90%的IP,訪問次數(shù)在250以下,而少部分,達到了500以上。

X軸為不同IP,Y軸為各IP訪問不同URL的次數(shù)(每一個點就是一個URL)。
抽樣出異常IP,網(wǎng)絡(luò)威脅分析結(jié)果:可以看出,正常IP訪問的頁面,基本恒定在1-5次(本業(yè)務(wù)決定了訪問比較恒定),而異常IP,每個頁面數(shù),則不固定,有多有少。

由上,通過日志統(tǒng)計分析,不難看出:
1.正常、異常訪問的PV明顯
通過清晰的PV閾值(PV:頁面訪問量),結(jié)合WAF軟件,進行合理攔截;
一般網(wǎng)站,正常和異常的訪問分布,比起上圖可能會更加清晰明顯。
2.訪問IP來源異常
通過抽樣一些IP,結(jié)合到本身業(yè)務(wù)場景分析:
?如是否應(yīng)該存在境外IP??是否應(yīng)該存在IDC(云服務(wù)器)、VPS、VPN、Proxy等類型IP?
因此可利用純真數(shù)據(jù)庫,通過訪問IP的歸屬,進行智能過濾。
3.自行腦補……
五、【貴 | 好用】購買高防服務(wù)1、高防服務(wù)器和帶流量清洗的ISP 百度谷歌關(guān)鍵字:高防DDoS,搜到一大批,優(yōu)劣自行判斷。
2、流量清洗服務(wù) 例如:akamai、nexusguard,費用比較貴。
3、CDN 例如:藍訊、網(wǎng)宿、cloudflare等,CDN針對DDOS的分布式特點,將流量引流分散,同時對網(wǎng)站又有加速作用,效果好,成本相對低。

好了,今天的分享就到這兒了。
如果喜歡本文,請關(guān)注公眾號:開猿筆記,里面會有持續(xù)更新噢!
