在本系列的第一篇文章中,我們介紹了我們客服系統(tǒng)遇到DDoS攻擊的情況,以及我們?yōu)槭裁礇Q定采用自建CDN的方式來(lái)解決這個(gè)問題的原因。 之后,我們介紹了自建CDN的具體建設(shè)規(guī)劃,主要從以下幾個(gè)方面進(jìn)行考量:硬件成本、帶寬成本、架構(gòu)設(shè)計(jì)、實(shí)際部署。 本文是《自建CDN防御DDoS》系列的第三篇,介紹CDN架構(gòu)的后續(xù)改進(jìn)。后續(xù)改進(jìn)主要包括三個(gè)方面:DNS智能解析+輪詢+存活監(jiān)測(cè),集中式日志分析+攻擊防御,以及多節(jié)點(diǎn)CDN的快速部署+圖形化管理。 1、DNS智能解析+輪詢+存活監(jiān)測(cè)A. 部署智能DNS就近匹配CDN節(jié)點(diǎn)我們自建CDN的另外一個(gè)目的是做訪問路徑優(yōu)化,因?yàn)檫@些加速節(jié)點(diǎn)是我們精心挑選之后部署的,無(wú)論是帶寬質(zhì)量、機(jī)房環(huán)境、安全風(fēng)險(xiǎn)等指標(biāo)均能滿足可靠可控的需求。 因此當(dāng)部署完多個(gè)CDN節(jié)點(diǎn)后,為使這些節(jié)點(diǎn)協(xié)同運(yùn)作,同時(shí)優(yōu)化用戶的訪問路徑,我們可以通過配置Bind的View視圖把訪客IP指定到相應(yīng)的CDN節(jié)點(diǎn),使得訪客能夠根據(jù)自己所在的區(qū)域和線路類型,就近從CDN節(jié)點(diǎn)上獲取頁(yè)面內(nèi)容,從而優(yōu)化訪客的路由。 B. DNS自動(dòng)輪詢+故障監(jiān)測(cè)我們可以利用DNS輪詢來(lái)為網(wǎng)站進(jìn)行分流負(fù)載。如果條件充裕,可以在各個(gè)大區(qū)內(nèi)部署冗余的CDN節(jié)點(diǎn),這樣既能緩解某個(gè)區(qū)域內(nèi)單一節(jié)點(diǎn)的負(fù)載,同時(shí)能為這個(gè)節(jié)點(diǎn)作互備,當(dāng)這個(gè)區(qū)內(nèi)的CDN節(jié)點(diǎn)因故障失效之后,調(diào)度機(jī)制能在最快時(shí)間內(nèi)將故障節(jié)點(diǎn)的流量牽引至當(dāng)前可用節(jié)點(diǎn),實(shí)現(xiàn)動(dòng)態(tài)的剔除該節(jié)點(diǎn),從而不影響訪客的正常請(qǐng)求。 實(shí)現(xiàn)DNS輪詢只需要在Bind中為同一域名添加多個(gè)A記錄即可。Bind View視圖功能和節(jié)點(diǎn)存活檢查的相關(guān)技術(shù)已經(jīng)相當(dāng)成熟,相應(yīng)的技術(shù)文檔也比較多了,可以參考《使用Bind構(gòu)建高可用智能DNS服務(wù)器》,這里我們就不再累述。 C. Bind View IP分揀腳本我們目前編寫的腳本可以幫忙快速分揀出電信、聯(lián)通的線路還包括華東、華南、華北和西部四個(gè)地區(qū)的IP范圍,有興趣的同學(xué)可以試用一下。 # 這個(gè)腳本是從Apnic下載屬于中國(guó)的IP列表,然后把屬于聯(lián)通,電信及其它的IP進(jìn)行歸類 get_apnic(){ FILE=$PWD/ip_apnic CNC_FILE=$PWD/CNC CTC_FILE=$PWD/CTC TMP=/dev/shm/ip.tmp rm -f $FILE wget http://ftp./apnic/stats/apnic/delegated-apnic-latest -O $FILE grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt do echo $ip:$cnt mask=$(cat << EOF | bc | tail -1 pow=32; define log2(x) { if (x<=1) return (pow); pow--; return(log2(x/2)); } log2($cnt) EOF ) whois $ip@whois. > $TMP.tmp sed -n '/^inetnum/,/source/p' $TMP.tmp | awk '(/mnt-/ || /netname/)' > $TMP NETNAME=`grep ^netname $TMP | sed -e 's/.*: \(.*\)/\1/g' | sed -e 's/-.*//g'|sed 's: ::g'` egrep -qi "(CNC|UNICOM|WASU|NBIP|CERNET|CHINAGBN|CHINACOMM|FibrLINK|BGCTVNET|DXTNET|CRTC)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CNC_FILE else egrep -qi "(CHINATELECOM|CHINANET)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CTC_FILE else sed -n '/^route/,/source/p' $TMP.tmp | awk '(/mnt-/ || /netname/)' > $TMP egrep -qi "(CNC|UNICOM|WASU|NBIP|CERNET|CHINAGBN|CHINACOMM|FibrLINK|BGCTVNET|DXTNET|CRTC)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CNC_FILE else egrep -qi "(CHINATELECOM|CHINANET)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CTC_FILE else echo "$ip/$mask $NETNAME" >> $PWD/OTHER fi fi fi fi done rm -rf $TMP $TMP.tmp } # 從whois信息中提取address登記人地址信息,從而判斷在哪個(gè)省份 gen_zone(){ FILE=$2 [ ! -s $FILE ] && echo "$FILE file not found." && exit 0 rm -rf $FILE.zone while read LINE;do LINE=`echo "$LINE"|awk '{print $1}'` echo "$LINE @ " echo -n "$LINE @ " >> $FILE.zone whois $LINE|egrep "address"|xargs echo >> $FILE.zone sleep $TIME done < $FILE } # 分別挑選出華東,華南,華北,西部四大區(qū)的IP地址列表 gen_area(){ FILE=$2 [ ! -s $FILE.zone ] && echo "$FILE.zone file not found." && exit 0 STRING="none" echo $FILE|egrep -i -q "cnc" [ $? = 0 ] && STRING="cnc" echo $FILE|egrep -i -q "ctc" [ $? = 0 ] && STRING="ctc" echo $FILE|egrep -i -q "other" [ $? = 0 ] && STRING="other" [ $STRING = "none" ] && echo "Not cnc or ctc file" && exit 0 cp -a $FILE.zone $FILE.tmp egrep -i "$HD_STR" $FILE.tmp > $HD_FILE.$STRING egrep -i -v "$HD_STR" $FILE.tmp > aaa mv aaa $FILE.tmp egrep -i "$HN_STR" $FILE.tmp > $HN_FILE.$STRING egrep -i -v "$HN_STR" $FILE.tmp > aaa mv aaa $FILE.tmp egrep -i "$XI_STR" $FILE.tmp > $XI_FILE.$STRING egrep -i -v "$XI_STR" $FILE.tmp > aaa mv aaa $FILE.tmp egrep -i "$HB_STR" $FILE.tmp > $HB_FILE.$STRING egrep -i -v "$HB_STR" $FILE.tmp > aaa mv aaa $FILE.tmp grep ^[0-9] $FILE.tmp |awk '{print $1}' >> $HD_FILE.$STRING sed -r -i 's#@.*##g' *.$STRING rm -rf $FILE.tmp } 具體腳本可以通過https://github.com/shaohaiyang/easyMyDNS下載獲取。 2、集中式日志分析+攻擊防御CDN作為網(wǎng)站的前置節(jié)點(diǎn),實(shí)時(shí)記錄著所有訪客的訪問行為。可以說(shuō),日志當(dāng)中蘊(yùn)藏了豐富的奧秘。據(jù)了解,大部分網(wǎng)站并沒有對(duì)其訪問日志進(jìn)行很好的利用,僅僅是對(duì)其做了歸檔備份。如能利用好這些訪問日志,并對(duì)其進(jìn)行深度的分析和挖掘,對(duì)于了解網(wǎng)站的運(yùn)行狀況、感知業(yè)務(wù)層面的一些異?;顒?dòng),能夠帶來(lái)極大的幫助。尤其是當(dāng)面臨DDoS攻擊時(shí),能夠提供出足夠的依據(jù)來(lái)區(qū)分惡意的IP。 區(qū)分惡意攻擊的主要依據(jù)類型有:
目前我們對(duì)HAProxy的日志分析僅作用于單節(jié)點(diǎn),我們?cè)趯?shí)際應(yīng)用場(chǎng)景中,是基于單位時(shí)間段的日志截?cái)?,把日志寫入?dev/shm內(nèi)存中,使用了通用的shell,awk,sed語(yǔ)言來(lái)做行為分析,這樣做的好處是避免了磁盤IO開銷的短板。缺點(diǎn)是,日志分析行為比較粗糙,分析效率有待于提高。 A. 多節(jié)點(diǎn)CDN集中式日志分析+攻擊阻斷架構(gòu)由于作用于單節(jié)點(diǎn)的日志分析架構(gòu)存在較大的局限性,主要體現(xiàn)為:
因此在多節(jié)點(diǎn)CDN架構(gòu)下,如要及時(shí)感知到DDoS攻擊并對(duì)其進(jìn)行阻斷,而且還要考慮盡可能少的開銷用節(jié)點(diǎn)系統(tǒng)資源,需要站在全局層面來(lái)集中分析攻擊行為,并且針對(duì)分析后的結(jié)果展開多節(jié)點(diǎn)協(xié)同處理防御/阻斷規(guī)則,來(lái)應(yīng)對(duì)DDoS攻擊。 對(duì)難點(diǎn)進(jìn)行梳理后,我們發(fā)現(xiàn)要實(shí)現(xiàn)這樣的需求主要解決三個(gè)問題:
具體架構(gòu):
a. HAProxy/Nginx作為防御攻擊系統(tǒng)的載體我們?cè)?a href="http://www./cn/articles/anti-ddos-cdn-2" style="text-decoration: none; color: rgb(40, 106, 178); outline: none !important; margin: 0px; border: 0px; padding: 0px;">上一篇文章中已經(jīng)提到過,在CDN節(jié)點(diǎn)端,我們建議用HAProxy或Nginx作為防御性的反向代理,能夠靈活的制定防御攻擊的ACL過濾規(guī)則,并能夠以熱加載的方式實(shí)時(shí)生效。 b. 日志存儲(chǔ)解決思路這個(gè)環(huán)節(jié)主要包含兩個(gè)部分,一是由節(jié)點(diǎn)到LogServer的日志傳輸,另一個(gè)是LogServer這一端的日志集中存儲(chǔ)。由CDN節(jié)點(diǎn)產(chǎn)生的日志可以通過本地寫入PIPE + Rsyslog UDP傳輸?shù)姆绞綄⑷罩緟R總到專用的LogServer,LogServer收到日志之后,按照域名分類的方式將日志存儲(chǔ)在一起。 對(duì)于海量日志的存儲(chǔ)可以用Hadoop作為載體,利用Map/Reduce算法分解日志,提升篩選效率。對(duì)此有興趣深入了解的同學(xué)可以參考開源日志系統(tǒng)比較。 c. 協(xié)同運(yùn)作的攻擊阻斷機(jī)制這里則是最為關(guān)鍵的一個(gè)環(huán)節(jié):我們整個(gè)架構(gòu)的重點(diǎn)在于“抗攻擊”,而我們經(jīng)過前面的分析,針對(duì)多節(jié)點(diǎn)CDN的攻擊防御,最為高效的做法是:由專用的LogServer進(jìn)行集中式分析運(yùn)算,并將運(yùn)算結(jié)果生成安全防護(hù)策略,實(shí)時(shí)對(duì)接到各個(gè)CDN節(jié)點(diǎn),協(xié)同處理防御/阻斷規(guī)則,以此來(lái)應(yīng)對(duì)DDoS攻擊。那么這里將會(huì)產(chǎn)生以下幾個(gè)主要問題:
對(duì)此我們的設(shè)計(jì)思路如下: 當(dāng)日志完整的存儲(chǔ)在LogServer之后,使用分析腳本對(duì)其進(jìn)行特征匹配,提取出惡意攻擊的來(lái)源IP地址,將這些IP地址生成相應(yīng)的HAProxy/Iptables的阻斷規(guī)則,并下發(fā)到全局的CDN節(jié)點(diǎn)。這里可以通過兩種方式來(lái)進(jìn)行:
B. 該架構(gòu)的優(yōu)勢(shì)
3、多節(jié)點(diǎn)CDN的快速部署與圖形化管理管理和運(yùn)維一套CDN系統(tǒng)對(duì)于任何組織來(lái)講都是個(gè)很大的挑戰(zhàn),尤其是部署了多區(qū)域多線路的CDN。需要隨時(shí)掌控CDN加速的節(jié)點(diǎn)列表、需要定義哪些網(wǎng)頁(yè)元素可以作為緩存、需要做什么樣的ACL策略等等,這些都需要專業(yè)的系統(tǒng)運(yùn)維人員來(lái)配置實(shí)現(xiàn)。 通常較為成熟的做法是通過主控機(jī),預(yù)先配置好CDN規(guī)則 ,通過Rsync把配置文件推送到各個(gè)CDN節(jié)點(diǎn)中去。很顯然,這種方案雖然效率高,但是對(duì)CDN部署者具有一定的門檻,加上服務(wù)器的權(quán)限控制要求非常嚴(yán)格,也不利于面向其它工程師做推廣。 偶然的機(jī)會(huì),我們有幸在黑客馬拉松大賽初識(shí)了OpenCDN這個(gè)獲獎(jiǎng)作品,通過互補(bǔ)整合,更是彌補(bǔ)了我們這套CDN上的前端管理的不足。因此,可以跟OpenCDN這個(gè)項(xiàng)目做很好的深度整合,降低運(yùn)維和管理門檻,造福于更多的IT運(yùn)維的用戶。 ![]() A. OpenCDN主要解決什么問題?OpenCDN是一套快速部署CDN加速的工具,針對(duì)專門提供CDN加速服務(wù)的企業(yè)或?qū)Χ喙?jié)點(diǎn)CDN加速有需求的企業(yè)提供一套便捷的管理平臺(tái),可對(duì)每一個(gè)節(jié)點(diǎn)的狀態(tài)、系統(tǒng)負(fù)載進(jìn)行實(shí)時(shí)監(jiān)測(cè)與統(tǒng)一管理。OpenCDN預(yù)制了多套常用緩存規(guī)則,支持多種復(fù)雜的CDN緩存場(chǎng)景。正如其名,OpenCDN是免費(fèi)開源的。 B. OpenCDN當(dāng)前是怎么做的?OpenCDN的主體架構(gòu)可分為CDN管理中心和CDN加速節(jié)點(diǎn)。CDN加速節(jié)點(diǎn)可以有很多個(gè),在數(shù)量上沒有任何限制。用戶可以通過OpenCDN快速的部署多個(gè)CDN加速節(jié)點(diǎn),并通過一個(gè)管理中心進(jìn)行集中式的管理。 因此OpenCDN在這里主要做了兩部分工作,一是將CDN節(jié)點(diǎn)的部署過程一鍵化,二是通過WebConsole工具將這些CDN加速節(jié)點(diǎn)統(tǒng)一的管理起來(lái)。 ![]() C. OpenCDN未來(lái)要做出什么樣?達(dá)到怎么樣的效果?OpenCDN將致力于為多節(jié)點(diǎn)CDN加速有需求的網(wǎng)站,提供一套便捷的CDN加速管理平臺(tái),能夠按需自建CDN節(jié)點(diǎn),靈活控制成本,提高網(wǎng)站響應(yīng)速度,輕松應(yīng)對(duì)突發(fā)流量。 后續(xù)我們將在此基礎(chǔ)上整合加入上述CDN防御大流量DDoS攻擊的組合方案。我們對(duì)這套平臺(tái)做了開源,希望有更多有需要的人能夠以最低的成本獲取它,同時(shí)也希望通過更多的開發(fā)者加入進(jìn)來(lái)一起完善它。所謂人人為我,我為人人。 D. OpenCDN進(jìn)行自建CDN的優(yōu)勢(shì)
OpenCDN適用于哪些用戶?OpenCDN目前來(lái)看,比較適用于行業(yè)競(jìng)爭(zhēng)比較大的網(wǎng)站: 游戲站、垂直電商、社區(qū)論壇、在線視頻、聊天。 這些網(wǎng)站的共性特點(diǎn):流量中型規(guī)模,競(jìng)爭(zhēng)激烈,經(jīng)常被攻擊,行業(yè)利潤(rùn)高,愿意花錢。 總結(jié)至此,《自建CDN防御DDoS》系列便告一段落。如果有任何疑問,歡迎跟我們交流、探討。 作者簡(jiǎn)介邵海楊(個(gè)人頁(yè)面),來(lái)自杭州Linux用戶組。網(wǎng)名“海洋之心”,系統(tǒng)架構(gòu)師,業(yè)余撰稿人,致力于開源軟件及前沿科技的研究和探索。 張磊(微博,博客),來(lái)自杭州谷歌開發(fā)者社區(qū)。專注于信息安全技術(shù)領(lǐng)域,曾主導(dǎo)多項(xiàng)銀行/證券行業(yè)網(wǎng)站安全測(cè)試和入侵取證分析項(xiàng)目,為四大銀行提供安全防護(hù)技術(shù)支持。目前創(chuàng)業(yè)做互聯(lián)網(wǎng)安全防護(hù)。 相關(guān)閱讀自建CDN防御DDoS(1):知己知彼,建設(shè)持久防線 |
|
來(lái)自: icecity1306 > 《可能用到系統(tǒng)》