Поддерживается как физические, так и виртуальные машины (KVM, VMWare).
Образ подходит для VirtualBox, VMWare ESXi 6.5 и выше.
Скачать OVA-файл.
Импортировать OVA:
Выбрать сети:
После первого запуска и при обновлении (учетная запись: root:mitigator
):
Для VirtualBox: исполнить /usr/local/bin/virtual-box_prepare.sh
, либо поменять адреса сетевых портов вручную (см. ниже).
При обновлении:
cd /srv/mitigator
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
Подробней о назначении файлов можно почитать в инструкции по ручной установке.
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
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: ""
mitigator_arch
: микроархитектура процессора, для которой будет загружена
оптимизированная версия обработчика пакетов: nehalem
, sandybridge
или haswell
(указания по выбору).
mitigator_nic_driver
: драйвер сетевой карты для DPDK
(подробнее о выборе).
Настройки обработчика пакетов:
mitigator_nics
: сетевые порты с указанием PCI-адресов и ядер
процессора. Подразумевается, что они перечислены в порядке ext0,
int0, ext1, int1 и т. д. Портов может быть нечетное количество
и даже один.
mitigator_cpus
: список ядер, применяющих контрмеры (workers)
(в формате python-/yaml-/json- списка строк, например:
["3-7", "12-19", "21-23"]
).
mitigator_nr_addrs
, mitigator_nr_conns
: размеры таблиц проверенных
адресов и отслеживаемых соединений.
mitigator_hugepage_size
: размер страницы (2M
или 1G
);mitigator_hugepage_nr
: количество страниц.mitigator_nr_policies
: максимальное количество политик защиты.
Можно указать версию Mitigator´а
(latest
по умолчанию).
При первом запуске и при mitigator_pull_images: y
будет выполнена загрузка
образов Mitigator´а, для чего нужно задать логин и пароль:
mitigator_registry_user
и mitigator_registry_pass
.
Можно настроить прокси для Docker´а и компонент Mitigator´а.
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
Для опытных администраторов, нестандартных случаев и желающих разобраться.
Нужно обеспечить:
v20.02.3
Оценить последнюю стабильную версию
Выбор: latest
или v20.02
latest
означает последнюю мажорную версию со всеми исправлениями.
Мажорная версия соответствует последней минорной в своих рамках, то есть, если последняя версия v12.34.5, v12.34 тождественна ей.
Жестко зафиксировать версию
Выбор: v20.02.3
Например, если требуется проверить версию в тестовой среде, а затем развернуть
точно такую же на production. Минорные версии не меняются. Первая мажорная
версия обозначается нулем, например, v12.34.0
.
Если доступ к https://docker.mitigator.ru ведется через прокси, необходимо настроить Docker.
В системах под управлением systemd предлагается:
Создать 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
Добавить сертификат прокси в доверенные для 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
Обновить описание службы Docker и перезапустить её:
systemctl daemon-reload
systemctl restart docker
Если 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
Для замены самоподписанного сертификата 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
Симптомы:
при загрузке модуля:
modprobe: FATAL: Module igb_uio not found in directory /lib/modules/4.9.0-6-amd64
при установке пакета:
Module build for kernel 4.9.0-6-amd64 was skipped since the
kernel headers for this kernel does not seem to be installed.
Необходимо установить пакет linux-headers-amd64
(Debian) и убедиться,
что загружена версия ядра, соответствующая версии этого пакета, после
чего выполнить:
dkms autoinstall
По умолчанию эти команды работают только для пользователей группы
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
Далее рекомендуется связаться с разработчиками с целью точной диагностики и исправления, для чего им желательно иметь:
Описание ситуации, в которой произошла проблема (действий с Mitigator´ом, входящего трафика).
Описание аппаратной конфигурации сервера:
Файл /srv/mitigator/data-plane.conf
.
Core dump (слепок памяти процесса), который по умолчанию сохраняется
в /var/lib/docker/volumes/mitigator_coredumps/_data/core
. Его
размер — гигабайты, но он обычно хорошо сжимается.
В некоторых дистрибутивах (например, Ubuntu) файл core
не появляется,
потому что обработка сбоев настроена иначе.
Проверить настройку можно так:
cat /proc/sys/kernel/core_pattern
По умолчанию в Linux значение core
. Если оно другое:
Запомнить исходное значение:
cat /proc/sys/kernel/core_pattern > /tmp/old_core_pattern
Заменить его на core
:
echo core | sudo tee /proc/sys/kernel/core_pattern
Воспроизвести проблему, получить файл core
по указанному выше пути.
Восстановить оригинальное значение:
cat /tmp/old_core_pattern | sudo tee /proc/sys/kernel/core_pattern