在支持PF_RING的應(yīng)用程序中開(kāi)發(fā)硬件過(guò)濾

介紹

PF_RING過(guò)濾器被設(shè)計(jì)成高效和多功能的。 基于PF_RING的應(yīng)用程序可以使用它們來(lái)減少需要處理的數(shù)據(jù)包的數(shù)量,并將傳入的數(shù)據(jù)包傳遞給內(nèi)核插件以供進(jìn)一步處理。
多年前,硬件數(shù)據(jù)包過(guò)濾僅限于昂貴的基于FPGA的NIC,而現(xiàn)在也可以在諸如Silicom 1/10 Gbit Director卡和基于Intel 82599的10 Gbit網(wǎng)絡(luò)適配器等商用適配器上使用。

在PF_RING中過(guò)濾5.2

盡管過(guò)去的PF_RING版本支持有限的硬件過(guò)濾,但在PF_RING 5.2中,我們已經(jīng)完全重新設(shè)計(jì)了數(shù)據(jù)包過(guò)濾,因此應(yīng)用程序可以使用單個(gè)且一致的數(shù)據(jù)包過(guò)濾API,從而使PF_RING能夠基于正在使用的硬件NIC做到這一點(diǎn)。 這意味著您需要編寫(xiě)一次應(yīng)用程序,而不管正在使用哪種類(lèi)型的NIC,并讓PF_RING設(shè)置本機(jī)過(guò)濾器類(lèi)型。 從下圖中可以看到,我們?cè)赑F_RING中支持的組合很多,使用單個(gè)API是避免浪費(fèi)時(shí)間來(lái)支持所有這些組合的先決條件。


PF-RING過(guò)濾

設(shè)置過(guò)濾器時(shí),可以將其指定為NIC本地過(guò)濾器(例如,silicom_redirector_hw_rule)或PF_RING通用過(guò)濾器(例如filtering_rule / hash_filtering_rule)。在前一種情況下,您可以完全控制過(guò)濾器,代價(jià)是無(wú)法通過(guò)各種適配器類(lèi)型無(wú)縫地運(yùn)行代碼。在后一種情況下,您編碼一次,并根據(jù)您使用的NIC類(lèi)型讓PF_RING將過(guò)濾器格式轉(zhuǎn)換為本地硬件過(guò)濾器。

盡管所有硬件濾波器類(lèi)型在硬件中都是非常有效的,但并不完全相同。截至今天,我們支持:

  • 基于82599的網(wǎng)卡(有關(guān)更多詳細(xì)信息,請(qǐng)參閱英特爾82599數(shù)據(jù)表)
  • 多達(dá)32k的FlowDirector過(guò)濾器(PF_RING術(shù)語(yǔ)中的IPv4 / v6 hash_filtering_rule)
  • 多達(dá)128個(gè)5元組過(guò)濾器(PF_RING術(shù)語(yǔ)中的IPv4 / v6 filtering_rule)
  • Silicom總監(jiān)
    每端口高達(dá)1'000個(gè)過(guò)濾器(僅限IPv4的柔性過(guò)濾器)
    在Silicom Director的情況下,也可以在端口之間執(zhí)行硬件操作(例如,跨端口匹配給定過(guò)濾器的鏡像包)。在非導(dǎo)向器網(wǎng)卡上,您也可以在CPU中執(zhí)行此操作。

使用硬件過(guò)濾器

為了演示PF_RING過(guò)濾器的強(qiáng)大功能和實(shí)用性,我們?cè)鰪?qiáng)了pfcount演示應(yīng)用程序,以便為丟棄傳入數(shù)據(jù)包添加過(guò)濾器(-u命令行選項(xiàng))。 pfcount_82599演示應(yīng)用程序顯示如何設(shè)置本機(jī)過(guò)濾器。

Snort中的硬件過(guò)濾

對(duì)于所有的snort用戶(hù),我們已經(jīng)增強(qiáng)了我們的PF_RING DAQ模塊,所以只要檢測(cè)到錯(cuò)誤的數(shù)據(jù)包,snort就可以透明地設(shè)置“丟棄過(guò)濾器”。 這是解決DDoS攻擊和丟棄硬件令人討厭的數(shù)據(jù)包,浪費(fèi)太多CPU周期的一個(gè)奇妙的方法。由于snort PF_RING DAQ可以同時(shí)在IDS(入侵檢測(cè)系統(tǒng))和IPS(入侵防御系統(tǒng))模式下工作,所以硬件過(guò)濾 IPS模式是一件非常好的事情。

如果您沒(méi)有硬件過(guò)濾網(wǎng)卡...

使用硬件過(guò)濾時(shí),軟件PF_RING過(guò)濾器仍然處于啟用狀態(tài)。 這是因?yàn)樗⒉豢偸强梢栽谟布羞^(guò)濾所有的流量。 因此,您可以像過(guò)去一樣使用PF_RING過(guò)濾,但必須注意,切換到硬件過(guò)濾網(wǎng)卡允許您的CPU將過(guò)濾器卸載到NIC,從而保留用于數(shù)據(jù)包處理的寶貴CPU周期。

關(guān)于82599過(guò)濾器的說(shuō)明

為了啟用硬件過(guò)濾器,您需要加載具有特定參數(shù)的ixgbe模塊。
示例:insmod ixgbe.ko RSS = 0,0,0,0 FdirMode = 2,2,2,2 FdirPballoc = 3,3,3,3
過(guò)濾器不僅用于傳遞/丟棄操作,還用于將數(shù)據(jù)包轉(zhuǎn)向特定的核心/ RX隊(duì)列。 例如,你可以說(shuō):端口80上的所有傳入TCP數(shù)據(jù)包都必須被轉(zhuǎn)移到RX隊(duì)列3.所以你可以綁定你的HTTP分析應(yīng)用程序來(lái)排隊(duì)ethX @ 3并且忘記所有其他隊(duì)列。
您可以同時(shí)設(shè)置5元組和FlowDirector過(guò)濾器。 但是在芯片中有一些限制,所以請(qǐng)參考82599數(shù)據(jù)手冊(cè)來(lái)獲得關(guān)于這個(gè)主題的更多信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容