suricata的netmap抓包模式的安裝說明

suricata 簡介

Suricata是一個(gè)免費(fèi)世曾、開源注整、成熟、快速度硝、健壯的網(wǎng)絡(luò)威脅檢測引擎。Suricata引擎能夠進(jìn)行實(shí)時(shí)入侵檢測(IDS)寿冕、內(nèi)聯(lián)入侵預(yù)防(IPS)蕊程、網(wǎng)絡(luò)安全監(jiān)控(NSM)和離線pcap處理。Suricata使用強(qiáng)大而廣泛的規(guī)則和簽名語言來檢查網(wǎng)絡(luò)流量驼唱,并提供強(qiáng)大的Lua腳本支持來檢測復(fù)雜的威脅藻茂。使用標(biāo)準(zhǔn)的輸入和輸出格式(如YAML和JSON),使用現(xiàn)有的SIEMs玫恳、Splunk辨赐、Logstash/Elasticsearch、Kibana和其他數(shù)據(jù)庫等工具進(jìn)行集成將變得非常簡單京办。Suricata項(xiàng)目和代碼由開放信息安全基金會(OISF)擁有和支持掀序,OISF是一個(gè)非盈利基金會,致力于確保Suricata作為一個(gè)開源項(xiàng)目的開發(fā)和持續(xù)成功惭婿。

suricata 支持多種抓包模式不恭,比如通過AF-packet抓包,比如采用PF_RING(高性能的網(wǎng)絡(luò)庫财饥,免費(fèi)版本不支持Zero Copy)抓包,還支持Netmap抓包三種模式换吧,其中性能最好的就是netmap抓包模式,本文就是介紹如何編譯netmap版本的suricata钥星。

一 安裝前準(zhǔn)備

suricata可以正常編譯的臨時(shí)下做以下操作檢查沾瓦。
1)netmap是需要更改網(wǎng)卡驅(qū)動的,所以開始時(shí)候必須看下網(wǎng)卡的類型谦炒,采用命令如下:

[root@localhost ~]# ethtool -i p1p1
driver: ixgbe
version: 5.3.7
firmware-version: 0x800003af
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

通過上面命令看到驅(qū)動程序?qū)?yīng)的網(wǎng)卡類型為ixgbe即10G即萬兆網(wǎng)卡贯莺,英特爾的10G網(wǎng)卡(例如,82598编饺、82599乖篷,x540)由ixgbe驅(qū)動支持,我們以后應(yīng)該限制住網(wǎng)卡類型透且。
對于常見的驅(qū)動撕蔼,我們在安裝過一次的netmap后豁鲤,netmap會自動下載這些驅(qū)動文件,我們提供的netmap軟件最好使用這些驅(qū)動鲸沮,防止客戶環(huán)境無法下載這些驅(qū)動了琳骡。
2)內(nèi)核源碼查看
netmap編譯的時(shí)候需要內(nèi)核源碼的支持,需要先查看內(nèi)核的版本讼溺,并且在/ usr / src目錄下看看是否存在內(nèi)核源碼楣号,如果不存在則需要下載內(nèi)核的內(nèi)核并解壓縮,放到此處怒坯。

[root@localhost netmap-master]# uname -r
3.10.0-693.el7.x86_64

或者:

[root@localhost netmap-master]# rpm -qa|grep kernel
kernel-3.10.0-693.el7.x86_64
kernel-tools-libs-3.10.0-693.el7.x86_64
kernel-headers-3.10.0-693.21.1.el7.x86_64
kernel-devel-3.10.0-693.el7.x86_64
kernel-tools-3.10.0-693.el7.x86_64

查詢到內(nèi)核版本后,可以查看源碼是否存在:

[root@localhost ~]# ll /usr/src/
debug/   kernels/
[root@localhost ~]# ll /usr/src/
debug/   kernels/
[root@localhost ~]# ll /usr/src/kernels/
總用量 4
drwxr-xr-x. 22 root root 4096 9月  11 10:28 3.10.0-693.el7.x86_64

二 netmap編譯和安裝

  1. 以下為makefie文件生成和編譯安裝炫狱,說明如下:
    --drivers后面帶著網(wǎng)卡的類型。
    --kernel-sources和
    --kernel-dir指定內(nèi)核內(nèi)核位置剔猿,如果內(nèi)核內(nèi)核為/usr/src/kernels下面則可以不提供這兩個(gè)選項(xiàng)视译。
    make install命令需要root權(quán)限。
./configure  --kernel-sources=/usr/src/kernels/$(uname -r) --kernel-dir=/usr/src/kernels/$(uname -r) --prefix=/usr
make&& make install
  1. 網(wǎng)卡上參數(shù)設(shè)置:
    網(wǎng)卡本身有些技術(shù)提升抓包性能归敬,對于suricata的抓包來說酷含,需要關(guān)閉,下面參考suricata的相關(guān)文檔來設(shè)置的
  • LRO/GRO 關(guān)閉
    數(shù)據(jù)包在數(shù)據(jù)量鏈路層傳輸?shù)臅r(shí)候不能超過MTU(1500個(gè)字節(jié))汪茧,那么就需要進(jìn)行拆包和組包椅亚,這部分工作如果有cpu來做,將耗費(fèi)cpu資源舱污,LRO和GRO技術(shù)是由網(wǎng)卡來進(jìn)行組包和拆包呀舔。
    這是suricata的限制.
    ethtool -K p1p1 gro off lro off

  • 關(guān)閉硬件校驗(yàn)
    如果啟動這個(gè),dsize 在suricata中不可用了和tcp狀態(tài)的跟蹤慌闭,如果不用這個(gè)關(guān)鍵字可以考慮打開别威。
    ethtool -K p1p1 tx off rx off

  • 合并隊(duì)列
    對很多網(wǎng)卡來說,不支持對稱hash算法的話,如果多隊(duì)列,會造成同一個(gè)流不同方向的包發(fā)到不同的隊(duì)列上去,對suricata組包會有問題,所以大部分情況下,我們把隊(duì)列個(gè)數(shù)改成1個(gè),如果性能要求比較高,網(wǎng)卡支持對稱hash算法的話,我們會考慮設(shè)置對稱hash算法和改成多個(gè)隊(duì)列的模式.

[root@localhost ~]# ethtool -l p1p1
Channel parameters for p1p1:
Pre-set maximums:
RX:     0
TX:     0
Other:      1
Combined:   63   #一共支持多少個(gè)隊(duì)列
Current hardware settings:
RX:     0
TX:     0
Other:      1
Combined:   4  #現(xiàn)在起作用的是多少個(gè)隊(duì)列

合并成一個(gè)隊(duì)列

ethtool -L p1p1 combined 1
  • 網(wǎng)卡隊(duì)列中包數(shù)目修改
    網(wǎng)卡丟包原因可以通過以下命令查看:
[root@localhost netmap-master]# ethtool -S p2p1|grep 'error'
     rx_errors: 0
     tx_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_fifo_errors: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_csum_offload_errors: 0
     fcoe_last_errors: 0
[root@localhost netmap-master]# ethtool -S p2p1|grep 'drop'
     rx_dropped: 0
     tx_dropped: 0
     rx_fcoe_dropped: 0

如果是rx_missed_errors 錯(cuò)誤個(gè)數(shù)很多,需要擴(kuò)大些隊(duì)列的包數(shù)量.
如果是rx_dropped 多般是程序取包慢了造成緩沖區(qū)滿了,包被丟掉,如果這種情況,擴(kuò)大隊(duì)列數(shù)量會稍微好點(diǎn),但是如果流量持續(xù)很大,提升程序性能是王道。

#查看網(wǎng)卡隊(duì)列中可以保存的包的大小驴剔。
[root@localhost netmap-master]# ethtool -g p2p1
Ring parameters for p2p1:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     512
RX Mini:    0
RX Jumbo:   0
TX:     512

# 隊(duì)列中的包數(shù)量改成1024個(gè),空間增加防止丟包
[root@localhost netmap-master]# ethtool -G p2p1 rx 1024
[root@localhost netmap-master]# ethtool -G p2p1 tx 1024
  1. 替換網(wǎng)卡驅(qū)動
    如果是你替換的是ssh或telnet的網(wǎng)卡省古,會造成掉線,有時(shí)候也只是閃斷。
#!bin/sh
#在netmap下執(zhí)行替換ixgbe的網(wǎng)卡驅(qū)動丧失,網(wǎng)卡類型不同則不同豺妓,另外由于netmap會接管整個(gè)網(wǎng)卡需要注意下不能正在連接網(wǎng)卡上操作,會造成斷網(wǎng)布讹。
insmod netmap.ko
modprobe -r ixgbe
# 這種方式會斷開連接
#rmmod  ixgbe
insmod /home/xxx/netmap-master/ixgbe-5.3.7/src/ixgbe.ko

驗(yàn)證安裝結(jié)果:

[root@localhost ~]# ls /dev/netmap
/dev/netmap
[root@localhost ~]# lsmod|grep netmap
netmap                165523  1 ixgbe
# 看下內(nèi)核日志
[root@localhost ~]# dmesg|grep netmap
  1. 運(yùn)行測試程序
    pkt-gen是netmap自帶的發(fā)包和收包工具琳拭,性能比tcpreplay更好,可以跑滿網(wǎng)卡描验。
    位置如下:
[root@localhost netmap-master]# tree ./build-apps/pkt-gen/
./build-apps/pkt-gen/
├── GNUmakefile -> /home/miaohq/netmap-master/LINUX/../apps/pkt-gen/GNUmakefile
├── pkt-gen
├── pkt-gen-b
└── pkt-gen-b.o

用法如下:

#發(fā)包命令:
 pkt-gen -i p1p1 -n 100000 -z -Z -4 -l 512 -f tx
 
#收包命令:
 pkt-gen -i p1p1 -f rx

對于物理網(wǎng)卡來說白嘁,都有其網(wǎng)速極限,這個(gè)極限被稱為線性速度膘流,包的大小不同絮缅,pps即每秒轉(zhuǎn)發(fā)包的數(shù)量不同鲁沥,極限如下:

For a physical link, the maximum numer of packets per second can
be computed with the formula:
    pps = line_rate / (672 + 8 * pkt_size)
where "line_rate" is the nominal link rate (e.g 10 Gbit/s) and
pkt_size is the actual packet size including MAC headers and CRC.
The following table summarizes some results
            LINE RATE
    pkt_size \  100M    1G  10G 40G
      64    .1488   1.488   14.88   59.52
     128    .0589   0.589    5.89   23.58
     256    .0367   0.367    3.67   14.70
     512    .0209   0.209    2.09    8.38
    1024    .0113   0.113    1.13    4.51
    1518    .0078   0.078    0.78    3.12

三 suricata編譯安裝

./configure --prefix=/usr/local --sysconfdir=/etc/ --localstatedir=/usr/local/ --enable-unix-socket --with-libnss-libraries=/usr/lib64 --with-libnss-includes=/usr/include/nss3 --with-libnspr-libraries=/usr/lib64 --with-libnspr-includes=/usr/include/nspr4  --enable-nfqueue --enable-lua --enable-netmap

關(guān)鍵部分就是帶上了--enable-netmap 然后再進(jìn)行make && make install 即可完成編譯安裝。

驗(yàn)證編譯后可執(zhí)行文件是否支持netmap耕魄,可以通過以下命令查看:

[root@localhost .libs]# suricata --build-info
This is Suricata version 5.0.3 RELEASE
Features: PCAP_SET_BUFF AF_PACKET NETMAP HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK PCRE_JIT HAVE_NSS HAVE_LIBJANSSON TLS MAGIC RUST 
SIMD support: none
Atomic intrinsics: 1 2 4 8 byte(s)
64-bits, Little-endian architecture
GCC version 9.3.0, C version 199901
compiled with _FORTIFY_SOURCE=0
L1 cache line size (CLS)=64
thread local storage method: __thread
compiled with LibHTP v0.5.33, linked against LibHTP v0.5.33

Suricata Configuration:
  AF_PACKET support:                       yes
  eBPF support:                            no
  XDP support:                             no
  PF_RING support:                         no
  NFQueue support:                         no
  NFLOG support:                           no
  IPFW support:                            no
  Netmap support:                          yes v12
....

有此命令:Netmap support: yes v12 表示支持画恰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吸奴,隨后出現(xiàn)的幾起案子允扇,更是在濱河造成了極大的恐慌,老刑警劉巖则奥,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考润,死亡現(xiàn)場離奇詭異,居然都是意外死亡读处,警方通過查閱死者的電腦和手機(jī)额划,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來档泽,“玉大人,你說我怎么就攤上這事揖赴」菽洌” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵燥滑,是天一觀的道長渐北。 經(jīng)常有香客問我,道長铭拧,這世上最難降的妖魔是什么赃蛛? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮搀菩,結(jié)果婚禮上呕臂,老公的妹妹穿的比我還像新娘。我一直安慰自己肪跋,他們只是感情好歧蒋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著州既,像睡著了一般谜洽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吴叶,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天阐虚,我揣著相機(jī)與錄音,去河邊找鬼蚌卤。 笑死实束,一個(gè)胖子當(dāng)著我的面吹牛楣嘁,可吹牛的內(nèi)容都是我干的翎冲。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼襟雷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛹找,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤肚豺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谷异,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體分尸,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年歹嘹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箩绍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尺上,死狀恐怖材蛛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怎抛,我是刑警寧澤卑吭,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站马绝,受9級特大地震影響豆赏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜富稻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一掷邦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椭赋,春花似錦抚岗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔓涧,卻和暖如春件已,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背元暴。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工篷扩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茉盏。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓鉴未,卻偏偏與公主長得像枢冤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子铜秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容