Установка ПО DosGate на РЕД ОС 7.3
Системные требования
- Версия Linux Kernel не менее 5.10
- Процессор Intel или AMD не менее 4 ядер
- Не менее 8GB RAM
- Свободная дисковая память от 10 ГБ
Дополнительная информация
- Рекомендованные технические характеристики платформы Досгейт
- Архитектура кластера
- Протестированные операционные системы
1. Компоненты платформы (ПО)
Архитектура платформы основана на операционной системе Linux, и состоит из следующих компонентов:
- DosGate Controller - программа, компилирующая указанный пользователем набор правил в машинный код
- DosGate - программа, содержащая в себе машинный код, которая компилируется и загружается в ядро Linux Kernel с помощью DoSGate Controller
- DosGate Daemon - система, отвечающая за сбор статистики и автоматизированный контроль, загружаемая в Linux Kernel программы DoSGate
1.2 Техническая схема взаимодействия компонентов платформы (ПО)
1.3 Модули системы и их взаимодействие в рамках системы при обработке пакета
1.4 Описание модулей системы
- ПО DoSGate имеет в себе функционал, реализованный модулями на разных частях платформы:
- Арена - набор сетевых интерфейсов, и применяемых к ним настроек (см. настройки dosgate.conf в п. 4)
- Routing Program - программа, определяющая в какой профиль должен быть направлен пакет
- Профиль - набор правил, вводимых администратором, которые применяются к пакету, проходящему через профиль
- Метка - специфичная таблица данных, в которую можно:
- По результату правила - занести информацию
- Занести информацию вручную (с помощью команд)
- Искать по метке и применять определенное действие (в случае, если данные из пакета присутствуют в метке)
- Префикс-сет - таблица данных IP-адресов (CIDR, масок), в которую можно:
- Занести информацию вручную (с помощью команд)
- Искать по префикс-сету и применять определенное действие (в случае, если IP-адрес отправителя или получателя, присутствует в префикс-сете)
2. Подготовка аппартной платформы
2.1 Установка обновлений ОС
sudo dnf update
sudo dnf upgrade
2.2 Подключение репозитория Servicepipe
** Команду необходимо выполнять от пользователя с правами sudo*
curl -o "./setup-repo.sh" "https://public-repo.svcp.io/setup_script/setup-repo.sh" && \
sudo chmod +x "./setup-repo.sh" && \
sudo ./setup-repo.sh
2.3 Настройка сетевых интерфейсов
- При использовании сетевых карт Intel с драйвером ixgbe рекомендуется ограничить кол-во потоков до 24:
ethtool -L eth1 combined 24
- https://www.spinics.net/lists/netdev/msg439438.html
- Если у вас Mellanox, в настройках аппаратных интерфейсов, на которых будет работать DoSGate, рекомендуется произвести настройку XDP
2.4 Перезагрузка сервера
- Требуется совершить перезагрузку ОС, чтобы убедиться что все сетевые интерфейсы настроены корректно
2.5 Установка пакетов, необходимых для работы ПО DosGate
sudo dnf update && sudo dnf install -y clang glibc glibc-devel.i686 libbpf-0.5.0-1.el8 libbpf-0.5.0-1.el8 libbpf-devel-0.5.0-1.el8.x86_64
3. Установка DoSGate
sudo dnf install -y libdt-1.2.0.1-1.el7 libaevent-0.1.1.3-1.el7 dosgate-3.2.3.1-1.el7
3.1 Настройка конфигурационных файлов
- Досгейт имеет единый конфигурационный файл:
/etc/dosgate.conf
- Он вызывается при каждом запуске ПО и требует настройки
- Его необходимо сконфигурировать до проверки однократного запуска
- Подробнее, о его настройке - можно прочитать в п.4
3.2 Однократный запуск DoSGate
- Используя команду:
dosgate -o -l err
- Требуется для проверки того, что dosgate запустился без каких-либо ошибок
3.3 Настройка модуля collectd
- В dosgate.conf, согласно документации, требуется указать hostname, на который dosgate будет отправлять статистику (collectd hostname)
- Рекомендованный плагин для связки с Graphite: write_graphite
- Настройки модуля collectd осуществляются в рамках самого модуля collectd
- Подробная настройка collectd и систем визуализации находится в п.5
3.4 Запуск DoSGate
Измените строку ExecStart=dosgate -f на ExecStart=dosgate -f -l crit
sed -i 's/dosgate -f/dosgate -f -l crit/' /usr/lib/systemd/system/dosgate.service
# Примените изменения
systemctl daemon-reload
# Запустите dosgate
systemctl start dosgate
# Если требуется, активируйте автоматический запуск сервиса Досгейт после перезапуска ОС
systemctl enable dosgate
4. Настройка dosgate.conf
- Для доступа к командам управления производится аутентификация по SSH.
- Все функции ПО используются за счет взаимодействия с командой:
dgctl
4.1 Основной конфигурационный файл dosgate.conf
Файл настройки по умолчанию расположен в /etc/dosgate.conf
Файл написан в формате YAML и содержит следующие блоки:
socket_conf
arena_conf
collectd
Для валидации корректности синтаксиса YAML, можно, например, использовать сайт https://www.yamllint.com
4.1.1 Блок socket_conf
- Блок socket_conf имеет значения по умолчанию сразу после установки пакета. Он настроен для использования и работы с CLI
Пример конфигурации блока
sockets:
url: /run/dosgate/api.socket
user: nowhere
group: www-data
mode: 0660
acl: any
type: SCGI
url: /run/dosgate/fapi.socket
user: nowhere
group: www-data
mode: 0660
acl: any
type: FCGI
timeout:
send: 10
idle: 10
url: /run/dosgate/crlf.socket
user: nowhere:www-data
mode: 0660
acl: any
type: CRLF
timeout:
idle: 10
send: 10
url: /run/dosgate/cli.socket
user: root:dosgate
mode: 0660
acl: any
type: CLI
timeout:
idle: 10
send: 10
Описание блока socket_conf
- URL
- User
- Group
- Mode
- ACL
- Type
- Timeout
Синтаксис URL, и значение полей
URL в формате family://address
, где family
- одно из значений family сокета:
- unix - UNIX сокет на файловой системе сервера. В качестве адреса указывается полный путь
- tcp - TCP сокет. В качестве адреса указывается строка
host:port
, или:port
. В последнем случае будет прослушиваться адрес 0.0.0.0 (::)
Если URL представляет собой строку без family
, то она предполагается из формата, а сама строка используется в качестве адреса:
- Если строка начинается на '/', то подразумевается family = unix
- Если строка содержит ":", то подразумевается family = tcp
User
user: user
- Имя пользователя. Если пользователь не существует, то используется пользователь, от имени которого выполняется процесс (root). Актуально только для сокетов UNIX.
Group
group: group
- Группа. Если группа не существует, то используется первичная группа пользователя, от имени которого выполняется процесс (root). Актуально только для сокетов UNIX.
Mode
Mode: mode
- Режим доступа, (см. chmod). Актуально только для сокетов UNIX
ACL
acl: acl
- Список контроля доступа. Перечисленные через запятую разрешенные target (см. CLI и API) или "any"
- target - список частей системы, куда есть доступ, например: profile, router, arena, mark, pset, и др.
Type
type: type
Тип протокола/диалекта для сокета:
- FCGI - FastCGI протокол, полный диалект
- SCGI - SCGI протокол, полный диалект
- CRLF - raw протокол, полный диалект
- CLI - raw протокол, диалект CLI
RAW - протокол предполагает, что запрос оканчивается или последовательностью CRLF, или закрытием сокета в направлении сервера. Ответ так же оканчивается CRLF или окончательным закрытием сокета
Для того чтобы CLI мог посылать запросы, должен присутствовать хотя бы один сокет CLI с family UNIX и адресом "/run/dosgate/cli.socket"
Timeout
timeout:
idle: idle
send: send
- Указываются в секундах. При отсутствии настройки - таймаута нет
- Таймаут указывается на ответ dosgate на выполненную команду
4.1.2 Блок arena_conf
- Данный блок не имеет значений по умолчанию. Его обязательно настраивать
- Пример с VLAN swap и возвратом в том-же интерфейсе (outline): https://pastebin.com/raw/1DUh7azB
- Пример inline инсталляции с возвратом трафика в др. интерфейсе, и обратным трафиком через Досгейт: https://pastebin.com/raw/s74cbjCJ
- Пример inline инсталляции с возвратом трафика в др. интерфейсе, и обратным трафиком через Досгейт с LACP: https://pastebin.com/raw/RaGtsEjA
Синтаксис, и значение полей
Arenas
- Набор сетевых интерфейсов и настроек обработки и возврата трафика
name (arena)
- Уникальное имя арены
ID
- Уникальный ID арены (обязателен с 3.2.2-5)
Name (nets)
- Имя сетевого интерфейса, как показывает ip link. Обязательное поле
VID
- VLAN id. Число от 0 до 4095. 0 означает отсутствие тега
Protocol
- Протокол VLAN. Либо hex-число в формате 0x0000, либо мнемоническое значение:
Тэг | Значение |
---|---|
802.1q, 8021q, q | 0x8100 |
802.1ad, 8021ad, ad | 0x88A8 |
802.1ah, 8021ah, ah | 0x88E7 |
q-in-q, qq, qinq | 0x9100 |
q-in-q1, qq2, qinq2 | 0x9200 |
q-in-q3, qq3, qinq3 | 0x9300 |
MAC
- MAC-адрес в одной из форм:
xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx
- Где x - шестнадцатеричная цифра
RX block
- Блок, описывающий способ обработки входящего трафика. Должен присутствовать всегда
mode: rx_mode
swap: swap
inline: inline
- Если в блоке указан MAC-адрес, то обрабатывается только трафик с этим destination address
RX mode
Режим обработки входящего трафика:
vlan
- обрабатывается только трафик в указанном VLAN, остальной пропускается в ОС. Если VID = 0 или не указан, обрабатывается только нетегированный трафикtransparent
- обрабатывается трафик во всех VLAN + нетегированный. Используется по умолчанию
Swap
- Указывает, нужно ли менять MAC-адреса во фрейме при отправке. Если указано
false
или0
, то адреса не меняются. В противном случае (если значение не указано) - они меняются местами
Inline
- Интерфейс работает в inline-режиме, то есть он невидим для других хостов в сети. ARP-запросы, широковещательные запросы, STP/GVRP/etc не передаются в ОС. Если опция не указана, то интерфейс пересылает этот трафик в ОС
TX block
- Описывает политику обработки трафика, который должен быть переслан в соответствии с окончанием обработки правилами или срабатывании действия ACCEPT. Если не указан, то копируется из блока RX, а отсутствующие в нём параметры принимают значения по умолчанию.
mode: rx_mode
cos: cos
- Если в блоке указан MAC-адрес, то трафик пересылается на него. В противном случае он отправляется на тот адрес, с которого был получен
Mode
Режим обработки исходящего трафика:
swap
- меняется последний в стеке тег VLAN, или добавляется если трафик нетегированный. Если VID отсутствует, то пакет не меняется, если равен 0, то верхний тег снимается при наличии. Используется по умолчаниюpush
- новый тег добавляется безусловно, даже если последний был точно таким же. Если VID = 0 или отсутствует, то ничего не добавляется.
CoS
- Класс сервиса в тегированных пакетах. Число от 0 до 7
TX-policy
Параметр "tx-policy" в разделе конфигурации "rx:" управляет обработкой следующих классов трафика:
- lacp — медленный протокол LACP
- llm — IEEE802.1 Link-local multicast, предназначенная для 01:80:C2:00:00:x
- multicast - Любой L2 multicast, кроме link-local
- unknown - unhandled ethertypes
Например, если параметр LACP отсутствует, то LACP будет передан в ОС Досгейта, а не в TX-интерфейс.
4.1.3 Блок collectd
hostname: msk-dl-srv2.dosgate
period: 10
- В dosgate.conf указывается частота записи метрик в collectd — period и имя хоста, который будет использоваться для именования метрик (hostname)
4.1.4 Reply block
- Описывает политику обработки трафика, который должен быть переслан в соответствии с правилами, которые генерируют собственный трафик в ответ на входящий пакет
- Если не указан, то копируется из блока TX. Формат полностью соответствует формату блока TX
5. Настройка инструментов визуализации
** Включает 2 этапа: **
Установка и конфигурация collectd для сбора аналитики;
Установка и конфигурация локального Graphite или подключение внешнего Graphite в collectd;
5.1 Установка collectd
Установка пакета через APT для Ubuntu 22.04:
sudo dnf install -y collectd-5.12.0-1.el7
5.1.1 Настройка collectd
Файл /etc/collectd.conf должен содержать только эту информацию:
FQDNLookup true
TypesDB "/usr/share/collectd/types.db"
LoadPlugin logfile
LoadPlugin syslog
<Plugin logfile>
LogLevel "info"
File STDOUT
Timestamp true
PrintSeverity false
</Plugin>
<Plugin syslog>
LogLevel info
</Plugin>
<Include "/etc/collectd.d">
Filter "*.conf"
</Include>
Файл /etc/collectd.d/dosgate.conf должен содержать только эту информацию:
LoadPlugin write_graphite
<Plugin write_graphite>
<Node "localhost">
Host "127.0.0.1" ## Заменяется на адрес внешнего Graphite при необходимости
Port "2003"
Protocol "tcp"
</Node>
</Plugin>
LoadPlugin unixsock
<Plugin unixsock>
SocketFile "/var/run/collectd-unixsock"
SocketPerms "0660"
DeleteSocket false
</Plugin>
TypesDB "/etc/collectd.d/dosgate-types.db"
Файл /etc/collectd.d/dosgate-types.db должен содержать только эту информацию:
dgstats packets:COUNTER:0:U bytes:COUNTER:0:U
5.1.2 Запуск collectd
sudo systemctl restart collectd
systemctl status collectd # Убедиться что всё запустилось
systemctl enable collectd
5.1.3 Добавление collectd в /etc/dosgate.conf
collectd:
hostname: dosgate # Если вы устанавливаете DosGate в кластере, название должно быть уникально для платформы
period: 10
5.1.4 Перезапуск dosgate, проверка записи метрик
sudo systemctl restart dosgate
sudo systemctl status dosgate
# В логе должно появиться сообщение "[dg_collectd_sender.c:70, GLOB] Collectd send success"
5.2 Установка Graphite
Установка стека Graphite не тестировалась на РЕД ОС Linux, рекомендуемая установка - на отдельном сервере на базе Ubuntu
Пункт 5.2 инструкции по установке DosGate