亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

DDoS介紹與防御

 

工具

https://github.com/poornigga/tfn2k.git
https://github.com/cxueqin/falcon.git  //tfn2k web版本
https://github.com/GinjaChris/pentmenu.git
https://github.com/OffensivePython/Saddam.git
https://github.com/649/Memcrashed-DDoS-Exploit

TCP

  • SYN FLOOD

SYN FLOOD攻擊是在TCP三次握手過程中產(chǎn)生的。攻擊者通過發(fā)送大量偽造的帶有SYN標(biāo)志位的TCP報(bào)文,與目標(biāo)主機(jī)建立了很多虛假的半開連接,在服務(wù)器返回SYN+ACK數(shù)據(jù)包后,攻擊者不對(duì)其做出響應(yīng),也就是不返回ACK數(shù)據(jù)包給服務(wù)器,這樣服務(wù)器就會(huì)一直等待直到超時(shí)。這種攻擊方式會(huì)使目標(biāo)服務(wù)器連接資源耗盡、鏈路堵塞,從而達(dá)到拒絕服務(wù)的目的。

  • ACK FLOOD

ACK FLOOD攻擊是利用TCP三次握手過程。這里可以分為兩種。
第一種:攻擊者偽造大量的SYN+ACK包發(fā)送給目標(biāo)主機(jī),目標(biāo)主機(jī)每收到一個(gè)SYN+ACK數(shù)據(jù)包時(shí),都會(huì)去自己的TCP連接表中查看有沒有與ACK的發(fā)送者建立連接 ,如果有則發(fā)送ACK包完成TCP連接,如果沒有則發(fā)送ACK+RST 斷開連接。但是在查詢過程中會(huì)消耗一定的cpu計(jì)算資源。如果瞬間收到大量的SYN+ACK數(shù)據(jù)包,將會(huì)消耗服務(wù)器的大量cpu資源,導(dǎo)致正常的連接無法建立或增加延遲,甚至造成服務(wù)器癱瘓、死機(jī)。

第二種:利用TCP三次握手的ACK+SYN應(yīng)答,攻擊者向不同的服務(wù)器發(fā)送大量的SYN請(qǐng)求,這些SYN請(qǐng)求數(shù)據(jù)包的源IP均為受害主機(jī)IP,這樣就會(huì)有大量的SYN+ACK應(yīng)答數(shù)據(jù)包發(fā)往受害主機(jī),從而占用目標(biāo)的網(wǎng)絡(luò)帶寬資源,形成拒絕服務(wù)。

  • TCP RST FloodTCP協(xié)議頭部有一個(gè)標(biāo)志位稱為“RST”位,正常的數(shù)據(jù)包中該位為0,一旦該位設(shè)置為1,則接收該數(shù)據(jù)包的主機(jī)將立即斷開TCP會(huì)話。TCP Reset攻擊中,攻擊者可以偽造TCP連接其中的一方給另一方發(fā)送帶有RST位的包來斷開TCP連接,但是要確保這個(gè)數(shù)據(jù)包的源IP地址、源端口號(hào)、目的IP地址、目的端口號(hào)、序列號(hào)等特征符合已有TCP連接的特征。
DDoS介紹與防御

 


DDoS介紹與防御

 

UDP

  • UDP Flood

UDP協(xié)議與TCP協(xié)議不同, UDP是一個(gè)無連接協(xié)議。使用UDP協(xié)議傳輸數(shù)據(jù)之前,客戶端和服務(wù)器之間不建立連接,UDP Flood屬于帶寬類攻擊,黑客們通過僵尸網(wǎng)絡(luò)向目標(biāo)服務(wù)器發(fā)起大量的UDP報(bào)文,可以使用小數(shù)據(jù)包(64字節(jié))進(jìn)行攻擊,也可以使用大數(shù)據(jù)包(大于1500字節(jié),以太網(wǎng)MTU為1500字節(jié))進(jìn)行攻擊。大量小數(shù)據(jù)包會(huì)增大網(wǎng)絡(luò)設(shè)備處理數(shù)據(jù)包的壓力;而對(duì)于大數(shù)據(jù)包,網(wǎng)絡(luò)設(shè)備需要進(jìn)行分片、重組,迅速造成鏈路擁塞。

DDoS介紹與防御

 


DDoS介紹與防御

 

ICMP

  • ICMP Echo Flood
    ICMP協(xié)議位于IP層,主要通過含有ICMP功能的主機(jī)與路由器之間發(fā)送ICMP數(shù)據(jù)包,來達(dá)到實(shí)現(xiàn)信息查詢和錯(cuò)誤通知的功能。因此攻擊者利用icmp獲取主機(jī)信息,時(shí)間、路由信息等。所以為攻擊者創(chuàng)造了極大得便利條件。攻擊者通過足夠快的數(shù)據(jù)包速度和足夠的帶寬,對(duì)目標(biāo)發(fā)出攻擊請(qǐng)求,造成網(wǎng)絡(luò)擁堵。
DDoS介紹與防御

 


DDoS介紹與防御

 

  • ICMP Blacknurse

BlackNurse攻擊基于Type3(Destination Unreachable) Code3(Port Unreachable)——端口不可達(dá),當(dāng)目標(biāo)端口不可達(dá),所發(fā)出的ICMP包都會(huì)返回源。攻擊者可以通過發(fā)這種特定的ICMP包令大多數(shù)服務(wù)器防火墻的CPU過載。一旦設(shè)備拋棄的包到了臨界值15Mbps至18Mbps(每秒4萬到5萬個(gè)包),設(shè)備就會(huì)直接停止響應(yīng)。

  • ICMP Smurf攻擊

攻擊者向網(wǎng)關(guān)發(fā)送ICMP請(qǐng)求包,并將該ICMP請(qǐng)求報(bào)文的源地址偽造成受害主機(jī)IP地址,目的地址為廣播地址。路由器在接受到該數(shù)據(jù)包,發(fā)現(xiàn)目的地址是廣播地址,就會(huì)將該數(shù)據(jù)包廣播出去,局域網(wǎng)內(nèi)所有的存活主機(jī)都會(huì)受到一個(gè)ICMP請(qǐng)求包,源地址是受害主機(jī)IP。接下來受害主機(jī)就會(huì)收到該網(wǎng)絡(luò)內(nèi)所有主機(jī)發(fā)來的ICMP應(yīng)答報(bào)文,通過大量返回的ICMP應(yīng)答報(bào)文來淹沒受害主機(jī),最終導(dǎo)致網(wǎng)絡(luò)阻塞,受害主機(jī)崩潰。

應(yīng)用層反射

  • DNS 反射 (放大倍數(shù)28 to 54)
  • NTP 反射 (放大倍數(shù)556.9)
  • Memcached 反射(放大倍數(shù)10,000 to 51,000)
  • 等等(LDAP反射/TFTP反射/SSDP反射/SNMP反射)

防御策略

防御:
SYNCheck:使用防護(hù)設(shè)備,3次握手變成了6次握手,由防護(hù)設(shè)備檢測(cè)SYN請(qǐng)求是否合法,通過后再由防護(hù)設(shè)備將報(bào)文轉(zhuǎn)發(fā)給服務(wù)器,后續(xù)報(bào)文仍由防護(hù)設(shè)備代理。
Micro blocks:管理員可以在內(nèi)存中為每個(gè)SYN請(qǐng)求創(chuàng)建一個(gè)小索引(小于16字節(jié)),而不必把整個(gè)連接對(duì)象存入內(nèi)存。
RST cookies:在客戶端發(fā)起第一個(gè)SYN請(qǐng)求后,服務(wù)器故意回應(yīng)一個(gè)錯(cuò)誤的SYN+ACK報(bào)文。如果合法用戶收到這個(gè)報(bào)文,就會(huì)給服務(wù)器響應(yīng)RST報(bào)文。當(dāng)服務(wù)器收到這個(gè)報(bào)文時(shí),就將這個(gè)主機(jī)的IP記錄進(jìn)合法IP列表,下次該主機(jī)發(fā)起SYN請(qǐng)求時(shí),就可以直接通過了。
STACK tweaking:管理員可以調(diào)整TCP堆棧以減緩SYN泛洪攻擊的影響。這包括減小超時(shí)時(shí)間,等到堆棧存釋內(nèi)放時(shí)再分配連接,否則就隨機(jī)性地刪除傳入的連接。

最初防火墻對(duì)UDP Flood的防御方式就是限流,通過限流將鏈路中的UDP報(bào)文控制在合理的帶寬范圍之內(nèi)。
防火墻上針對(duì)UDP Flood的限流有三種:

基于目的IP地址的限流:即以某個(gè)IP地址作為統(tǒng)計(jì)對(duì)象,對(duì)到達(dá)這個(gè)IP地址的UDP流量進(jìn)行統(tǒng)計(jì)并限流,超過部分丟棄。
基于目的安全區(qū)域的限流:即以某個(gè)安全區(qū)域作為統(tǒng)計(jì)對(duì)象,對(duì)到達(dá)這個(gè)安全區(qū)域的UDP流量進(jìn)行統(tǒng)計(jì)并限流,超過部分丟棄。
基于會(huì)話的限流:即對(duì)每條UDP會(huì)話上的報(bào)文速率進(jìn)行統(tǒng)計(jì),如果會(huì)話上的UDP報(bào)文速率達(dá)到了告警閾值,這條會(huì)話就會(huì)被鎖定,后續(xù)命中這條會(huì)話的UDP報(bào)文都被丟棄。當(dāng)這條會(huì)話連續(xù)3秒或者3秒以上沒有流量時(shí),防火墻會(huì)解鎖此會(huì)話,后續(xù)命中此會(huì)話的報(bào)文可以繼續(xù)通過。

針對(duì)UDP Flood的指紋學(xué)習(xí)功能。

從下面的抓包中可以看出,到達(dá)相同目的IP地址的兩個(gè)UDP報(bào)文的載荷是完全一樣的,如果防火墻收到大量的類似這樣的UDP報(bào)文,那么就有可能是發(fā)生了UDP Flood攻擊。
不難發(fā)現(xiàn),UDP Flood攻擊報(bào)文具有一定的特點(diǎn),這些攻擊報(bào)文通常都擁有相同的特征字段,比如都包含某一個(gè)字符串,或整個(gè)報(bào)文內(nèi)容一致。這些字段來自于DDoS工具自帶的默認(rèn)字符串,所以防火墻是通過收集這些字符串來檢測(cè)UDP Flood。這種防御算法在現(xiàn)網(wǎng)使用很多,主要因?yàn)楹诳蜑榱思哟蠊纛l率,快速、長時(shí)間擠占攻擊目標(biāo)所在網(wǎng)絡(luò)帶寬,在使用攻擊工具實(shí)現(xiàn)時(shí)直接在內(nèi)存存放一段內(nèi)容,然后高頻發(fā)送到攻擊目標(biāo),所以攻擊報(bào)文具有很高的相似性。而正常業(yè)務(wù)的UDP報(bào)文一般每個(gè)報(bào)文負(fù)載內(nèi)容都是不一樣的,這樣可以減少誤判。

指紋學(xué)習(xí)是通過分析客戶端向服務(wù)器發(fā)送的UDP報(bào)文載荷是否有大量的一致內(nèi)容,來判定這個(gè)UDP報(bào)文是否異常。防火墻對(duì)到達(dá)指定目的地的UDP報(bào)文進(jìn)行統(tǒng)計(jì),當(dāng)UDP報(bào)文達(dá)到告警閾值時(shí),開始對(duì)UDP報(bào)文的指紋進(jìn)行學(xué)習(xí)。如果相同的特征頻繁出現(xiàn),就會(huì)被學(xué)習(xí)成指紋,后續(xù)命中指紋的報(bào)文判定這是攻擊報(bào)文,作為攻擊特征進(jìn)行過濾。

防火墻防御UDP Flood攻擊主要有兩種方式:限流和指紋學(xué)習(xí),兩種方式各有利弊。限流方式屬于暴力型,可以很快將UDP流量限制在一個(gè)合理的范圍內(nèi),但是不分青紅皂白,超過就丟,可能會(huì)丟棄一些正常報(bào)文;而指紋學(xué)習(xí)屬于理智型,不會(huì)隨意丟棄報(bào)文,但是發(fā)生攻擊后需要有個(gè)指紋學(xué)習(xí)的過程。目前,指紋學(xué)習(xí)功能是針對(duì)UDP Flood攻擊的主流防御手段,在華為防火墻產(chǎn)品中廣泛應(yīng)用。

細(xì)化的流程大概就是:

第一步進(jìn)行報(bào)文合法性檢查,過濾一些畸形報(bào)文攻擊;
第二步進(jìn)行特征過濾,即基于報(bào)文特征匹配進(jìn)行過濾,主要過濾一些UDP Flood和UDP反射放大攻擊;
第三步進(jìn)行虛假源認(rèn)證,可過濾一些虛假源發(fā)起的TCP SYN Flood;
第四步進(jìn)行應(yīng)用層源認(rèn)證,過濾各類型的應(yīng)用層攻擊,例如DNS Query Flood, HTTP Get Flood.
HTTP Post Flood. HTTPS Flood等;
第五步進(jìn)行會(huì)話分析,即進(jìn)行會(huì)話檢查來防范一些會(huì)話類攻擊,例如TCP ACK Flood, FIN/RST Flood, TCP連接耗盡攻擊、TCP重傳攻擊、DNS緩存投毒、SSL-DoS/DDoS, HTTP slow header/post
攻擊等;
第六步進(jìn)行行為分析,根據(jù)用戶訪問流量的突發(fā)性和攻擊流量的頻率均勻
且資源均勻的不同,可識(shí)別出CC攻擊、慢速SYN Flood和報(bào)文負(fù)載有特征的UDP
Flood;
第七步進(jìn)行智能限速,像ICMP沒有對(duì)應(yīng)業(yè)務(wù)系統(tǒng),可以直接限速。完成前六步的過濾后流量依然超過鏈路負(fù)載閾值
時(shí),利用基于各種協(xié)議的精細(xì)化限速使得流量大小穩(wěn)定在安全范圍內(nèi)。

使用DPDK進(jìn)行DDOS檢測(cè)

DPDK全稱Intel Data Plane Development Kit,是intel提供的數(shù)據(jù)平面開發(fā)工具集,為Intel architecture(IA)處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供庫函數(shù)和驅(qū)動(dòng)的支持。通俗地說,就是一個(gè)用來進(jìn)行包數(shù)據(jù)處理加速的軟件庫。

DPDK不同于linux系統(tǒng)以通用性設(shè)計(jì)為目的,而是專注于網(wǎng)絡(luò)應(yīng)用中數(shù)據(jù)包的高性能處理。具體體現(xiàn)在DPDK應(yīng)用程序是運(yùn)行在用戶空間上利用自身提供的數(shù)據(jù)平面庫來收發(fā)數(shù)據(jù)包,繞過了Linux內(nèi)核協(xié)議棧對(duì)數(shù)據(jù)包處理過程。它不是一個(gè)用戶可以直接建立應(yīng)用程序的完整產(chǎn)品,不包含需要與控制層(包括內(nèi)核和協(xié)議堆棧)進(jìn)行交互的工具。

DDoS介紹與防御

 

傳統(tǒng)Linux內(nèi)核讀取數(shù)據(jù)包使用中斷模式驅(qū)動(dòng)首先當(dāng)數(shù)據(jù)包到達(dá)網(wǎng)卡后,網(wǎng)卡產(chǎn)生硬中斷,將網(wǎng)卡加入到輪詢輸入數(shù)據(jù)包的網(wǎng)卡隊(duì)列中,然后關(guān)閉硬中斷并開啟軟中斷,此時(shí)硬中斷處理結(jié)束,軟中斷被激活后輪詢?cè)O(shè)備,讀取指定量的數(shù)據(jù)包后清空設(shè)備隊(duì)列,至此結(jié)束軟中斷。對(duì)于在大流量下的服務(wù)器來說會(huì)在硬中斷和軟中斷上浪費(fèi)大量的時(shí)間,所以DPDK采用輪詢模式驅(qū)動(dòng),收到數(shù)據(jù)包后直接通過DMA方式傳送到預(yù)分配內(nèi)存并直接處理,避免了中斷下文切換開銷,對(duì)于高并發(fā)大流量的系統(tǒng)來說會(huì)極大的提高數(shù)據(jù)包處理效率和性能。另外DPDK的輪詢模式驅(qū)動(dòng)還用到了用戶空間設(shè)備驅(qū)動(dòng)程序(Userspace I/O, uio),將絕大部分程序放到用戶空間實(shí)現(xiàn),減少了內(nèi)核空間的程序,使得uio的開發(fā)與維護(hù)都很方便,避免了過度依賴內(nèi)核版本導(dǎo)致開發(fā)調(diào)試復(fù)雜。DPDK在使用uio的同時(shí)還利用mmap技術(shù)將網(wǎng)卡緩存映射到用戶空間,使得報(bào)文不需要經(jīng)過內(nèi)核空間處理,減少了報(bào)文從內(nèi)核空間到用戶空間的拷貝。

傳統(tǒng)Linux內(nèi)核的多核系統(tǒng)中運(yùn)行程序會(huì)使用負(fù)載均衡機(jī)制,即某個(gè)進(jìn)程在哪個(gè)核中運(yùn)行是不確定的,內(nèi)核根據(jù)各CPU負(fù)載情況來統(tǒng)一調(diào)度,這樣會(huì)造成一個(gè)進(jìn)程在運(yùn)行過程中會(huì)在各CPU之間頻繁切換,導(dǎo)致資源開銷增大。此外切換CPU時(shí)從內(nèi)存中預(yù)先獲取的CPU Cache也會(huì)失效,降低了CPU Cache的命中概率。DPDK利用線程的CPU親和綁定機(jī)制使得特定任務(wù)能夠被指定在某個(gè)特定的核上執(zhí)行,這樣可避免線程在不同核之間頻繁轉(zhuǎn)換而導(dǎo)致的因cache miss和cachewrite back造成的性能損失。

檢測(cè)是否為 slow header 攻擊的demo,通過是否包含連續(xù)的兩個(gè) rn 來進(jìn)行判斷

int process_http_pkt(
    struct FeatureExtractCoreConfig* config, uint32_t src_ip, uint16_t http_payload_len,uint8_t* http_payload){
    uint8_t atk_type = -1;
    char* find = strstr(http_payload, "rnrn");
    if(find == NULL){
        atk_type = ATK_TYPE_HTTP_POST;
    }else{
        switch (http_payload[0]){
        case 'G':
            atk_type = ATK_TYPE_HTTP_GET;
            break;
        case 'P':
            atk_type = ATK_TYPE_HTTP_POST;
            break;
        default:
            break;
        }
    }
    if(atk_type != -1){
        update_feature(config->featureTableList[atk_type], src_ip, http_payload_len);
    }
    return 0;
}

開源的基于DPDK的 抗D工具:


https://github.com/AltraMayor/gatekeeper

使用XDP進(jìn)行DDOS攔截

在計(jì)算機(jī)網(wǎng)絡(luò)中,Hook鉤子在操作系統(tǒng)中用于在調(diào)用前或執(zhí)行過程中攔截網(wǎng)絡(luò)數(shù)據(jù)包。Linux內(nèi)核中暴露了多個(gè)鉤子,BPF程序可以連接到這些鉤子上,實(shí)現(xiàn)數(shù)據(jù)收集和自定義事件處理。XDP全稱為eXpress Data Path,是Linux內(nèi)核網(wǎng)絡(luò)棧的最底層。它只存在于RX路徑上,允許在網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)內(nèi)部網(wǎng)絡(luò)堆棧中數(shù)據(jù)來源最早的地方進(jìn)行數(shù)據(jù)包處理,在特定模式下可以在操作系統(tǒng)分配內(nèi)存(skb)之前就已經(jīng)完成處理。XDP暴露了一個(gè)可以加載BPF程序的網(wǎng)絡(luò)鉤子。在這個(gè)鉤子中,程序能夠?qū)魅氲臄?shù)據(jù)包進(jìn)行任意修改和快速?zèng)Q策,避免了內(nèi)核內(nèi)部處理帶來的額外開銷。基于XDP實(shí)現(xiàn)高效的防DDoS攻擊,其本質(zhì)上就是實(shí)現(xiàn)盡可能早地實(shí)現(xiàn)「丟包」,而不去消耗系統(tǒng)資源創(chuàng)建完整的網(wǎng)絡(luò)棧鏈路,即「early drop」。

DDoS介紹與防御

 

XDP暴露的鉤子具有特定的輸入上下文,它是單一輸入?yún)?shù)。它的類型為 struct xdp_md,在內(nèi)核頭文件bpf.h 中定義,具體字段如下所示:


 */
struct xdp_md {
  __u32 data;
  __u32 data_end;
  __u32 data_meta;
  /* Below access go through struct xdp_rxq_info */
  __u32 ingress_ifindex; /* rxq->dev->ifindex */
  __u32 rx_queue_index;  /* rxq->queue_index  */
};

程序執(zhí)行時(shí),data和data_end字段分別是數(shù)據(jù)包開始和結(jié)束的指針,它們是用來獲取和解析傳來的數(shù)據(jù),第三個(gè)值是data_meta指針,初始階段它是一個(gè)空閑的內(nèi)存地址,供XDP程序與其他層交換數(shù)據(jù)包元數(shù)據(jù)時(shí)使用。最后兩個(gè)字段分別是接收數(shù)據(jù)包的接口和對(duì)應(yīng)的RX隊(duì)列的索引。當(dāng)訪問這兩個(gè)值時(shí),BPF代碼會(huì)在內(nèi)核內(nèi)部重寫,以訪問實(shí)際持有這些值的內(nèi)核結(jié)構(gòu)struct xdp_rxq_info。

在處理完一個(gè)數(shù)據(jù)包后,XDP程序會(huì)返回一個(gè)動(dòng)作(Action)作為輸出,它代表了程序退出后對(duì)數(shù)據(jù)包應(yīng)該做什么樣的最終裁決,也是在內(nèi)核頭文件bpf.h 定義了以下5種動(dòng)作類型:


enum xdp_action {
  XDP_ABORTED = 0, // Drop packet while raising an exception
  XDP_DROP, // Drop packet silently
  XDP_PASS, // Allow further processing by the kernel stack
  XDP_TX, // Transmit from the interface it came from
  XDP_REDIRECT, // Transmit packet from another interface
};

可以看出這個(gè)動(dòng)作的本質(zhì)是一個(gè)int值。前面4個(gè)動(dòng)作是不需要參數(shù)的,最后一個(gè)動(dòng)作需要額外指定一個(gè)NIC網(wǎng)絡(luò)設(shè)備名稱,作為轉(zhuǎn)發(fā)這個(gè)數(shù)據(jù)包的目的地。

啟用XDP后,網(wǎng)絡(luò)包傳輸路徑是這樣的:

DDoS介紹與防御

 

可以看到多了3個(gè)紅色方框圈起來的新鏈路,我們來一一介紹:
offload模式,XDP程序直接hook到可編程網(wǎng)卡硬件設(shè)備上,與其他兩種模式相比,它的處理性能最強(qiáng);由于處于數(shù)據(jù)鏈路的最前端,過濾效率也是最高的。如果需要使用這種模式,需要在加載程序時(shí)明確聲明。目前支持這種模式的網(wǎng)卡設(shè)備不多,有一家叫netronome。
native模式,XDP程序hook到網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)上,它是XDP最原始的模式,因?yàn)檫€是先于操作系統(tǒng)進(jìn)行數(shù)據(jù)處理,它的執(zhí)行性能還是很高的,當(dāng)然你的網(wǎng)絡(luò)驅(qū)動(dòng)需要支持,目前已知的有i40e, nfp, mlx系列和ixgbe系列。
generic模式,這是操作系統(tǒng)內(nèi)核提供的通用 XDP兼容模式,它可以在沒有硬件或驅(qū)動(dòng)程序支持的主機(jī)上執(zhí)行XDP程序。在這種模式下,XDP的執(zhí)行是由操作系統(tǒng)本身來完成的,以模擬native模式執(zhí)行。好處是,只要內(nèi)核夠高,人人都能玩XDP;缺點(diǎn)是由于是仿真執(zhí)行,需要分配額外的套接字緩沖區(qū)(SKB),導(dǎo)致處理性能下降,跟native模式在10倍左右的差距。
當(dāng)前主流內(nèi)核版本的Linux系統(tǒng)在加載XDP BPF程序時(shí),會(huì)自動(dòng)在native和generic這兩種模式選擇,完成加載后,可以使用ip命令行工具來查看選擇的模式。


struct bpf_map_def SEC("maps") c_map = {
    .type = BPF_MAP_TYP_PERCPU_ARRAY,
    .key_size = sizeof(int),
    .value_size = sizeof(long),
    .max_entries = 256,
};

void sample_packet(void *data, void *data_end) {
    // mark the packet to be sampled
}

static inline void update_rule_counters(int rule_id) {
    long *value =
    bpf_map_lookup_elem(&c_map, &rule_id);
    if (value)
    *value += 1;
}
static inline int rule_1(void *data, void *data_end) {
    // if any of the rule conditions is not met
    // return XDP_PASS;
    update_rule_counters(1);
    sample_packet(data, data_end);
    return XDP_DROP;
}
// static inline int rule_2(..)
SEC("xdp1")
int xdp_prog(struct xdp_md *ctx) {
    void *data = (void *)(long)ctx->data;
    void *data_end = (void *)(long)ctx->data_end;
    int ret;
    ret = rule_1(data, data_end);
    if (ret != XDP_PASS)
    return ret;
    ret = rule_2(data, data_end);
    if (ret != XDP_PASS)
    return ret;
    //..
    return XDP_PASS;
}

XDP的程序在這里的主要作用是完成early drop ,而不是識(shí)別,相當(dāng)于執(zhí)行者,通過我們的分析工具下發(fā)攔截指令,并實(shí)施攔截。大體的玩法就是:

1, 自研的模塊負(fù)責(zé)識(shí)別DDOS攻擊包
2, 自研的規(guī)則下發(fā)攔截規(guī)則,完成告警并記錄
3, XDP負(fù)責(zé)阻止黑名單里的IP繼續(xù)訪問

DDOS大體介紹了一遍,了解即可,上面都是臟活累活即可,交給專門做防DDoS的廠商去做,一般都直接使用CDN和高防即可,比如,知道創(chuàng)宇的加速樂,騰訊云的大禹等等。

分享到:
標(biāo)簽:DDoS
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定