Red Hat Training

A Red Hat training course is available for RHEL 8

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

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

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

  • IP 地址
  • MAC 地址
  • 端口

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

重要

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

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

48.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的详情,请查看 xdp-filter(8) man page。
  • 如果您是开发人员并对 xdp-filter 代码有兴趣,请从红帽客户门户网站下载并安装相应的源 RPM(SRPM)。

48.2. 丢弃所有与 xdp-filter 规则匹配的网络数据包

这部分论述了如何使用 xdp-filter 来只允许网络伪装:

  • 来自和到一个特定目的地端口
  • 来自和到一个特定 IP 地址
  • 来自和到特定的 MAC 地址

要做到这一点,使用 xdp-filterdeny 策略来定义该过滤器丢弃所有的网络数据包,但与特定规则匹配的除外。例如,如果您不知道要丢弃的数据包的源 IP 地址,请使用这个方法。

警告

如果您在一个接口上加载 xdp-filter 时将默认策略设置为 deny,则内核会立即从这个接口丢弃所有数据包,直到您创建允许某些流量的规则。要避免从系统中锁定,在本地输入命令或者通过不同的网络接口连接到主机。

先决条件

  • 已安装 xdp-tools 软件包。
  • 您登录到本地主机,或使用您不计划过滤流量的网络接口。
  • 支持 XDP 程序的网络驱动程序。

流程

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

    # xdp-filter load enp1s0 -p deny

    另外,使用 -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

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

    • 要允许来自和到 MAC 地址 00:53:00:AA:07:BE 的数据包,请输入:

      # xdp-filter ether 00:53:00:AA:07:BE
    重要

    xdp-filter 实用程序不支持有状态数据包检查。这要求您不使用 -m mode 选项设置模式,或者您添加显式规则以允许机器接收的接收流量响应。

验证步骤

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

    # xdp-filter status

其它资源

  • 有关 xdp-filter的详情,请查看 xdp-filter(8) man page。
  • 如果您是开发人员,并且您对 xdp-filter代码有兴趣,请从红帽客户门户网站下载并安装相应的源 RPM(SRPM)。