Red Hat Training

A Red Hat training course is available for RHEL 8

第 42 章 使用 xdp-filter 进行高性能流量过滤以防止 DDoS 攻击

nftables 等数据包过滤器相比,Express Data Path(XDP)在网络接口处处理和丢弃网络数据包。因此,XDP 在到达防火墙或其他应用程序前决定了软件包的下一步。因此,XDP 过滤器需要较少的资源,处理网络数据包的速度要比传统数据包过滤器快得多,从而防止分布式拒绝服务(DDoS)攻击。例如,在测试过程中,红帽在单核上每秒丢弃了 2,600万个网络数据包,这比同一硬件上的 nftables 的丢弃率要高得多。

xdp-filter 工具使用 XDP 允许或丢弃传入的网络数据包。您可以创建规则来过滤与特定对象或特定命令的流量:

  • IP 地址
  • MAC 地址
  • 端口

请注意,即使 xdp-filter 具有非常高的数据包处理率,但它不具有与 nftables 相同的功能。将 xdp-filter 视为一个概念性工具,来演示使用 XDP 的数据包过滤。另外,您可以使用工具代码来更好地了解如何编写您自己的 XDP 应用程序。

重要

在 AMD 和 Intel 64 位以外的构架上,xdp-filter 工具仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

42.1. 丢弃匹配 xdp-filter 规则的网络数据包

您可以使用 xdp-filter 丢弃网络数据包:

  • 到特定目的地端口
  • 从一个指定的 IP 地址
  • 从一个指定的 MAC 地址

xdp-filterallow 策略定义所有流量都被允许,过滤器只丢弃与特定规则匹配的网络数据包。例如,如果您知道要丢弃的数据包的源 IP 地址,请使用这个方法。

前提条件

  • xdp-tools 软件包已安装。
  • 支持 XDP 程序的网络驱动程序。

流程

  1. 加载 xdp-filter 来处理特定接口上传入的数据包,如 enp1s0

    # xdp-filter load enp1s0

    默认情况下,xdp-filter 使用 allow 策略,并且工具只丢弃与任何规则匹配的流量。

    (可选)使用 -f feature 选项仅启用特定功能,如 tcpipv4ethernet。仅加载所需的功能而不是全部功能,可以提高数据包处理的速度。要启用多个功能,使用逗号分隔它们。

    如果该命令出错,则网络驱动程序不支持 XDP 程序。

  2. 添加规则来丢弃与它们匹配的数据包。例如:

    • 要将传入数据包放到端口 22,请输入:

      # xdp-filter port 22

      这个命令添加一个匹配 TCP 和 UDP 流量的规则。要只匹配特定的协议,请使用 -p protocol 选项。

    • 要丢弃来自 192.0.2.1 的传入数据包,请输入:

      # xdp-filter ip 192.0.2.1 -m src

      请注意,xdp-filter 不支持 IP 范围。

    • 要丢弃来自 MAC 地址 00:53:00:AA:07:BE 的传入数据包,请输入:

      # xdp-filter ether 00:53:00:AA:07:BE -m src

验证

  • 使用以下命令显示丢弃和允许的数据包统计信息:

    # xdp-filter status

其他资源

  • xdp-filter(8) 手册页
  • 如果您是开发人员,并对 xdp-filter 代码感兴趣,请从红帽客户门户网站下载并安装相应的源 RPM (SRPM)。