suricata的netmap抓包模式的安装说明

suricata 简介

Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。Suricata使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的Lua脚本支持来检测复杂的威胁。使用标准的输入和输出格式(如YAML和JSON),使用现有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他数据库等工具进行集成将变得非常简单。Suricata项目和代码由开放信息安全基金会(OISF)拥有和支持,OISF是一个非盈利基金会,致力于确保Suricata作为一个开源项目的开发和持续成功。

suricata 支持多种抓包模式,比如通过AF-packet抓包,比如采用PF_RING(高性能的网络库,免费版本不支持Zero Copy)抓包,还支持Netmap抓包三种模式,其中性能最好的就是netmap抓包模式,本文就是介绍如何编译netmap版本的suricata。

一 安装前准备

suricata可以正常编译的临时下做以下操作检查。
1)netmap是需要更改网卡驱动的,所以开始时候必须看下网卡的类型,采用命令如下:

[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

通过上面命令看到驱动程序对应的网卡类型为ixgbe即10G即万兆网卡,英特尔的10G网卡(例如,82598、82599,x540)由ixgbe驱动支持,我们以后应该限制住网卡类型。
对于常见的驱动,我们在安装过一次的netmap后,netmap会自动下载这些驱动文件,我们提供的netmap软件最好使用这些驱动,防止客户环境无法下载这些驱动了。
2)内核源码查看
netmap编译的时候需要内核源码的支持,需要先查看内核的版本,并且在/ usr / src目录下看看是否存在内核源码,如果不存在则需要下载内核的内核并解压缩,放到此处。

[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

查询到内核版本后,可以查看源码是否存在:

[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后面带着网卡的类型。
    --kernel-sources和
    --kernel-dir指定内核内核位置,如果内核内核为/usr/src/kernels下面则可以不提供这两个选项。
    make install命令需要root权限。
./configure  --kernel-sources=/usr/src/kernels/$(uname -r) --kernel-dir=/usr/src/kernels/$(uname -r) --prefix=/usr
make&& make install
  1. 网卡上参数设置:
    网卡本身有些技术提升抓包性能,对于suricata的抓包来说,需要关闭,下面参考suricata的相关文档来设置的
  • LRO/GRO 关闭
    数据包在数据量链路层传输的时候不能超过MTU(1500个字节),那么就需要进行拆包和组包,这部分工作如果有cpu来做,将耗费cpu资源,LRO和GRO技术是由网卡来进行组包和拆包。
    这是suricata的限制.
    ethtool -K p1p1 gro off lro off

  • 关闭硬件校验
    如果启动这个,dsize 在suricata中不可用了和tcp状态的跟踪,如果不用这个关键字可以考虑打开。
    ethtool -K p1p1 tx off rx off

  • 合并队列
    对很多网卡来说,不支持对称hash算法的话,如果多队列,会造成同一个流不同方向的包发到不同的队列上去,对suricata组包会有问题,所以大部分情况下,我们把队列个数改成1个,如果性能要求比较高,网卡支持对称hash算法的话,我们会考虑设置对称hash算法和改成多个队列的模式.

[root@localhost ~]# ethtool -l p1p1
Channel parameters for p1p1:
Pre-set maximums:
RX:     0
TX:     0
Other:      1
Combined:   63   #一共支持多少个队列
Current hardware settings:
RX:     0
TX:     0
Other:      1
Combined:   4  #现在起作用的是多少个队列

合并成一个队列

ethtool -L p1p1 combined 1
  • 网卡队列中包数目修改
    网卡丢包原因可以通过以下命令查看:
[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 错误个数很多,需要扩大些队列的包数量.
如果是rx_dropped 多般是程序取包慢了造成缓冲区满了,包被丢掉,如果这种情况,扩大队列数量会稍微好点,但是如果流量持续很大,提升程序性能是王道。

#查看网卡队列中可以保存的包的大小。
[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

# 队列中的包数量改成1024个,空间增加防止丢包
[root@localhost netmap-master]# ethtool -G p2p1 rx 1024
[root@localhost netmap-master]# ethtool -G p2p1 tx 1024
  1. 替换网卡驱动
    如果是你替换的是ssh或telnet的网卡,会造成掉线,有时候也只是闪断。
#!bin/sh
#在netmap下执行替换ixgbe的网卡驱动,网卡类型不同则不同,另外由于netmap会接管整个网卡需要注意下不能正在连接网卡上操作,会造成断网。
insmod netmap.ko
modprobe -r ixgbe
# 这种方式会断开连接
#rmmod  ixgbe
insmod /home/xxx/netmap-master/ixgbe-5.3.7/src/ixgbe.ko

验证安装结果:

[root@localhost ~]# ls /dev/netmap
/dev/netmap
[root@localhost ~]# lsmod|grep netmap
netmap                165523  1 ixgbe
# 看下内核日志
[root@localhost ~]# dmesg|grep netmap
  1. 运行测试程序
    pkt-gen是netmap自带的发包和收包工具,性能比tcpreplay更好,可以跑满网卡。
    位置如下:
[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

用法如下:

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

对于物理网卡来说,都有其网速极限,这个极限被称为线性速度,包的大小不同,pps即每秒转发包的数量不同,极限如下:

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

关键部分就是带上了--enable-netmap 然后再进行make && make install 即可完成编译安装。

验证编译后可执行文件是否支持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 表示支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容