PF_RING FT (Flow Table)
大多數網(wǎng)絡(luò )監控和安全應用都基于流處理,包括數據包捕獲、解碼和分類(lèi)。PF_RING?是一個(gè)靈活的框架,可用于加速數據包捕獲,利用PF_RING?ZC驅動(dòng)程序或專(zhuān)用適配器,并提取數據包元數據。這讓?xiě)贸绦驅?zhuān)注于數據包處理,而不是處理數據包捕獲和數據包解析,同時(shí)以最佳性能運行。
PF_RING?FT更進(jìn)一步,它在數據包分類(lèi)活動(dòng)中協(xié)助任何流處理應用程序。PF_RING?FT實(shí)現了可用于跟蹤流的流表,并提供了許多掛鉤,以便能夠自定義和擴展它,以便在其上構建任何類(lèi)型的應用程序,包括探針、IDS、IPS、L7防火墻。
盡管PF_RING?隨PF_RING?一起分發(fā),但該庫可與任何第三方數據包捕獲框架(包括Libpcap和DPDK)一起使用,因為它的數據輸入API與捕獲無(wú)關(guān)。
清晰簡(jiǎn)單的API
在PF_RING?FT之上設計和實(shí)現流處理應用程序非常簡(jiǎn)單,因為它提供了清晰的API,可用于在幾行代碼中完成復雜的工作。以下代碼段顯示了如何使用PF_RING?FT輕松捕獲流量并導出流信息。有關(guān)完整的代碼示例,請查看PF_RING?中可用的演示應用程序。
事件hooks
在PF_RING?FT之上設計的應用程序流是事件驅動(dòng)的。通過(guò)幾個(gè)hooks,可以注冊諸如“新流”,“流過(guò)期”,“數據包分類(lèi)”之類(lèi)的事件,并訪(fǎng)問(wèn)流信息,以便基于流狀態(tài)計算動(dòng)作??梢允褂脩贸绦蚨x的自定義元數據擴展流信息。
nDPI集成
PF_RING?FT與nDPI本地集成在一起,可直接提供L7協(xié)議信息。應用程序本身不需要直接處理nDPI庫,因為所有事情都在幕后發(fā)生,獲取L7協(xié)議就像通過(guò)API啟用L7檢測并從流元數據中讀取L7協(xié)議一樣容易。除了協(xié)議檢測之外,PF_RING?FT還利用nDPI類(lèi)別和Intel Hyperscan對模式匹配的支持對流量進(jìn)行了分類(lèi)。
L7過(guò)濾和分流
PF_RING?FT具有L7過(guò)濾引擎,可以供內聯(lián)應用程序使用,以根據應用程序協(xié)議過(guò)濾流。除了內置的過(guò)濾引擎之外,應用程序還可以根據自定義策略標記流以對其進(jìn)行過(guò)濾或分流。
IDS加速
PF_RING?FT L7過(guò)濾引擎還可用于加速CPU綁定的應用程序,例如IDS / IPS(包括Suricata,Bro和Snort)以及基于應用程序協(xié)議的分流。丟棄大象流已成為減少I(mǎi)DS / IPS需要檢查的通信量(通常是多媒體通信量)的一種常見(jiàn)而有效的做法,從而顯著(zhù)減少數據包丟失并改善系統性能。
Suricata具有使用eBPF分流大象流的本地支持(旁路),這意味著(zhù)一旦檢測到大象流,該應用程序就會(huì )在內核空間中注入過(guò)濾規則(5元組)。這種方法有局限性:它要求Suricata中的規則集能夠檢測所有多媒體協(xié)議,數據包解析不靈活,因為eBPF程序無(wú)法循環(huán)(它不適用于封裝,包括vlan和QinQ),不能保持流狀態(tài)(處理流過(guò)期非常復雜)。
利用PF_RING?FT,基于PF_RING或基于Libpcap的應用程序可以利用L7分流,而無(wú)需更改任何代碼行。由于PF_RING?FT基于nDPI進(jìn)行協(xié)議檢測,因此過(guò)濾多媒體流量信息只在配置文件中列出協(xié)議名稱(chēng)。
性能
PF_RING?FT經(jīng)過(guò)高度優(yōu)化,能夠在低端Xeon E3上使用單個(gè)CPU內核處理10 Gbit的線(xiàn)速,并在多核系統上擴展至100 Gbit。您可以使用github上的演示應用程序自己進(jìn)行測試。