开源
Gatekeeper:开源的DDoS 保护系统
来源:元经纪     阅读:686
网站管理员
发布于 2023-02-07 07:22
查看主页

概述

Gatekeeper 是一个开源 DDoS 保护系统。它旨在扩展到任何峰值带宽,因此它可以抵御今天和明天的 DDoS 攻击。尽管 Gatekeeper 的地理分布式架构,描述必须对传入流量强制执行的所有决策的网络策略是集中的。这种集中式策略使网络运营商能够利用在非常高延迟(例如分布式数据库)下不可行的分布式算法,并同时对抗多个多向量 DDoS 攻击。

Gatekeeper 的目标用户是机构的网络运营商、服务和内容提供商、企业网络等。它不适合个人互联网用户使用。

如何设置

配置大页面

DPDK需要使用hugepages;需求文档中提供了安装大页面的说明。在许多系统上,以下大页面设置就足够了:

$ echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

启用内核模块vfio-pci

从 Gatekeeper v1.1 开始,Linux 内核模块vfio-pci是将 NIC 绑定到 DPDK/Gatekeeper 的首选方式。如果您无法让内核模块在您的机器上运行,您可以选择本页中记录vfio-pci的替代方案。vfio-pci

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

为了vfio-pci工作,BIOS 和内核都必须支持它。BIOS 必须启用 VT-d。BIOS 可能会将 VT-d 标识为“Intel (R) VT for Directed I/O”、“Intel (R) VT-d Feature”、“Intel VT-d”、“VT-d”或类似变体;有关更多示例,请在Google Images上搜索“BIOS VT-d” 。某些 BIOS 可能要求在启用 VT-d 之前启用名为“Intel (R) Virtualization Technology”(或此字符串的变体)的选项。

要检查 BIOS 是否启用了 VT-d,请在 Linux 启动后运行以下命令:

$ dmesg | grep -e DMAR

如果上面的命令返回一些行,则应该启用 VT-d。否则,必须返回 BIOS 才能启用它。有关如何检查 BIOS 是否启用了 VT-d 的更多信息,请参见此页面

在 BIOS 中启用 VT-d 后,必须确保内核支持 IOMMU。请注意,需要大于 3.6 的内核版本才能支持 IOMMU。可以使用以下命令验证正在运行的内核是否默认启用了 IOMMU:

$ grep CONFIG_INTEL_IOMMU_DEFAULT_ON /boot/config-`uname -r`

上面的命令很可能会输出 # CONFIG_INTEL_IOMMU_DEFAULT_ON is not set,即运行的内核默认没有启用 IOMMU。此页面上提供了检查内核构建选项(即CONFIG_INTEL_IOMMU_DEFAULT_ON)的 替代方法。

如果内核默认没有启用 IOMMU,则必须intel_iommu=on通过 GRUB 传递内核引导参数。有关为什么intel_iommu=on需要引导参数的信息,请参阅此页面。可以使用以下命令检查正在运行的内核是否收到此参数:

$ cat /proc/cmdline | grep intel_iommu=on

如果正在运行的内核没有收到参数intel_iommu=on,将其添加到 GRUB 中,然后重新启动机器。有关如何将引导参数添加到 GRUB 的信息,请参见 此处

在 BIOS 中启用 VT-d 并且内核支持 IOMMU 后,可以使用以下命令之一验证是否已全部设置:

$ ls /sys/kernel/iommu_groups

或者

$ dmesg | grep -ie 'IOMMU\s\+enabled'

如果上述命令的输出不为空,则一切都已设置。

选项 1:获取包

Gatekeeper Debian 软件包在项目的 发布 页面上可用于 Ubuntu 20.04 LTS。

安装

下载软件包后,可以使用以下命令安装它们:

$ tar -zxvf gatekeeper-ubuntu-20.04-packages.tar.gz
$ cd gatekeeper-ubuntu-20.04-packages
$ sudo dpkg -i dpdk-rte-kni-dkms_*_amd64.deb gatekeeper-bird_*_amd64.deb gatekeeper_*_amd64.deb

该软件包是一个 DKMS(动态内核模块支持)软件包,它在安装和内核升级期间dpdk-rte-kni-dkms构建内核模块。rte_kni

配置网守

通过 Debian 软件包安装时,Gatekeeper 配置文件位于/etc/gatekeeper. 您至少应该编辑该net.lua文件,并根据您的环境设置 、和front_ports变量。front_ipsback_portsback_ips

其他 Lua 文件配置不同的 Gatekeeper 功能块。请参阅项目的wiki 以获取有关是否需要在您的设置中更改这些内容的更多信息。

您还需要编辑该/etc/gatekeeper/envvars文件并将 GATEKEEPER_INTERFACES变量设置为要绑定到 DPDK 的网络适配器的 PCI 地址。这些可以使用lshw命令找到。例如:

# lshw -c network -businfo
Bus info          Device     Class          Description
=======================================================
pci@0000:08:00.0  eth0       network        I350 Gigabit Network Connection
pci@0000:08:00.1  eth1       network        I350 Gigabit Network Connection
...

鉴于此输出,设置GATEKEEPER_INTERFACES如下:

GATEKEEPER_INTERFACES="08:00.0 08:00.1"

在同一个文件中,您可以 选择 在变量 中指定环境抽象层选项 在.DPDK_ARGSGATEKEEPER_ARGS

如何运行

运行以下命令以启动 Gatekeeper 并确保它在重新启动时自动启动。

$ sudo systemctl start gatekeeper
$ sudo systemctl enable gatekeeper

选项 2:从源代码构建

安装依赖

安装以下软件依赖项:

$ sudo apt-get update
$ sudo apt-get -y -q install git clang devscripts doxygen libhugetlbfs-bin \
    build-essential gcc-multilib linux-headers-`uname -r` libmnl0 libmnl-dev \
    libkmod2 libkmod-dev libnuma-dev libelf1 libelf-dev libc6-dev-i386 \
    autoconf flex bison libncurses5-dev libreadline-dev python \
    libcap-dev libcap2 meson ninja-build

注意:libmnl0libmnl-dev都需要编译和运行 gatekeeper,但只libmnl0需要简单运行gatekeeperlibkmod2和都libkmod-dev需要编译和运行gatekeeper,但只libkmod2需要简单运行gatekeeper。 libnuma-dev需要编译最新的 DPDK 和支持 NUMA 系统。需要该包libelf-dev来编译支持从 ELF 文件读取 BPF 程序的 DPDK,但只libelf1需要运行它。需要该包libc6-dev-i386来编译文件夹中的 BPF 程序bpf/。、autoconfflexbisonlibncurses5-dev包 libreadline-dev适用于 BIRD。该devscripts软件包用于构建 Gatekeeper Debian 软件包。 python需要能够运行dpdk-devbind.py脚本。 libcap-dev需要编译 Gatekeeper,但只libcap2需要运行 Gatekeeper。 meson并且ninja-build需要构建 DPDK。

要使用 DPDK,请确保您具备所有环境要求

克隆存储库

克隆 Gatekeeper 存储库,包括包含 Gatekeeper 依赖项的子模块:

$ git clone --recursive http://github.com/AltraMayor/gatekeeper.git

如果不使用--recursive克隆选项,则需要从目录中获取包含依赖项的子模块gatekeeper :

$ git submodule init
$ git submodule update

编译

本节介绍如何手动构建 Gatekeeper。如果您想构建 Debian 软件包,请参阅 如何构建软件包部分。

gatekeeper目录中,运行安装脚本:

$ . setup.sh

此脚本编译 DPDK、LuaJIT 和 BIRD,并加载所需的内核模块。此外,它将接口名称及其各自的 PCI 地址保存在文件中lua/if_map.lua,以便接口名称可以在 Gatekeeper 配置文件中使用。

DPDK和LuaJIT编译完成后,gatekeeper可以编译:

$ make

配置网络适配器

gatekeeper使用之前,网络适配器必须绑定到 DPDK。为此,您可以使用脚本dependencies/dpdk/usertools/dpdk-devbind.py。例如:

$ sudo dependencies/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci enp131s0f0

此命令将接口绑定enp131s0f0vfio-pci驱动程序,以便可以将帧直接传递给 DPDK 而不是内核。请注意,此绑定必须在上述步骤中设置 Gatekeeper 之后进行,以便绑定的接口出现在 中的接口列表中 lua/if_map.lua

如何运行

编译gatekeeper完成并正确配置环境后,运行:

$ sudo build/gatekeeper [EAL OPTIONS] -- [GATEKEEPER OPTIONS]

[EAL OPTIONS]双破折号之前指定并代表 DPDK环境抽象层 的参数[GATEKEEPER OPTIONS],在双破折号之后指定并代表Gatekeeper-specific options

系统的早期配置,包括 DPDK 中的设备和内存配置,将被记录到 stdout。Gatekeeper 启动后,所有信息都会输出到 Gatekeeper 日志中。

如何构建包

可以使用以下命令构建 Gatekeeper Debian 软件包。它们应该从存储库根目录运行,并假定已拉出 git 子模块,并且已安装构建依赖项,如上文所述。Gatekeeper 和子模块将在包构建过程中自动编译。

$ tar --exclude-vcs -Jcvf ../gatekeeper_1.1.0.orig.tar.xz -C .. gatekeeper
$ debuild -uc -us

Gatekeeper 包将在父目录中可用。

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
千万别故意撞:小米SU7无法保证任何情形下都能激活防误踩
南航宣布重大服务改进:值机截载时间缩短至30分钟
南京大学团队取得全钙钛矿光伏组件研究突破
翻倍大涨!阿维塔10月销量10056辆 创历史新高
深读德州丨11年的“字变”与“质变” 德州天衢新区新一代信息技术产业筑链成势

首页

分类

定制方案

消息

我的