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