
Первая система защиты от DDoS с открытым исходным кодом
Gatekeeper — это первая система с открытым исходным кодом для защиты от DDoS-атак. Она спроектирована так, чтобы масштабироваться до любой пиковой пропускной способности, и может выдерживать DDoS-атаки как сегодняшние, так и будущие. Несмотря на географически распределенную архитектуру Gatekeeper, сетевая политика, описывающая все решения, которые должны применяться к входящему трафику, является централизованной. Эта централизованная политика позволяет сетевым операторам использовать распределенные алгоритмы, которые были бы нежизнеспособны при очень высокой задержке (например, распределенные базы данных), и одновременно бороться с множественными многовекторными DDoS-атаками.
Предполагаемые пользователи Gatekeeper — это сетевые операторы учреждений, поставщиков услуг и контента, корпоративных сетей и т.д. Он не предназначен для использования отдельными пользователями Интернета.
Для получения дополнительной информации см. вики Gatekeeper.
DPDK требует использования огромных страниц; инструкции по монтированию огромных страниц доступны в документации по требованиям. На многих системах достаточно следующей настройки огромных страниц:
$ echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
vfio-pciМодуль ядра Linux vfio-pci необходим для привязки сетевых интерфейсов к DPDK/Gatekeeper.
Чтобы 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" или аналогичными вариациями;
дополнительные примеры можно найти, выполнив поиск "BIOS VT-d" в
Google Images.
В некоторых BIOS может потребоваться включить опцию
"Intel (R) Virtualization Technology" (или её вариации) до того, как VT-d станет доступна.
Чтобы проверить, включена ли VT-d в BIOS, выполните следующую команду после загрузки Linux:
$ dmesg | grep -e DMAR
Если указанная выше команда выводит какие-либо строки, VT-d должна быть включена. В противном случае необходимо вернуться в BIOS и включить её. Дополнительная информация о проверке включения VT-d в BIOS доступна на этой странице.
После включения VT-d в BIOS необходимо убедиться, что ядро поддерживает IOMMU. Обратите внимание, что для поддержки IOMMU требуется версия ядра выше 3.6. Проверить, включен ли 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, находится
здесь.
После включения VT-d в BIOS и поддержки IOMMU ядром, можно проверить, что всё настроено, с помощью одной из следующих команд:
$ ls /sys/kernel/iommu_groups
ИЛИ
$ dmesg | grep -ie 'IOMMU\s\+enabled'
Всё настроено, если выводы указанных выше команд не пусты.
Пакеты Gatekeeper Debian доступны для Ubuntu 24.04 LTS на странице Releases проекта.
После загрузки пакетов их можно установить следующими командами:
$ tar -zxvf gatekeeper-ubuntu-24.04-packages.tar.gz
$ cd gatekeeper-ubuntu-24.04-packages
$ sudo dpkg -i gatekeeper-bird_*_amd64.deb gatekeeper_*_amd64.deb
При установке через пакеты Debian файлы конфигурации Gatekeeper находятся
в /etc/gatekeeper. Вам следует отредактировать как минимум файл net.lua и задать
переменные front_ports, front_ips, back_ports и back_ips в соответствии с
вашим окружением.
Остальные файлы Lua настраивают различные функциональные блоки Gatekeeper. Пожалуйста, обратитесь к вики проекта за дополнительной информацией о том, нужно ли их изменять в вашей конфигурации.
Вам также необходимо отредактировать файл /etc/gatekeeper/envvars и задать
переменную GATEKEEPER_INTERFACES, указав адреса PCI сетевых адаптеров,
которые будут привязаны к DPDK. Их можно найти с помощью команды 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"
В этом же файле можно дополнительно указать
параметры Environmental Abstraction Layer
в переменной DPDK_ARGS и
специфичные для Gatekeeper параметры
в GATEKEEPER_ARGS.
Выполните следующие команды, чтобы запустить Gatekeeper и обеспечить его автоматический запуск при перезагрузках.
$ sudo systemctl start gatekeeper
$ sudo systemctl enable gatekeeper
Установите следующие зависимости программного обеспечения:
$ 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 python3 \
python3-pyelftools libcap-dev libcap2 meson ninja-build pkg-config