在支持PF_RING的应用程序中开发硬件过滤

介绍

PF_RING过滤器被设计成高效和多功能的。 基于PF_RING的应用程序可以使用它们来减少需要处理的数据包的数量,并将传入的数据包传递给内核插件以供进一步处理。
多年前,硬件数据包过滤仅限于昂贵的基于FPGA的NIC,而现在也可以在诸如Silicom 1/10 Gbit Director卡和基于Intel 82599的10 Gbit网络适配器等商用适配器上使用。

在PF_RING中过滤5.2

尽管过去的PF_RING版本支持有限的硬件过滤,但在PF_RING 5.2中,我们已经完全重新设计了数据包过滤,因此应用程序可以使用单个且一致的数据包过滤API,从而使PF_RING能够基于正在使用的硬件NIC做到这一点。 这意味着您需要编写一次应用程序,而不管正在使用哪种类型的NIC,并让PF_RING设置本机过滤器类型。 从下图中可以看到,我们在PF_RING中支持的组合很多,使用单个API是避免浪费时间来支持所有这些组合的先决条件。


在支持PF_RING的应用程序中开发硬件过滤_第1张图片
PF-RING过滤

设置过滤器时,可以将其指定为NIC本地过滤器(例如,silicom_redirector_hw_rule)或PF_RING通用过滤器(例如filtering_rule / hash_filtering_rule)。在前一种情况下,您可以完全控制过滤器,代价是无法通过各种适配器类型无缝地运行代码。在后一种情况下,您编码一次,并根据您使用的NIC类型让PF_RING将过滤器格式转换为本地硬件过滤器。

尽管所有硬件滤波器类型在硬件中都是非常有效的,但并不完全相同。截至今天,我们支持:

  • 基于82599的网卡(有关更多详细信息,请参阅英特尔82599数据表)
  • 多达32k的FlowDirector过滤器(PF_RING术语中的IPv4 / v6 hash_filtering_rule)
  • 多达128个5元组过滤器(PF_RING术语中的IPv4 / v6 filtering_rule)
  • Silicom总监
    每端口高达1'000个过滤器(仅限IPv4的柔性过滤器)
    在Silicom Director的情况下,也可以在端口之间执行硬件操作(例如,跨端口匹配给定过滤器的镜像包)。在非导向器网卡上,您也可以在CPU中执行此操作。

使用硬件过滤器

为了演示PF_RING过滤器的强大功能和实用性,我们增强了pfcount演示应用程序,以便为丢弃传入数据包添加过滤器(-u命令行选项)。 pfcount_82599演示应用程序显示如何设置本机过滤器。

Snort中的硬件过滤

对于所有的snort用户,我们已经增强了我们的PF_RING DAQ模块,所以只要检测到错误的数据包,snort就可以透明地设置“丢弃过滤器”。 这是解决DDoS攻击和丢弃硬件令人讨厌的数据包,浪费太多CPU周期的一个奇妙的方法。由于snort PF_RING DAQ可以同时在IDS(入侵检测系统)和IPS(入侵防御系统)模式下工作,所以硬件过滤 IPS模式是一件非常好的事情。

如果您没有硬件过滤网卡...

使用硬件过滤时,软件PF_RING过滤器仍然处于启用状态。 这是因为它并不总是可以在硬件中过滤所有的流量。 因此,您可以像过去一样使用PF_RING过滤,但必须注意,切换到硬件过滤网卡允许您的CPU将过滤器卸载到NIC,从而保留用于数据包处理的宝贵CPU周期。

关于82599过滤器的说明

为了启用硬件过滤器,您需要加载具有特定参数的ixgbe模块。
示例:insmod ixgbe.ko RSS = 0,0,0,0 FdirMode = 2,2,2,2 FdirPballoc = 3,3,3,3
过滤器不仅用于传递/丢弃操作,还用于将数据包转向特定的核心/ RX队列。 例如,你可以说:端口80上的所有传入TCP数据包都必须被转移到RX队列3.所以你可以绑定你的HTTP分析应用程序来排队ethX @ 3并且忘记所有其他队列。
您可以同时设置5元组和FlowDirector过滤器。 但是在芯片中有一些限制,所以请参考82599数据手册来获得关于这个主题的更多信息。

你可能感兴趣的:(在支持PF_RING的应用程序中开发硬件过滤)