Предполагается размещать все файлы в рабочем каталоге /srv/mitigator
:
mkdir -p /srv/mitigator
cd /srv/mitigator
Примеры конфигураций подходят для системы в минимальной комплектации (4 ядра, 8 ГБ памяти, два сетевых интерфейса для данных, один для управления) и рассчитаны на 100 политик защиты (пропускная способность зависит от типа интерфейсов и характера трафика).
Поместить базовую конфигурацию Docker Compose в рабочий каталог:
wget https://docs.mitigator.ru/dist/docker-compose.yml
Скачать базовый файл переменных и сохранить его под именем
.env
:
wget https://docs.mitigator.ru/dist/env -O /srv/mitigator/.env
В нем можно задать:
Подробно эти настройки описаны внутри файла-примера.
Для максимальной производительности Mitigator нужно использовать сборку, оптимизированную под конкретный процессор.
В файле .env
должна быть строка вида:
ARCH=haswell
Доступные варианты: nehalem
, sandybridge
, haswell
. Если не указана
ARCH
, используется nehalem
.
Свой процессор можно найти в каталоге Intel,
микроархитектура указана в строке Code Name.
Если в перечне доступных нет нужной, воспользуйтесь диаграммой,
например, для Xeon E5-2680 v4 (Broadwell) оптимальна haswell
.
Необходимо создать файл data-plane.conf
, описывающий параметры запуска обработчика
пакетов:
touch data-plane.conf
Файл настроек по умолчанию пустой. Править его требуется только если нужно указать настройки, отличные от выбранных автоматически. Описание настроек.
Порты в приложении называются ext0
, int0
, ext1
, int1
и т.д. ext
— порты
внешней сети, int
— порты внутренней (защищаемой) сети. Объединяются в ext-int пары по
индексу в названии. ext-int пары портов используются для маршрутизации трафика в схеме
включения «в разрыв». В схеме включения «on-a-stick» ext-int пары не используются и могут
быть любыми.
Если порты не заданы в настройках, используются все порты в системе, доступные DPDK. В таком случае, порты перечисляются в порядке возрастания их PCI-адресов. ext-int пары портов формируются только для портов с общей NUMA-ноды.
Если порядок перечисления портов по умолчанию не совпадает с физическим подключением линков, либо требуется ограничить список используемых портов, порты можно настроить явно:
ext0: 04:00.1
int0: 04:00.0
ext1: 84:00.1
int1: 84:00.0
Портов может быть нечетное количество.
Настраивается автоматически. Настройки можно задать явно, если требуется.
Предварительная информация:
Номера ядер на каждой NUMA-ноде (на примере двухпроцессорной системы):
$ lscpu | grep NUMA
NUMA node(s): 2
NUMA node0 CPU(s): 0-11,24-35
NUMA node1 CPU(s): 12-23,36-47
Команда likwid-topology -g
(пакет hwloc
в Debian) отображает топологию
процессора в наглядном виде.
NUMA-ноды, к которым относятся сетевые карты:
$ cat /sys/bus/pci/devices/0000:04:00.0/numa_node
0
$ cat /sys/bus/pci/devices/0000:84:00.0/numa_node
1
Если логическое ядро отведено для чтения трафика из порта (IO-ядро), hyperthread-парное ему логическое ядро не должно быть нагружено.
Ядро 0 зарезервировано для управления и далее не используется, как и парное ему ядро 24.
Для портов 10 GbE достаточно по одному ядру на порт с той же NUMA-ноды:
ext0: 04:00.1
cores: 1
int0: 04:00.0
cores: 2
ext1: 84:00.1
cores: 12
int1: 84:00.0
cores: 13
Для портов 40 GbE нужно 3 ядра, для портов 100 GbE — 6 ядер:
ext0: 04:00.1
cores: 1-3
На каждое ядро создается отдельная очередь приема, трафик между очередями распределяется аппаратным RSS на сетевой карте.
Группу ядер можно назначить сразу нескольким портам. Это может быть полезно при включении «в разрыв», когда атаки приходят на ext-порты, а нагрузка на int небольшая:
port_cores: 1-2
ext0: 04:00.1
int0: 04:00.0
Перед запуском Mitigator´а отведенные ему сетевые порты должны быть под управлением драйвера, выбранного при подготовке системы.
Для систем под управлением systemd предлагается выполнять привязку перед запуском службы Mitigator´а (см. следующий пункт).
Загрузить скрипт привязки и сделать его исполняемым:
wget https://docs.mitigator.ru/dist/dpdk-devbind \
-O /usr/local/bin/dpdk-devbind
chmod +x /usr/local/bin/dpdk-devbind
Создать каталог /etc/systemd/system/mitigator.service.d
:
mkdir -p /etc/systemd/system/mitigator.service.d
В нем разместить файл nics.conf
такого вида:
[Service]
ExecStartPre=/usr/local/bin/dpdk-devbind -b vfio-pci 0000:06:00.3 0000:06:00.2
Драйвер и PCI-адреса заменить на необходимые.
Mitigator запускается командой docker-compose up -d
.
Для систем под управлением systemd предлагается настроить готовую службу:
Разместить файл службы Mitigator´а:
wget https://docs.mitigator.ru/dist/mitigator.service \
-O /etc/systemd/system/mitigator.service
Настроить автозапуск Mitigator´а:
systemctl enable mitigator
При первом запуске или обновлении нужно совершить вход в хранилище образов со своими учетными данными:
docker login docker.mitigator.ru
Запустить Mitigator:
systemctl start mitigator
При первом запуске понадобится некоторое время для загрузки
образов. Процесс можно наблюдать в выводе docker-compose logs -f
или, для systemd:
journalctl -u mitigator -f
Спустя некоторое время, web-интерфейс Mitigator´а будет доступен по адресу интерфейса управления.