19.5. 网络地图

Netmap是一个用于Linux和FreeBSD的高速捕获框架。在Linux中,它作为外部模块提供,而在FreeBsd 11+中,它默认是可用的。

19.5.1. 编写苏里塔

19.5.1.1. FreeBSD

在Freebsd11及更高版本上,Netmap默认包含在内核中并启用。

要使用Netmap构建Suricata,请添加 --enable-netmap 到配置行。不必指定netmap includes的位置(/usr/src/sys/net/)。

19.5.1.2. Linux系统

在Linux上,默认情况下不包括netmap。它可以从Github中提取。按照netmap存储库中包含的安装说明进行操作。

安装Netmap后,添加 --enable-netmap 到配置行。如果include未添加到标准位置,则可以在配置Suricata时指定该位置。

例子::

./configure --enable-netmap --with-netmap-includes=/usr/local/include/netmap/

19.5.2. 开始测量

打开接口时,netmap可以在接口字符串中使用各种特殊字符作为选项。

警告

Netmap读取的接口将无法用于正常的网络操作。你可以把自己锁在系统之外。

19.5.2.1. IDS

使用netmap有两种方法可以启动Suricata:

suricata --netmap=<interface>
suricata --netmap=igb0

在上面的示例中,Suricata将从 igb0 网络接口。创建的线程数取决于NIC上可用的RSS队列的数量。

suricata --netmap

在上面的例子中,Suricata将 netmap 列出的每个配置块和接口的Suricata。

netmap:
  - interface: igb0
    threads: 2
  - interface: igb1
    threads: 4

对于上述配置,两者 igb0igb1 会被打开。有2个螺纹 igb0 和4个捕获线程 igb1 .

警告

只有当NIC具有对称RSS哈希时,此多线程设置才能正常工作。如果不是这样,请考虑使用下面的“lb”方法。

19.5.2.2. IPS

Suricata基于Netmap的IPS模式基于在两个接口之间创建第2层软件桥的概念。Suricata在一个接口上读取数据包并在另一个接口上传输它们。

IP策略阻止的数据包不会被传输。

netmap:
  - interface: igb0
    copy-mode: ips
    copy-iface: igb1
  - interface: igb1
    copy-mode: ips
    copy-iface: igb0

19.5.3. 高级设置

19.5.4. lb(负载平衡)

“lb”是由seth hall编写的一种工具,用于实现单个或多个工具的负载平衡。一个常见的用例是能够在同一个流量上同时运行Suricata和Zeek。

起始LB::

lb -i eth0 -p suricata:6 -p zeek:6

注解

在freebsd 11上,命名前缀不起作用。

山药:

netmap:
  - interface: suricata
    threads: 6

启动::

suricata --netmap=netmap:suricata

传递给suricata的接口名称包含“netmap:”前缀。这告诉Surica它将从netmap管道读取,而不是真正的接口。

然后,可以将Zeek(以前叫Bro)配置为加载6个实例。两者都将获得相同流量的副本。对于这两个工具,netmap管道的数量不必相等。

19.5.4.1. 自由标准11

在FreeBSD 11上,命名管道不可用。

起始LB::

lb -i eth0 -p 6

山药:

netmap:
  - interface: netmap:eth0
    threads: 6

启动::

suricata --netmap

注解

“lb”与netmap捆绑在一起。

19.5.4.2. 单网卡

当一个接口进入netmap模式时,它将不再对操作系统提供其他操作。在某些情况下,这可能是不可取的,但有一种变通方法。

通过在特殊的内联模式下运行suricata,接口将显示它到操作系统的流量。

netmap:
  - interface: igb0
    copy-mode: tap
    copy-iface: igb0^
  - interface: igb0^
    copy-mode: tap
    copy-iface: igb0

复制模式可以是“tap”和“ips”,前者从不根据正在使用的策略丢弃数据包,后者可能丢弃数据包。

警告

配置错误会导致连接丢失。小心使用。

注解

此设置还可以用于将netmap与防火墙设置(如pf或ipfw)混合使用。

19.5.4.3. 阀门开关

VALE是一种虚拟交换机,可用于创建全虚拟网络或虚拟和真实NIC的混合。

简单的全虚拟设置:

vale-ctl -n vi0
vale-ctl -a vale0:vi0
vale-ctl -n vi1
vale-ctl -a vale0:vi1

我们现在有一个虚拟交换机“vale0”,有两个端口“vi0”和“vi1”。

我们可以在其中一个港口开始监听:

suricata --netmap=vale0:vi1

那么我们可以

19.5.5. 内联ID

内联id与上面的IPS设置几乎相同,但是它不会强制执行 drop 政策。

netmap:
  - interface: igb0
    copy-mode: tap
    copy-iface: igb1
  - interface: igb1
    copy-mode: tap
    copy-iface: igb0

与IPS模式的唯一区别在于 copy-mode 设置设置为 tap .