Установка BIFIT Mitigator

Системные требования

Поддерживается как физические, так и виртуальные машины (KVM, VMWare).

Поддержка

1. Виртуальная машина

Образ подходит для VirtualBox, VMWare ESXi 6.5 и выше.

  1. Скачать OVA-файл.

  2. Импортировать OVA:

    • VMWare ESXi: Virtual Machines → Create/Register VM → Deploy a virtual machine from an OVF or OVA file
    • VirtualBox: File → Import Appliance
  3. Выбрать сети:

    • Management network — сеть управления;
    • External network — внешняя сеть с клиентами и атакующими;
    • Internal network — внутренняя сеть с защищаемыми ресурсами.
  4. После первого запуска и при обновлении (учетная запись: root:mitigator):

    • Для VirtualBox: исполнить /usr/local/bin/virtual-box_prepare.sh, либо поменять адреса сетевых портов вручную (см. ниже).

    • При обновлении:

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

    • systemctl restart mitigator

Подробней о назначении файлов можно почитать в инструкции по ручной установке.

**Смена сетевых портов для VirtualBox**\ \ Гипервизоры дают разные PCI-адреса сетевым портам. Конфигурация в OVA рассчитана на VMWare, а для VirtualBox нужно изменить её:
for e in s/0b:00.0/00:09.0/ s/13:00.0/00:0a.0/; do
    for f in /etc/systemd/system/mitigator.service.d/nics.conf /srv/mitigator/data-plane.conf; do
        sed -e ${e} -i ${f}
    done
done
systemctl daemon-reload

2. Ansible

Playbook работает для Debian 9 и 10, Ubuntu 16.04+, CentOS 7.2. Необходим доступ от целевой машины к репозитариям дистрибутива

1. Установить Ansible (пример для Debian/Ubuntu):

sudo apt-get --yes install ansible tar wget

2. Установить Docker и Docker-Compose:

Следуя официальной документации по установке для вашей ОС:

Если в системе отсутствует /etc/docker/daemon.json, будет установлен следующий:

{
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "50m",
      "max-file": "2"
    }
}

Существующий файл изменен не будет, в этом случае следует совместить конфигурации вручную.

3. Скачать и распаковать необходимые файлы:

wget https://docs.mitigator.ru/ansible/mitigator.tar -O- | tar -x
wget https://docs.mitigator.ru/ansible/config.yml -O mitigator/config.yml

4. Отредактировать mitigator/config.yml (параметры по умолчанию годятся для минимальной конфигурации):

---
mitigator_arch: "nehalem"
mitigator_nic_driver: uio_pci_generic
mitigator_nics:
- pci_address: "0000:0b:00.0"
  lcore: 1
- pci_address: "0000:13:00.0"
  lcore: 2
mitigator_cpus: ["3"]
mitigator_nr_addrs: 131072
mitigator_nr_conns: 1048576
mitigator_hugepage_size: "2M"
mitigator_hugepage_nr: 1536
mitigator_nr_policies: 100

#mitigator_version: latest

mitigator_registry_user: guest
mitigator_registry_pass: mitigator
mitigator_pull_images: y

#mitigator_http_proxy: ""
#mitigator_https_proxy: ""
#mitigator_no_proxy: ""

5. Развернуть Mitigator на целевую машину mitigator.local, куда есть доступ по SSH:

ansible-playbook --become --ask-become-pass \
    -i mitigator.local, mitigator/mitigator.yml

Запятая после имени хоста — не опечатка. Если имя пользователя SSH отличается от локального, например, login, добавляется параметр -u login.

--become и --ask-become-pass используются для повышения привилегий, когда подключение осуществляется не напрямую через пользователя root (необходимо для выполнения части задач в процессе инсталяции).

В конце установки машина перезагрузится.

Playbook безопасно исполнять повторно в случае проблем.

Дополнение

1. Задания в роли ансибла разделены на 4 «тега»: checks, system, hugepages, mitigator.

Задания под тегом, соответственно, предназначены для проверки конфигурации, настройки системы, настройки hugepages и настройки непосредственно Mitigator´а. При необходимости перезапустить роль и перенастроить установку только частично, можно запустить playbook с необходимым набором тегов, например:

ansible-playbook --become --ask-become-pass \
    --tags "system,hugepages" \
    -i mitigator.local, mitigator/mitigator.yml

2. Конфигурацию GRUB2 под UEFI на RHEL/CentOS необходимо дополнительно перегенерировать вручную:

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

Для CentOS redhat заменить на centos

3. Вручную

Установка вручную

Для опытных администраторов, нестандартных случаев и желающих разобраться.

Подготовка системы

Нужно обеспечить:

Настройка и запуск Mitigator

  1. Разместить compose-файл и задать глобальные параметры системы.
  2. Настроить использование сетевых портов и ядер ЦП обработчиком пакетов.
  3. Автоматизировать привязку драйверов к сетевым портам и запуск Mitigator´а.
  4. Скачать Docker-образы Mitigator´а.

4. Выбор версии

Новейшая: v20.02.3

Как выбрать версию по задаче?

Оценить последнюю стабильную версию

Выбор: latest или v20.02

latest означает последнюю мажорную версию со всеми исправлениями.

Мажорная версия соответствует последней минорной в своих рамках, то есть, если последняя версия v12.34.5, v12.34 тождественна ей.

Жестко зафиксировать версию

Выбор: v20.02.3

Например, если требуется проверить версию в тестовой среде, а затем развернуть точно такую же на production. Минорные версии не меняются. Первая мажорная версия обозначается нулем, например, v12.34.0.

5. Расширенные настройки

Работа через прокси

Docker

Если доступ к https://docker.mitigator.ru ведется через прокси, необходимо настроить Docker.

В системах под управлением systemd предлагается:

  1. Создать drop-in к службе Docker´а с указанием прокси в окружении (детали подключения к прокси заменить на актуальные):

    mkdir -p /etc/systemd/system/docker.service.d
    cat >/etc/systemd/system/docker.service.d/proxy.conf <<END
    [Service]
    Environment=HTTP_PROXY=http://user:password@proxy.local:1234
    Environment=HTTPS_PROXY=http://user:password@proxy.local:1234
    Environment=NO_PROXY=docker.local
    END
    
  2. Добавить сертификат прокси в доверенные для Docker´а (/path/to/proxy.crt заменить на путь к сертификату прокси):

    mkdir -p /etc/docker/certs.d/docker.mitigator.ru
    cp /path/to/proxy.crt /etc/docker/certs.d/docker.mitigator.ru
    
  3. Обновить описание службы Docker и перезапустить её:

    systemctl daemon-reload
    systemctl restart docker
    

Mitigator

Если Mitigator будет сообщаться с сервером лицензий (ls.mitigator.ru), почтовым сервером и службой «Весточка» через прокси, нужно указать переменные окружения. Для этого нужно создать файл docker-compose.override.yml с таким содержимым:

version: "2.1"

services:
    backend:
        environment:
            HTTP_PROXY: "http://user:password@proxy.local:3128"
            HTTPS_PROXY: "http://user:password@proxy.local:3128"

При необходимости задать также NO_PROXY (адреса, к которым нужно обращаться без прокси), требуется включать в нее .mitigator и localhost:

NO_PROXY: "<новые серверы>,.mitigator,localhost"

После этого нужно перезапустить службу бэкенда:

docker-compose up -d backend

Собственный сертификат TLS

Для замены самоподписанного сертификата cert.crt с ключом cert.key на собственный, необходимо смонтировать сертификат и ключ через /srv/mitigator/docker-compose.override.yml:

version: "2.1"
services:
    nginx:
        volumes:
        - example.com.crt:/etc/nginx/cert.crt:ro
        - example.com.key:/etc/nginx/cert.key:ro

После этого нужно перезапустить службу Nginx:

docker-compose up -d nginx

6. Troubleshooting

Не загружаются драйверы (modprobe)

Симптомы:

Необходимо установить пакет linux-headers-amd64 (Debian) и убедиться, что загружена версия ядра, соответствующая версии этого пакета, после чего выполнить:

dkms autoinstall

Не работает docker и docker-compose

По умолчанию эти команды работают только для пользователей группы docker и для root. Это стандартная мера безопасности Docker. Решение:

sudo usermod -aG docker $USER
newgrp docker

Обработчик пакетов недоступен

Такое сообщение появляется в web-интерфейсе, если обработчик пакетов не запустился или остановился. Диагностика (из /srv/mitigator):

docker-compose logs data-plane

Ниже приводятся некоторые типовые проблемы и характерные сообщения.

EAL: Cannot get hugepage information.

Сообщение:

EAL: No free hugepages reported in hugepages-2048kB
EAL: No free hugepages reported in hugepages-1048576kB
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
EAL: Error exiting with code: 1
  Cause: DPDK init error: 1

Причина: не выделены или полностью заняты hugepages.

Нужно проверить наличие свободных hugepages и убедиться, что значения HugePages_Total и Hugepagesize совпадают с настроенными, а HugePages_Free равно HugePages_Total (или отличается не более, чем на несколько страниц):

grep Huge /proc/meminfo

no port found with PCI address BB:DD.F

Сообщение:

/data-plane/config.click:12: While configuring 'ext0::PortDev':
  no port found with PCI address 04:00.0

Нужно убедиться, что адрес устройства 04:00.0 соответствует действительности и что устройство привязано к драйверу для DPDK точно так же, как при подготовке системы.

Аварийное завершение

При просмотре логов docker-compose logs data-plane сообщение:

Segmentation fault (core dumped)

Чтобы незамедлительно восстановить работу, можно дать команду:

docker-compose up -d data-plane

Далее рекомендуется связаться с разработчиками с целью точной диагностики и исправления, для чего им желательно иметь:

  1. Описание ситуации, в которой произошла проблема (действий с Mitigator´ом, входящего трафика).

  2. Описание аппаратной конфигурации сервера:

    • модель ЦП и сетевых карт;
    • размер памяти и конфигурация hugepages;
    • версия ядра Linux, используемые драйвера для сетевых карт и их версии.
  3. Файл /srv/mitigator/data-plane.conf.

  4. Core dump (слепок памяти процесса), который по умолчанию сохраняется в /var/lib/docker/volumes/mitigator_coredumps/_data/core. Его размер — гигабайты, но он обычно хорошо сжимается.

    В некоторых дистрибутивах (например, Ubuntu) файл core не появляется, потому что обработка сбоев настроена иначе. Проверить настройку можно так:

    cat /proc/sys/kernel/core_pattern
    

    По умолчанию в Linux значение core. Если оно другое:

    1. Запомнить исходное значение:

      cat /proc/sys/kernel/core_pattern > /tmp/old_core_pattern
      
    2. Заменить его на core:

      echo core | sudo tee /proc/sys/kernel/core_pattern
      
    3. Воспроизвести проблему, получить файл core по указанному выше пути.

    4. Восстановить оригинальное значение:

      cat /tmp/old_core_pattern | sudo tee /proc/sys/kernel/core_pattern