suricata使用捕獲硬件

1.?Endace? DAG

Suricata附帶原生Endace DAG卡支持。這意味著Suricata可以直接使用libdag接口,代替libpcap(它也應(yīng)該工作)

步驟如下:

(1)配置DAG支持

./configure--enable-dag

顯示

Suricata Configuration:

? AF_PACKET support:? ? ? ? ? ? ? ? ? ? ? no

? PF_RING support:? ? ? ? ? ? ? ? ? ? ? ? no

? NFQueue support:? ? ? ? ? ? ? ? ? ? ? ? no

? IPFW support:? ? ? ? ? ? ? ? ? ? ? ? ? ? no

? DAG enabled:? ? ? ? ? ? ? ? ? ? ? ? ? ? yes

? Napatech enabled:? ? ? ? ? ? ? ? ? ? ? ? no

(2)啟動

suricata -c suricata.yaml --dag 0:0

顯示如下:

[5570]10/7/2012--13:52:30-(source-erf-dag.c:262)<Info>(ReceiveErfDagThreadInit)--Attachedandstartedstream:0onDAG:/dev/dag0

[5570]10/7/2012--13:52:30-(source-erf-dag.c:288)<Info>(ReceiveErfDagThreadInit)--Startingprocessingpacketsfromstream:0onDAG:/dev/dag0

2.?Napatech Suricata 安裝指南

2.1?內(nèi)容

(1)介紹

(2)包安裝

(3)基本配置

(4)高級多線程配置

2.2 介紹

Napatech數(shù)據(jù)包捕獲加速器卡可以使用以下基于硬件的功能大大提高Suricata的性能

(1)板載突發(fā)緩沖(最高12GB)

(2)零拷貝內(nèi)核旁路DMA

(3)非阻塞PCIe性能

(4)端口合并

(5)負(fù)載分配到128個主機(jī)緩沖區(qū)

(6)精確的時間戳

(7)準(zhǔn)確的時間同步

Napatech軟件套件(驅(qū)動程序包)有兩種類型,NAC和OEM。NAC軟件包分發(fā)deb和rpm軟件包以簡化安裝。OEM軟件包使用專有的shell腳本來處理安裝過程。在任何一種情況下,都需要gcc,make和內(nèi)核頭文件來編譯內(nèi)核模塊并安裝軟件。

2.3 包安裝

(2.3.1)Napatech NAC 包

Red Hat:

yum install kernel-devel-$(uname -r) gcc make ncurses-libs

yum install nac-pcap-<release>.x86_64.rpm

某些發(fā)行版將要求您對NAC Software Suite包文件使用-nogpgcheck選項:

yum --nogpgcheck install nac-pcap-<release>.x86_64.rpm

Debian :

apt-get install linux-headers-$(uname .r) gcc make libncurses5

dpkg .i nac-pcap_<release>_amd64.deb

要完成所有發(fā)行版的安裝,請停止ntservice

/opt/napatech3/bin/ntstop.sh -m

刪除這些現(xiàn)有的安裝文件:

cd /opt/napatech3/config

rm ntservice.ini setup.ini

重啟ntservice(將自動生成一個新的ntservice.ini配置文件):

/opt/napatech3/bin/ntstart.sh -m

(2.3.2)Napatech OEM包

請注意,系統(tǒng)將提示您安裝Napatech libpcap庫。如果您想使用Napatech在WIreshark,tcpdump或其他基于pcap的應(yīng)用程序中捕獲數(shù)據(jù)包,請回答“是”。Suricata不需要Libpcap,因為包含本機(jī)Napatech API支持。

Red Hat

yum install kernel-devel-$(uname -r) gcc make

./package_install_3gd.sh

Debian?

apt-get install linux-headers-$(uname .r) gcc make

./package_install_3gd.sh

要完成所有發(fā)行版ntservice的安裝

/opt/napatech3/bin/ntstart.sh -m

2.4 suricata安裝

下載并解Suricata壓縮包后,您需要運行configure以啟用Napatech支持并準(zhǔn)備編譯

./configure --enable-napatech --with-napatech-includes=/opt/napatech3/include --with-napatech-libraries=/opt/napatech3/lib

現(xiàn)在編輯suricata.yaml文件以配置要使用的最大流數(shù)。如果您計劃在Napatech加速器中使用負(fù)載分配(類似RSS)功能,則該列表應(yīng)包含與ntservice.ini中定義的主機(jī)緩沖區(qū)相同數(shù)量的流:

圖1

注意:僅當(dāng)與另一個應(yīng)用程序共享流時,hba才有用。當(dāng)啟用hba時,當(dāng)主機(jī)緩沖區(qū)利用率達(dá)到hba值指示的高水位標(biāo)記時,數(shù)據(jù)包將被丟棄(即未傳遞給suricata)。這確保了,如果suricata在其數(shù)據(jù)包處理中落后,其他應(yīng)用程序仍將接收所有數(shù)據(jù)包。如果在沒有其他應(yīng)用程序共享流的情況下啟用此功能,則會導(dǎo)致次優(yōu)的數(shù)據(jù)包緩沖。

2.5 基礎(chǔ)配置

對于基本安裝,我們將設(shè)置Napatech捕獲加速器,將所有物理端口合并為Suricata可以讀取的單個流。對于此配置,Suricata將處理數(shù)據(jù)包分發(fā)到多個線程。

以下是/opt/napatech3/bin/ntservice.ini中需要更改的行以獲得最佳單緩沖區(qū)性能:

TimeSyncReferencePriority=OSTime????# Timestamp clock synchronized to the OS

HostBuffersRx=[1,16,0]????# [number of host buffers, Size(MB), NUMA node]

在對ntservice進(jìn)行更改后停止并重新啟動ntservice:

/opt/napatech3/bin/ntstop.sh? -m

/opt/napatech3/bin/ntstart.sh? -m

現(xiàn)在我們需要執(zhí)行一些NTPL(Napatech編程語言)命令來完成設(shè)置。創(chuàng)建文件將使用以下命令:

Delete=All????????# Delete any existing filters

Setup[numaNode=0]=streamid==0????# Set stream ID 0 to NUMA 0

Assign[priority=0;streamid=0]=all????# Assign all phisical ports to stream ID 0

接下來使用ntpl工具執(zhí)行這些命令:

/opt/napatech3/bin/ntpl -f <my_ntpl_file>

現(xiàn)在您已準(zhǔn)備好開始suricata:

suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers

2.6 高級多線程配置

現(xiàn)在讓我們進(jìn)行更高級的配置,我們將在加速器中使用負(fù)載分配(類似RSS)功能。我們將創(chuàng)建8個流并設(shè)置加速器以基于5元組散列分配負(fù)載。僅當(dāng)CPU內(nèi)核完全飽和時,增加緩沖區(qū)大小才能最大限度地減少數(shù)據(jù)包丟失?如果CPU內(nèi)核保持運行,設(shè)置最小緩沖區(qū)大?。?6MB)將提供最佳性能(最小化L3緩存命中率)。

請注意,定義主機(jī)緩沖區(qū)的NUMA節(jié)點與Napatech加速器插入的物理CPU插槽相同是非常重要的。

首先讓我們修改ntservice.ini文件以增加主機(jī)緩沖區(qū)的數(shù)量和大小。

HostBuffersRx=[8,256,0]????????# [number of host buffers, Size (MB), NUMA node]

在對ntservice進(jìn)行更改后停止并重新啟動ntservice:

/opt/napatech3/bin/ntstop.sh -m

/opt/napatech3/bin/ntstart.sh -m

現(xiàn)在讓我們將流分配給主機(jī)緩沖區(qū)并配置負(fù)載分配。將設(shè)置負(fù)載分配以支持隧道和非隧道流量。創(chuàng)建一個包含以下ntpl命令的文件:

Delete=All # Delete any existing filters

Setup[numaNode=0] = streamid==0

Setup[numaNode=0] = streamid==1

Setup[numaNode=0] = streamid==2

Setup[numaNode=0] = streamid==3

Setup[numaNode=0] = streamid==4

Setup[numaNode=0] = streamid==5

Setup[numaNode=0] = streamid==6

Setup[numaNode=0] = streamid==7

HashMode[priority=4]=Hash5TupleSorted

Assign[priority=0; streamid=(0..7)]= all

接下來使用ntpl工具執(zhí)行這些命令:

/opt/napatech3/bin/ntpl -f <my_ntpl_file>

現(xiàn)在您已準(zhǔn)備好開始Suricata:

suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers

2.7 計數(shù)器

對于正在處理的每個流,將在stats.log中輸出以下計數(shù)器:

(1)nt<streamid>.pkts:流接收的數(shù)據(jù)包數(shù)

(2)nt<streamid>.bytes:流接收的總字節(jié)數(shù)

(3)nt<streamid>.drop:?由于緩沖區(qū)溢出情況而從此流中丟棄的數(shù)據(jù)包數(shù)

如果啟用了hba,還將提供以下計數(shù)器:

(4)nt <streamid> .hba_drop:由于達(dá)到主機(jī)緩沖區(qū)容限高水位線而丟棄的數(shù)據(jù)包數(shù).

除計數(shù)器外,還會跟蹤和記錄主機(jī)緩沖區(qū)利用率。這對調(diào)試也很有用。當(dāng)達(dá)到25%,50%,75%的利用率時,主機(jī)和板載緩沖區(qū)都會輸出日志消息。當(dāng)利用率降低時輸出相應(yīng)的消息。

2.8 支持

聯(lián)系:ntsupport@napatech.com

3. Myricom

在本章節(jié)將描述使用Myricom libpcap支持。假設(shè)您正確安裝了卡,安裝了Sniffer驅(qū)動程序并確保一切正常。確保在您的dmesg中您看到該卡處于嗅探模式:

[2102.860241] myri_snf INFO:eth4:Link0 is UP

[2101.341965 ]myri_snf INFO:eth5:Link0 is UP

在/opt/snf中安裝Myricom運行時和庫

針對Myricom的libpcap編譯Suricata:

./configure --with-libpcap-includes=/opt/snf/include/ --with-libpcap-libraries=/opt/snf/lib/

接下來,配置ringbuffers的數(shù)量。我將在這里使用8,因為我的四核+超線程有8個邏輯CPU。有關(guān)buffer-size參數(shù)的其他信息,請參見下文。

pcap:

? - interface: eth5

? ? threads: 8

? ? buffer-size: 512kb

? ? checksum-checks: no

8個線程設(shè)置使Suricata為eth5創(chuàng)建了8個讀取器線程。Myricom驅(qū)動程序確保每個驅(qū)動程序都連接到它自己的環(huán)形緩沖區(qū)。

然后按如下方式啟動Suricata:

SNF_NUM_RINGS=8? SNF_FLAGS=0x1 suricata -c? suricata.yaml -i? eth5 --runmode=workers

如果你想要16個響鈴,請將你的yaml中的“threads”變量更新為16并啟動Suricata

SNF_NUM_RINGS=16 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers

請注意,使用Myricom卡時,當(dāng)前忽略上面顯示的pcap.buffer-size yaml設(shè)置。該值將傳遞到Suricata源代碼中的pcap_set_buffer_size libpcap API。來自Myricom的支持:

“The libpcap interface to Sniffer10G ignores the pcap_set_buffer_size() value. The call to snf_open() uses zero as the dataring_size which informs the Sniffer library to use a default value or the value from the SNF_DATARING_SIZE environment variable."

Myricom在libpcap項目中打開的以下拉取請求表明,未來的SNF軟件版本可以通過pcap.buffer-size yaml設(shè)置提供對設(shè)置SNF_DATARING_SIZE的支持:

https://github.com/the-tcpdump-group/libpcap/pull/435

在此之前,可以分別使用SNF_DATARING_SIZE和SNF_DESCRING_SIZE環(huán)境變量顯式設(shè)置數(shù)據(jù)環(huán)和描述符環(huán)值。

SNF_DATARING_SIZE是用于存儲傳入分組數(shù)據(jù)的總內(nèi)存量。所有戒指共享此尺寸。SNF_DESCRING_SIZE是用于存儲有關(guān)數(shù)據(jù)包的元信息(數(shù)據(jù)包長度,偏移量,時間戳)的內(nèi)存總量。所有戒指也共享此大小。

Myricom建議描述符環(huán)的大小是數(shù)據(jù)環(huán)的1/4,但可以根據(jù)您的流量配置文件修改比率。如果未明確設(shè)置,Myricom將使用以下默認(rèn)值:SNF_DATARING_SIZE = 256MB,SNF_DESCRING_SIZE = 64MB

擴(kuò)展上面的16線程示例,您可以使用以下命令啟動帶有16GB數(shù)據(jù)環(huán)和4GB描述符環(huán)的Suricata:

SNF_NUM_RINGS=16 SNF_DATARING_SIZE=17179869184 SNF_DESCRING_SIZE=4294967296 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers

3.1 調(diào)試信息

Myricom還提供了獲取調(diào)試信息的方法。這對于驗證配置和收集其他信息非常有用。設(shè)置SNF_DEBUG_MASK = 3啟用調(diào)試信息,并且可選地設(shè)置SNF_DEBUG_FILENAME允許您指定輸出文件的位置。

完成以下示例:

SNF_NUM_RINGS=16SNF_DATARING_SIZE=17179869184SNF_DESCRING_SIZE=4294967296SNF_FLAGS=0x1SNF_DEBUG_MASK=3SNF_DEBUG_FILENAME="/tmp/snf.out"suricata-csuricata.yaml-ieth5--runmode=workers

3.2 附加信息

http://www.40gbe.net/index_files/be59da7f2ab5bf0a299ab99ef441bb2e-28.html

http://o-www.emulex.com/blogs/implementers/2012/07/23/black-hat-usa-2012-emulex-faststack-sniffer10g-product-demo-emulex-booth/

4. eBPF 和 XDP

4.1 介紹

eBPF代表擴(kuò)展的BPF。這是最新Linux內(nèi)核版本中提供的Berkeley Packet Filter的擴(kuò)展版本。

它為使用C開發(fā)的eBPF程序提供了更多高級功能,并且能夠使用在內(nèi)核和用戶空間之間共享的結(jié)構(gòu)化數(shù)據(jù)。

eBPF在Suricata中用于三件事:

? ? (1)eBPF過濾器:可以開發(fā)任何類似過濾器的BPF。提供了僅接受某些VLAN的數(shù)據(jù)包的過濾器示例。還提供了旁路實現(xiàn)。

? ? (2)eBPF負(fù)載均衡:提供可編程負(fù)載均衡。提供簡單的ippair負(fù)載平衡。

? ? (3)XDP程序:suricata可以加載XDP程序。提供旁路程序。

旁路可以在eBPF和XDP中實現(xiàn)。XDP的優(yōu)點是可以在盡可能早的階段丟棄數(shù)據(jù)包。因此性能更好。但被繞過的數(shù)據(jù)包無法到達(dá)網(wǎng)絡(luò),因此您無法在常規(guī)流量上使用此數(shù)據(jù)包,而只能在重復(fù)/嗅探流量上使用此數(shù)據(jù)包。

4.1.1?XDP?

XDP提供了另一種Linux原生方式,可以優(yōu)化Suricata在嗅探高速網(wǎng)絡(luò)時的性能。

XDP or eXpress Data Path provides a high performance, programmable network data path in the Linux kernel as part of the IO Visor Project. XDP provides bare metal packet processing at the lowest point in the software stack which makes it ideal for speed without compromising programmability. Furthermore, new functions can be implemented dynamically with the integrated fast path without kernel modification.

有關(guān)xdp更多信息:https://www.iovisor.org/technology/xdp

4.2?要求

您需要一個支持XDP的內(nèi)核,并且為了實現(xiàn)真正的性能提升,需要一個支持驅(qū)動程序中XDP的網(wǎng)卡。

Suricata XDP代碼已經(jīng)過4.13.10測試,但是需要4.15或更高版本才能使用CPU重定向映射等所有功能。

如果您使用的是英特爾網(wǎng)卡,則需要使用樹形內(nèi)核網(wǎng)卡驅(qū)動程序。樹外驅(qū)動程序不包含XDP支持。

擁有支持RSS對稱散列的網(wǎng)卡是一個好點,或者您必須使用XDP CPU重定向映射功能。

4.3?先決條件

4.3.1 禁用irqbalance?

systemctl stop irqbalance

systemctl disable irqbalance

4.3.2 內(nèi)核

您需要運行4.13或更新的內(nèi)核

4.3.3 Clang

確保系統(tǒng)上安裝了clang(> = 3.9)

sudo apt-get install clang

4.3.4?libbpf

Suricata使用libbpf與eBPF和XDP進(jìn)行交互。該庫在Linux樹中可用。在Linux 4.16之前,還需要一個修補過的libbpf庫:

git clone -b libbpf-release https://github.com/regit/linux.git

如果你有一個最新的內(nèi)核,你可以跳過這一部分。

現(xiàn)在,您可以構(gòu)建和安裝庫

cd linux/tools/lib/bpf/

make && sudo make install

sudo make install_headers

sudo ldconfig

4.4 編譯安裝suricata

要獲得Suricata源,您可以使用通常的:

git clone https://github.com/OISF/suricata.git

cd suricata

git clone https://github.com/OISF/libhtp.git-b0.5.x

./autogen.sh

然后你需要添加ebpf標(biāo)志來配置

CC=clang ./configure?-enable-ebpf? --enable-ebpf-build

make clean && make

sudo? make install-full

sudo ldconfig

sudo mkdir /etc/suricata/ebpf/

4.5 設(shè)置旁路

如果您計劃將eBPF或XDP用于內(nèi)核/硬件級別旁路,則需要執(zhí)行以下操作:

首先,在流部分啟用旁路

stream:

????bypass:true

如果需要,還可以通過?在應(yīng)用層tls部分中設(shè)置加密處理來繞過加密流

app-layer:

? protocols:

? ? tls:

? ? ? enabled: yes

? ? ? detection-ports:

? ? ? ? dp: 443

? ? ? encrypt-handling: bypass

4.6?設(shè)置eBPF過濾器

文件ebpf/vlan_filter.c包含交換機(jī)中的vlan id列表,您需要編輯該列表以獲取適合您網(wǎng)絡(luò)的內(nèi)容。另一個真正基本的過濾器丟棄IPv6數(shù)據(jù)包也可以在ebpf/vlan_filter.c中找到。

Suricata可以作為eBPF過濾任何暴露filter部分的eBPF代碼。

通過make完成修改和構(gòu)建后,您可以根據(jù)需要復(fù)制生成的eBPF過濾器.

cp ebpf/vlan_filter.bpf? /etc/suricata/ebpf/

然后在af-packet部分設(shè)置ebpf-filter-file變量

- interface: eth3

? threads: 16

? cluster-id: 97

? cluster-type: cluster_flow # choose any type suitable

? defrag: yes

? # eBPF file containing a 'loadbalancer' function that will be inserted into the

? # kernel and used as load balancing function

? ebpf-filter-file:? /etc/suricata/ebpf/vlan_filter.bpf

? use-mmap: yes

? ring-size: 200000

然后你可以正常運行suricata

/usr/bin/suricata --pidfile? /var/run/suricata.pid --af-packet=eth3? -vvv

4.7?設(shè)置eBPF旁路

您也可以使用eBPF旁路。為此,請加載bypass_filter.bpf文件并更新af-packet配置以將bypass設(shè)置為yes.

- interface: eth3

? threads: 16

? cluster-id: 97

? cluster-type: cluster_qm # symmetric RSS hashing is mandatory to use this mode

? # eBPF file containing a 'filter' function that will be inserted into the

? # kernel and used as packet filter function

? ebpf-filter-file:? /etc/suricata/ebpf/bypass_filter.bpf

? bypass: yes

? use-mmap: yes

? ring-size: 200000

對于具有旁路兼容代碼的eBPF代碼的約束比常規(guī)過濾器更強(qiáng)。過濾器必須暴露flow_table_v4和flow_table_v6每個CPU陣列的地圖類似的定義中提供的一個bypass_filter.c。Suricata將訪問和維護(hù)這兩個地圖,以處理旁路流量列表。

4.8?設(shè)置eBPF負(fù)載均衡

eBPF負(fù)載平衡允許對偵聽套接字上的流量進(jìn)行負(fù)載均衡使用eBPF過濾器中實現(xiàn)的任何邏輯。標(biāo)記有該loadbalancer部分的函數(shù)返回的值與CPU計數(shù)的模數(shù)一起使用,以了解數(shù)據(jù)包必須在哪個套接字中發(fā)送。

lb.bpf?文件中提供了簡單IP對散列函數(shù)的實現(xiàn)。

根據(jù)需要復(fù)制生成的eBPF過濾器

cp ebpf/lb.bpf /etc/suricata/ebpf/

然后cluster_ebpf在af-packet的接口部分使用負(fù)載均衡方法,并將ebpf-lb-file變量指向lb.bpf文件

- interface: eth3

? threads: 16

? cluster-id: 97

? cluster-type: cluster_ebpf

? defrag: yes

? # eBPF file containing a 'loadbalancer' function that will be inserted into the

? # kernel and used as load balancing function

? ebpf-lb-file:? /etc/suricata/ebpf/lb.bpf

? use-mmap: yes

? ring-size: 200000

4.9?設(shè)置XDP旁路

XDP旁路將允許Suricata告訴內(nèi)核必須通過XDP機(jī)制丟棄某些流的數(shù)據(jù)包。這是在數(shù)據(jù)報到達(dá)Linux內(nèi)核網(wǎng)絡(luò)堆棧之前發(fā)生的早期丟棄。

建議使用Linux 4.15或更高版本來使用該功能。如果設(shè)置BUILD_CPUMAP為0,則可以在舊內(nèi)核上使用它ebpf/xdp_filter.c。

根據(jù)需要復(fù)制生成的xdp過濾器:

cp? ebpf/xdp_filter.bpf? /etc/suricata/ebpf/

設(shè)置af-packet部分/接口suricata.yaml。

我們將使用cluster_qmNIC上的對稱散列,我們也將使用xdp-mode:?driver和/etc/suricata/ebpf/xdp_filter.bpf(在我們的示例中TCP卸載/旁路)

- interface: eth3

? threads: 16

? cluster-id: 97

? cluster-type: cluster_qm # symmetric hashing is a must!

? defrag: yes

? # Xdp mode, "soft" for skb based version, "driver" for network card based

? # and "hw" for card supporting eBPF.

? xdp-mode: driver

? xdp-filter-file:? /etc/suricata/ebpf/xdp_filter.bpf

? # if the ebpf filter implements a bypass function, you can set 'bypass' to

? # yes and benefit from these feature

? bypass: yes

? use-mmap: yes

? ring-size: 200000

XDP旁路與AF_PACKET IPS模式兼容。來自旁路流的數(shù)據(jù)包將直接從一張卡發(fā)送到第二張卡,而無需通過內(nèi)核網(wǎng)絡(luò)堆棧。

4.9.1?在NIC上設(shè)置對稱散列

英特爾網(wǎng)卡不支持對稱散列,但可以使用特定的散列函數(shù)來模擬它。

請仔細(xì)按照這些說明獲得所需結(jié)果:

ifconfig eth3 down

在樹形內(nèi)核驅(qū)動程序中使用:英特爾網(wǎng)站上提供的英特爾驅(qū)動程序中不提供XDP支持。

啟用對稱散列

ifconfig eth3 down

ethtool -L eth3 combined 16 # if you have at least 16 cores

ethtool -K eth3 rxhash on

ethtool -K eth3 ntuple on

ifconfig eth3 up

./set_irq_affinity 0-15 eth3

ethtool -X eth3 hkey 6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A equal 16

ethtool -x eth3

ethtool -n eth3

在上面的設(shè)置中,您可以自由使用任何最近的set_irq_affinity腳本。它可用于任何Intel x520 / 710 NIC源驅(qū)動程序下載。

4.9.2?禁用任何NIC卸載

運行以下命令以禁用卸載

for i in rx tx tso ufo gso gro lro tx nocache copy sg txvlan rxvlan; do

? ? ? /sbin/ethtool -K eth3 $i off 2>&1 > /dev/null;

done

4.9.3?盡可能平衡

嘗試盡可能使用網(wǎng)絡(luò)卡的平衡

for proto in tcp4 udp4 ah4 esp4 sctp4 tcp6 udp6 ah6 esp6 sctp6; do

? ? ? /sbin/ethtool -N eth3 rx-flow-hash $proto sdfn

done

4.9.4?XDP CPU重定向情況

如果您的硬件無法進(jìn)行對稱負(fù)載平衡但在驅(qū)動程序模式下支持XDP,則可以使用xdp_filter.bpf文件中提供的CPU重定向映射支持。在此模式下,負(fù)載平衡將由XDP過濾器完成,每個CPU將處理整個數(shù)據(jù)包處理,包括在內(nèi)核中創(chuàng)建skb結(jié)構(gòu)。

您需要Linux 4.15或更高版本才能使用該功能。

為此,請將af-packet接口配置中的xdp-cpu-redirect變量設(shè)置為一組CPU。然后使用cluster_cpu作為負(fù)載均衡功能。您還需要相應(yīng)地設(shè)置關(guān)聯(lián)。

可以使用xdp_monitor獲取有關(guān)CPU重定向行為的信息。該程序在samples / bpf目錄下的Linux樹中可用,并將由make命令構(gòu)建。樣本輸出如下:

sudo ./xdp_monitor --stats

XDP-event? ? ? CPU:to? pps? ? ? ? ? drop-pps? ? extra-info

XDP_REDIRECT? ? 11? ? ? 2,880,212? ? 0? ? ? ? ? ? Success

XDP_REDIRECT? ? total? 2,880,212? ? 0? ? ? ? ? ? Success

XDP_REDIRECT? ? total? 0? ? ? ? ? ? 0? ? ? ? ? ? Error

cpumap-enqueue? 11:0? 575,954? ? ? 0? ? ? ? ? ? 5.27? ? ? bulk-average

cpumap-enqueue? sum:0? 575,954? ? ? 0? ? ? ? ? ? 5.27? ? ? bulk-average

cpumap-kthread? 0? ? ? 575,990? ? ? 0? ? ? ? ? ? 56,409? ? sched

cpumap-kthread? 1? ? ? 576,090? ? ? 0? ? ? ? ? ? 54,897? ? sched

4.9.5?開始Suricata使用XDP

您現(xiàn)在可以啟動Suricata并激活XDP旁路

/usr/bin/suricata -c /etc/suricata/xdp-suricata.yaml --pidfile /var/run/suricata.pid --af-packet=eth3 -vvv

確認(rèn)您已在輸出中使用XDP過濾器(示例):

...

...

(runmode-af-packet.c:220) <Config> (ParseAFPConfig) -- Enabling locked memory for mmap on iface eth3

(runmode-af-packet.c:231) <Config> (ParseAFPConfig) -- Enabling tpacket v3 capture on iface eth3

(runmode-af-packet.c:326) <Config> (ParseAFPConfig) -- Using queue based cluster mode for AF_PACKET (iface eth3)

(runmode-af-packet.c:424) <Info> (ParseAFPConfig) -- af-packet will use '/etc/suricata/ebpf/xdp_filter.bpf' as XDP filter file

(runmode-af-packet.c:429) <Config> (ParseAFPConfig) -- Using bypass kernel functionality for AF_PACKET (iface eth3)

(runmode-af-packet.c:609) <Config> (ParseAFPConfig) -- eth3: enabling zero copy mode by using data release call

(util-runmodes.c:296) <Info> (RunModeSetLiveCaptureWorkersForDevice) -- Going to use 8 thread(s)

...

...

4.10?獲取有關(guān)旁路的實時信息

您可以通過stats事件和unix套接字獲取有關(guān)繞過的信息。?

“face-stat將返回被繞過的數(shù)據(jù)包的數(shù)量(在超時時為流添加數(shù)據(jù)包)。

?ebpf-bypassed-stats命令將返回每個接口的IPv4和IPv6流表中的元素數(shù)。

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

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

  • 專業(yè)考題類型管理運行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,565評論 0 13
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    JasonShi6306421閱讀 1,351評論 0 1
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,082評論 1 13
  • 1.體育運動的健身原理 大家都知道,人的身體有骨骼、肌肉、經(jīng)絡(luò)、血管組成。人體各部分機(jī)能的能量來源,都靠氣血輸送。...
    明師在你心中閱讀 1,989評論 0 27
  • 玲瓏有致身窈窕, 清純可愛小蠻腰。 嬌嗔向人憨態(tài)足, 青春作伴度良宵。
    渡岸孤山閱讀 513評論 3 2

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