Установка Mitigator

Предполагается размещать все файлы в рабочем каталоге /srv/mitigator:

mkdir -p /srv/mitigator
cd /srv/mitigator

Примеры конфигураций подходят для системы в минимальной комплектации (4 ядра, 8 ГБ памяти, два сетевых интерфейса для данных, один для управления) и рассчитаны на 100 политик защиты (пропускная способность зависит от типа интерфейсов и характера трафика).

1. Docker Compose

  1. Поместить базовую конфигурацию Docker Compose в рабочий каталог:

    wget https://docker.mitigator.ru/dist/docker-compose.yml
    
    1. Скачать базовый файл переменных и сохранить его под именем .env:
    wget https://docker.mitigator.ru/dist/env -O /srv/mitigator/.env
    

    В нем можно задать:

    • версию системы;
    • микроархитектуру процессора для лучшей производительности;
    • максимальное количество политик защиты;
    • прокси для сервера лицензий (ls.mitigator.ru), почтовых уведомлений и службы «Весточка»;
    • часовой пояс;
    • токен взаимодействия бэкенда и подсистемы детектирования.

    Подробно эти настройки описаны внутри файла-примера.

2. Обработчик пакетов

Создать файл data-plane.conf, описывающий параметры запуска обработчика пакетов. Возможно запросить его у разработчиков, сообщив им конфигурацию сервера, но можно сделать это и на основе шаблона:

wget https://docker.mitigator.ru/dist/data-plane.conf

Размеры таблиц

Регулируются две величины:

  1. Количество адресов, которые могут одновременно считаться обработчиком пакетов проверенными (размер таблицы адресов). Это должна быть степень двойки, количество адресов будет 75 % от указанного. На адрес нужно 16 байтов. Минимальная конфигурация использует таблицу размером 217 записей (2 МБ), то есть на 100 тыс. адресов:

    define($tcp_flood_cache_size 131072);
    
    1. Количество одновременно отслеживаемых соединений TCP (размер таблицы соединений). Это должна быть степень двойки, которая определяет параметр непосредственно. На соединение нужно около 100 байтов. Минимальная конфигурация допускает 1 млн. соединений (около 120 МБ):
    define($tcpconntable_size 1048576);
    

Все политики защиты используют таблицы совместно (отдельные записи принадлежать политикам). Таблицы расходуют память, отведенную на hugepages.

Распределение нагрузки по ядрам

В строке под комментарием /* Worker lcore list */ перечисляются ядра, осуществляющие анализ и фильтрацию трафика (нумерация с нуля). В строках под комментарием /* Ports */ указывается, какие ядра вычитывают трафик из соответствующих портов.

Сетевые порты перечисляются парами «внешний, внутренний»: ext0, int0, ext1, int1.

Для распределения нагрузки спользуются следующие правила и соображения:

  • Ядро 0 всегда отводится под управление, указывать его где-либо в этом файле запрещено.

  • Из каждого порта вычитывать данные должно отдельное ядро, не задействованное для других задач. Настоятельно рекомендуется, чтобы это ядро относилось к тому же NUMA-узлу, что и PCI-устройство, с которым оно работает.

    Узнать NUMA-узлы ядер:

    lscpu | grep NUMA
    

    Узнать NUMA-узел устройства 0000:00:06.0:

    cat /sys/bus/pci/devices/0000:00:06.0/numa_node
    

    Значение -1 означает узел 0.

  • Не рекомендуется задействовать для обработки пакетов (wlcores) ядра, работающие с портами. При включенном HyperThreading следует также исключить логические ядра, находящиеся на одном физическом с ядрами, работающими с портами (то есть парные им, включая ядро 0).

Нарушение любого из этих соображений может критически снизить производительность, но допускается, если ядер мало (кроме особой роли ядра 0).

3. Привязка драйверов к сетевым портам

Перед запуском Mitigator´а отведенные ему сетевые порты должны быть под управлением драйвера, выбранного при подготовке системы.

Для систем под управлением systemd предлагается выполнять привязку перед запуском службы Mitigator´а (см. следующий пункт).

  • Загрузить скрипт привязки и сделать его исполняемым:

    wget https://docker.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 uio_pci_generic 0000:06:00.3 0000:06:00.2
    

    В нем запуск утилиты для привязки интерфейсов к драйверу. В параметрах драйвер и PCI-адреса. Их нужно заменить на актуальные драйвер и PCI-адреса.

    4. Загрузка образов и запуск

    Mitigator запускается командой docker-compose up -d.

    Для систем под управлением systemd предлагается настроить готовую службу:

    wget https://docker.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´а будет доступен по адресу интерфейса управления.