一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

自建CDN防御DDoS:架構(gòu)設(shè)計(jì)、成本與部署細(xì)節(jié)

 看見就非常 2013-08-15

自建CDN防御DDoS:架構(gòu)設(shè)計(jì)、成本與部署細(xì)節(jié)

本系列的第一篇文章中,我們介紹了我們客服系統(tǒng)遇到DDoS攻擊的情況,以及我們?yōu)槭裁礇Q定采用自建CDN的方式來解決這個(gè)問題的原因。

下面,我們將介紹自建CDN的具體建設(shè)規(guī)劃,主要從以下幾個(gè)方面進(jìn)行考量:硬件成本、帶寬成本、架構(gòu)設(shè)計(jì)、實(shí)際部署。

硬件成本

在硬件上,我們選型的需求是在1U的基礎(chǔ)上具有強(qiáng)勁的性能,同時(shí)性價(jià)比要高。

我們選擇了(強(qiáng)氧)雙子星服務(wù)器,其硬件規(guī)格為:1U機(jī)身+支持雙路至強(qiáng)CPU+最大支持48G內(nèi)存+雙千兆網(wǎng)口x2+H3C S1208八口千兆,提供三年質(zhì)保服務(wù),總價(jià)約1.5萬。

帶寬成本

單線機(jī)房的機(jī)房和帶寬資源,由于不需要經(jīng)過第三方拉線撮合,直接從運(yùn)營代理商購買,因此選擇余地大,性價(jià)比高。以租用電信、聯(lián)通單線資源為例,每條線獨(dú)享100M帶寬,提供8個(gè)IP,有些機(jī)房自帶硬防,能夠防御5G-10G流量。

平均費(fèi)用,每個(gè)節(jié)點(diǎn)帶寬成本基本在1.6~2.5萬/年。

架構(gòu)設(shè)計(jì)

CDN架構(gòu)上要充分體現(xiàn)出抗攻擊能力和靈活應(yīng)變的原則。因此,我們將CDN節(jié)點(diǎn)分解成反向代理+緩存加速+攻擊防御這三個(gè)不同層次的功能結(jié)構(gòu)。

  • 反向代理功能(作用:路由加速,隱藏主節(jié)點(diǎn),負(fù)載均衡)
  • 緩存加速功能(作用:靜態(tài)推送,節(jié)省后端主節(jié)點(diǎn)帶寬)
  • 攻擊防御功能(作用:快速解析,匹配過濾惡意攻擊)

開源世界里能夠擔(dān)當(dāng)反向代理及緩存的軟件不少,而且各有優(yōu)劣。作為架構(gòu)師,要考慮如何選型,我們從性能、功能、配置上來進(jìn)行比較篩選。

軟件名稱 性能 功能 過濾規(guī)則配置
Squid 不能多核是硬傷,磁盤緩存容量有優(yōu)勢(shì),性能中等 多,支持ACL角色控制,也支持ICP緩存協(xié)議 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng)
Varnish 多核支持,內(nèi)存緩存,性能強(qiáng) 夠用,不支持集群,支持后端存活檢查 不支持外部文件讀取,需要轉(zhuǎn)義,支持熱啟動(dòng)
Nginx 多核支持,支持代理插件,性能較強(qiáng) 多,通過插件可以充當(dāng)多角色服務(wù)器 不支持外部文件讀取,需要轉(zhuǎn)義,支持熱啟動(dòng)
ATS 多核支持,磁盤/內(nèi)存緩存,性能強(qiáng) 夠用,支持插件開發(fā),也支持ICP協(xié)議 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng),但缺乏文檔
HAProxy 多核支持,無緩存,HTTP頭支持語法操作,性能強(qiáng) 少,只專注HTTP頭部解析和轉(zhuǎn)發(fā)功能,支持ACL角色控制,支持后端存活檢查 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng),支持會(huì)話粘滯和長連接

我們對(duì)這三層功能結(jié)構(gòu)分別進(jìn)行了測(cè)試調(diào)優(yōu)及生產(chǎn)線的實(shí)踐檢驗(yàn),從以下方面評(píng)估:

  • HTTP防御性能:HAProxy在應(yīng)對(duì)大流量CC攻擊時(shí),做正則匹配及頭部過濾時(shí),CPU消耗只占10%~20%。其它軟件均狂占CPU資源約90%以上,容易成瓶頸導(dǎo)致整個(gè)系統(tǒng)無響應(yīng)。
  • 反向代理性能:?jiǎn)渭冝D(zhuǎn)發(fā)效率以內(nèi)存緩存型的Varnish性能最強(qiáng),ATS和Nginx次之,考慮大容量緩存因素,ATS也是個(gè)不錯(cuò)的選擇,但文檔缺乏,需要持續(xù)關(guān)注。Nginx是專門針對(duì)C10K的產(chǎn)物,性能不錯(cuò),配合眾多插件,改造性很強(qiáng)。
  • 過濾規(guī)則的可配置性:HAProxy,ATS,Squid均支持規(guī)則文件讀取、ACL定制和熱加載、熱啟動(dòng)。Nginx則不支持外部文件正則匹配,略差一點(diǎn),但可塑性強(qiáng)。

因此,綜合上述考慮,最終我們采用的架構(gòu)是HAProxy+Varnish/ATS/Nginx的組合,即防御型反向代理緩存方案,功能角色如下:

  • 前面由HAProxy全力負(fù)責(zé)動(dòng)靜資源分離,實(shí)現(xiàn)會(huì)話粘滯,節(jié)點(diǎn)負(fù)載均衡,故障轉(zhuǎn)移,遇到危急時(shí)承擔(dān)基于Http協(xié)議的CC類型攻擊防御。
  • 后面為可插拔替換的反向代理緩存引擎:根據(jù)生產(chǎn)線上的實(shí)際應(yīng)用場(chǎng)景及緩存對(duì)象的容量來決定使用內(nèi)存型的varnish或者是磁盤型的ats,如果需要定制功能很強(qiáng)(防盜鏈)的反向代理如Nginx+plugins。

這個(gè)組合最大的特點(diǎn)是:

  • 支持外部過濾規(guī)則的讀取,尤其是關(guān)鍵字符串無需轉(zhuǎn)義,可直接追加到文件中。
  • 支持配置文件熱加載生效,都支持reload,服務(wù)平滑生效。
  • 可插拔式的緩存組件靈活應(yīng)對(duì)各種業(yè)務(wù)需求。
  • 部署簡(jiǎn)單,節(jié)點(diǎn)失效/生效切換方便。

LVS缺席:為什么這里沒有提及LVS,因?yàn)長VS是個(gè)重量級(jí)、高效穩(wěn)定的四層轉(zhuǎn)發(fā),不能作七層HTTP協(xié)議的識(shí)別,但完全可以架設(shè)在七層之前。所以,LVS的使用并不會(huì)影響網(wǎng)絡(luò)結(jié)構(gòu),后續(xù)仍然可以想上就上,只是前提要兼顧到LVS的單點(diǎn)故障。

實(shí)際部署

最終我們?cè)谥鞴?jié)點(diǎn)周圍一共部署了8個(gè)CDN節(jié)點(diǎn)(節(jié)點(diǎn)數(shù)量根據(jù)自身公司實(shí)力及實(shí)際生產(chǎn)環(huán)境要求而靈活調(diào)整,此數(shù)字僅作參考),這些節(jié)點(diǎn)又按照地域劃分成了四個(gè)大區(qū):北方(以山東,河北為主)、西南(以四川為主)、華東(以寧波,嘉興為主) 華南(以福建,湖南為主 )兼顧全國各個(gè)省份。

總體成本情況

8個(gè)單線加速節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)100Mx8,8臺(tái)雙子星服務(wù)器,總共投資約30W(后續(xù)費(fèi)用只考慮帶寬支出,約15W/年),我們應(yīng)急撥款為10W,每個(gè)月CDN預(yù)算為2W。

項(xiàng)目進(jìn)度安排:

1~4個(gè)月抓進(jìn)度:特點(diǎn)是快速部點(diǎn)。這里有個(gè)訣竅,前期可以先跟IDC按月或者季度簽約,然后通過監(jiān)控看連續(xù)的節(jié)點(diǎn)質(zhì)量,如果節(jié)點(diǎn)質(zhì)量不佳,更換提供商,這樣損失不會(huì)太大,如果節(jié)點(diǎn)質(zhì)量好,就半年付或者年付,這樣就可以保證質(zhì)量和性價(jià)比最高;

5~8個(gè)月為完善期:根據(jù)預(yù)算,有節(jié)奏的加點(diǎn),加帶寬,保證帶寬的冗余度;

8個(gè)月以后為穩(wěn)定期:根據(jù)實(shí)際情況保證節(jié)點(diǎn)的最大可用性,同時(shí)也提升了整體防御能力。

如何做防護(hù)策略

開啟HAProxy的httplog功能,記錄日志。

HAProxy的配置策略:

global
    nbproc 24
    pidfile /var/run/haproxy.pid
    daemon
    quiet
    user nobody
    group nobody
    chroot /opt/haproxy
    spread-checks 2

defaults
    log 127.0.0.1   local5
    mode    http
    option  forwardfor
    option  httplog
    option  dontlognull
    option  nolinger # reduce FIN_WAIT1
    option  redispatch
    retries 3
    option  http-pretend-keepalive
    option  http-server-close
    option  accept-invalid-http-request
    timeout client 15s
    timeout connect 15s
    timeout server 15s
    timeout http-keep-alive 15s
    timeout http-request 15s

    stats enable
    stats uri /stats
    stats realm 53KF\ Proxy\ Status
    stats refresh 60s
    stats auth admin:adminxxx

listen Web_FB 0.0.0.0:80
    option httpchk GET /alive.php HTTP/1.0

    acl invalid_referer hdr_sub(referer) -i -f /opt/haproxy/etc/bad_ref.conf
    acl invalid_url url_sub -i -f /opt/haproxy/etc/bad_url.conf
    acl invalid_methods method -i -f /opt/haproxy/etc/bad_method.conf
    block if invalid_referer || invalid_url || invalid_methods

    acl dyn_host hdr(host) -i -f /opt/haproxy/etc/notcache_host.conf
    acl static_req path_end -i -f /opt/haproxy/etc/allow_cache_file.conf
    use_backend img_srv if static_req !dyn_host

# acl shaohy
    acl geek hdr_dom(host) -i 17geek.com
    use_backend geek if geek

# backend shaohy
backend geek
    mode http
    balance source
    cookie SESSION_COOKIE insert indirect nocache
    option tcpka
    server geek_1 127.0.0.1:81 cookie geek_1 maxconn 10000 weight 8

backend img_srv
    mode http
    option tcpka
    server img_srv 127.0.0.1:88 maxconn 30000 weight 8

Varnish的配置策略:

backend h_17geek_com_1 {        
    .host="127.0.0.1";      
    .port="81";         
    .connect_timeout=300s;      
    .first_byte_timeout=300s;   
    .between_bytes_timeout=300s;    
 }                  

director geek srv {         
    { .backend=h_17geek_com_1; .weight=3;}
 }                  

sub vcl_recv {
    if (req.http.host~"^(www).?17geek.com$"){
        set req.backend=geek_srv;       
        if (req.request != "GET" && req.request != "HEAD") {
            return (pipe);              
        }                       
        if(req.url ~ "\.(php|jsp)($|\?)") {         
            return (pass);              
        }                       
        else {                      
            return (lookup);            
        }                   
    }                       
 }

對(duì)于CC類型的DDoS攻擊,通過第一篇當(dāng)中介紹的監(jiān)控異常流量的方法依然適用,而且優(yōu)勢(shì)更明顯,因?yàn)椋?

  • 節(jié)點(diǎn)各自承擔(dān)相應(yīng)的日志記錄,分析日志的系統(tǒng)開銷,發(fā)現(xiàn)異常請(qǐng)求后直接在haproxy前端做ACL規(guī)則 過濾,因此,攻擊壓力不會(huì)傳遞給后端服務(wù)器,保證后端安全。
  • 節(jié)點(diǎn)受到的攻擊流量過大,機(jī)房可以拉黑IP或者引流,后端智能DNS會(huì)自動(dòng)把這個(gè)節(jié)點(diǎn)剔除,后續(xù)請(qǐng)求不要通過此節(jié)點(diǎn)。

在本系列的下一篇文章中,我們會(huì)介紹這個(gè)CDN架構(gòu)的一些后續(xù)改進(jìn)工作,包括智能DNS、大規(guī)模日志分析、利用OpenCDN改善后臺(tái)管理等。

作者簡(jiǎn)介

邵海楊(個(gè)人頁面),來自杭州Linux用戶組。網(wǎng)名“海洋之心”,系統(tǒng)架構(gòu)師,業(yè)余撰稿人,致力于開源軟件及前沿科技的研究和探索。

張磊(微博博客),來自杭州谷歌開發(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ù)。 ?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲熟妇av一区二区三区色堂 | 欧美午夜国产在线观看| 人妻中文一区二区三区| 超碰在线播放国产精品| 国产色第一区不卡高清| 午夜福利国产精品不卡| 99热在线播放免费观看| 国产欧美性成人精品午夜| 精品精品国产欧美在线| 日韩成人中文字幕在线一区| 欧美日韩国产亚洲三级理论片| 国产欧美日产久久婷婷| 91欧美日韩一区人妻少妇| 亚洲国产精品一区二区毛片| 色综合久久中文综合网| 小草少妇视频免费看视频| 日本最新不卡免费一区二区| 日韩一区二区三区观看| 免费在线播放一区二区| 日本欧美一区二区三区在线播| 日韩成人中文字幕在线一区| 亚洲熟妇中文字幕五十路| 国产水滴盗摄一区二区| 国产专区亚洲专区久久| 色婷婷视频国产一区视频| 日韩精品视频免费观看| 亚洲国产性感美女视频| 大香蕉网国产在线观看av| 黄片免费播放一区二区| 日韩精品视频香蕉视频| 在线欧美精品二区三区| 91久久精品在这里色伊人| 真实偷拍一区二区免费视频| 人妻内射在线二区一区| 五月激情婷婷丁香六月网| 成人午夜爽爽爽免费视频| 精品精品国产自在久久高清| 精品人妻一区二区三区免费| 久久精品中文字幕人妻中文| 久久精品a毛片看国产成人| 日本成人中文字幕一区|