第 3 章 使用 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)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。
如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
3.1. 丢弃匹配 xdp-filter 规则的网络数据包
您可以使用 xdp-filter
丢弃网络数据包:
- 到特定目的地端口
- 从一个指定的 IP 地址
- 从一个指定的 MAC 地址
xdp-filter
的 allow
策略定义所有流量都被允许,过滤器只丢弃与特定规则匹配的网络数据包。例如,如果您知道要丢弃的数据包的源 IP 地址,请使用这个方法。
先决条件
-
xdp-tools
软件包已安装。 - 支持 XDP 程序的网络驱动程序。
流程
加载
xdp-filter
来处理特定接口上传入的数据包,如enp1s0
:# xdp-filter load enp1s0
默认情况下,
xdp-filter
使用allow
策略,并且工具只丢弃与任何规则匹配的流量。(可选)使用
-f feature
选项仅启用特定功能,如tcp
、ipv4
或ethernet
。仅加载所需的功能而不是全部功能,从而提高数据包处理的速度。要启用多个功能,使用逗号分隔它们。如果该命令出错,则网络驱动程序不支持 XDP 程序。
添加规则来丢弃与它们匹配的数据包。例如:
要将传入数据包放到端口
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)。