Установка веб-интерфейса SP Spider

Инструкции по установке для Российских ОС

Компоненты

Основные

  • sp-spider - веб-интерфейс для ПО DosGate
  • sp-spider-broker - брокер синхронизации для ПО DosGate

Вспомогательные

  • PostgreSQL, СУБД
  • NodeJS, среда выполнения JavaScript
  • RabbitMQ, брокер сообщений

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

  • Поддерживаемая версия DosGate: 3.2.2-5 и выше (для версий до 3.9.8)
  • Поддерживаемая версия DosGate: 3.4.2-1 и выше (для версий с 3.9.9)

Установка обновлений ОС

sudo apt-get update
sudo apt-get upgrade

Установка NodeJS

sudo apt install nodejs=18.18.2-1nodesource1

Установка PostgreSQL

sudo apt install -y libpq-dev postgresql

Настройка PostgreSQL

sudo nano /etc/postgresql/14/main/pg_hba.conf

#Убедитесь, что присутствует запись
host    all             all             127.0.0.1/32            scram-sha-256

Проверить можно командой:

cat /etc/postgresql/14/main/pg_hba.conf | grep "host    all             all             127.0.0.1/32            scram-sha-256"

Создайте таблицу и пользователя:

sudo -u postgres psql
CREATE DATABASE dosgate;
CREATE USER dosgate WITH ENCRYPTED PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE dosgate TO dosgate;
\q

Установка rabbitmq (rmq)

Создайте скрипт установки

sudo nano quickrabbitmq.sh

Внесите содержимое скрипта:

#!/bin/sh

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://ppa1.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://ppa1.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null

## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main

## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF

## Update package indices
sudo apt-get update -y

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

Выполните скрипт и установите rmq

sudo bash quickrabbitmq.sh

Настройка rabbitmq

Создайте пользователя rmq

sudo rabbitmqctl add_user "username" "password"

Выдайте пользователю доступ configure, write, и read для всех entity

sudo rabbitmqctl set_permissions -p "/" "username" ".*" ".*" ".*"

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

Увеличение "TimeoutStartSec" (необязательно)

Если ваша конфигурация состоит более чем из 25 профилей, в зависимости от операционной системы, рекомендуется обновить настройки сервиса dosgate

Добавьте в systemd сервиса опцию TimeoutStartSec=600 (600 секунд)

sudo nano /lib/systemd/system/dosgate.service

[Unit]
Description=Dosgate anti-ddos controller
After=network.target
ConditionPathExists=/etc/dosgate.conf

[Service]
Type=notify
ExecStart=dosgate -f -l crit
RuntimeDirectory=dosgate
StateDirectory=dosgate
TimeoutStartSec=600

[Install]
WantedBy=multi-user.target

Настройка dosgate.conf

Убедитесь, что внутри /etc/dosgate.conf есть настроенный FAPI.socket. Именно с ним взаимодействует веб-интерфейс:

- url: /run/dosgate/fapi.socket
  user: www-data
  group: www-data
  mode: 0660
  acl: any
  type: FCGI
  timeout:
    send: 120
    idle: 120

Добавьте сервис проверки прав fapi-socket

chmod 660 /run/dosgate/fapi.socket
sudo service dosgate restart
sudo nano /etc/systemd/system/fix_fapi.service
[Unit]
Description=Run fix fapi-socket at startup after all systemd services
After=default.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=chmod 660 /run/dosgate/fapi.socket
TimeoutStartSec=0

[Install]
WantedBy=default.target
systemctl enable --now /etc/systemd/system/fix_fapi.service

Создание SSH-пользователя

Для синхронизации и дополнительных проверок, веб-интерфейс соединяется по SSH с каждой системой-dosgate

Убедитесь что на каждой системе-dosgate есть настроенный SSH-пользователь с доступом к sudo.

На данный момент, авторизация возможна только через логин и пароль, убедитесь что подключение по SSH по паролю к этому пользователю разрешено

sudo adduser dosgate-web
sudo usermod -aG sudo dosgate-web

Настройка nginx

Если Graphite работает в рамках той-же аппаратной платформы, проверяем что он не занимает порт 80 или 443, и не будет конфликтовать с интерфейсом:

sudo nano /etc/nginx/sites-available/graphite

Должно быть:

listen 8080 default_server;
listen [::]:8080 default_server;

Если установлен 80 или 443 порт, требуется изменить на 8080, также требуется поменять параметры Data Source в Grafana (если используется)

Обновите систему, установите NGINX

sudo apt update
sudo apt upgrade
sudo apt install nginx=1.26.2-1~jammy-servicepipe-20241111.162950.UTC

Удалите стандартную конфигурацию NGINX

sudo rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

Настройте конфигурацию fapi в NGINX

sudo nano /etc/nginx/sites-available/fapi.conf

Поместите внутрь fapi.conf следующую информацию (не забудьте заменить REPLACE_ON_DOMAIN_OR_IP):

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  server_name REPLACE_ON_DOMAIN_OR_IP;
  root /var/www/html;
  index index.php;

  location /fapi {
    include fastcgi_params;
    fastcgi_pass  unix:/run/dosgate/fapi.socket;
  }

  location /broker {
    rewrite ^/broker(.*)$ $1 break;
    proxy_pass http://localhost:3335;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
  }
}

Создайте link

sudo ln -s /etc/nginx/sites-available/fapi.conf /etc/nginx/sites-enabled

Перезапустите Nginx

sudo systemctl restart nginx

Настройка сети

Убедитесь, что веб-интерфейс имеет связанность до каждой системы-dosgate

Установка веб-интерфейса и брокера синхронизации

sudo apt install sp-spider sp-spider-broker

Конфигурация

В зависимости от условий установки требуется сменить авторизационные данные и порты для базы данных и др. информацию в .env-файле. Сначала настраивается веб-интерфейс, после него - брокер.

# Отредактируйте /opt/sp-spider/.env
# Порт на котором будет работать приложение
VITE_APP_PORT=3333
NODE_ENV=production
HTTP_TIMEOUT=10000

# Если это основной интерфейс (даже при отсутствии резервирования)
IS_PRIMARY=true

# Секретный ключ, соль для паролей. Нежелательно менять после первого запуска
APP_SECRET=salt_salt_salt

# Данные от пользователя и БД postgresql
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="dosgate"
DB_DATABASE="dosgate"
DB_PASSWORD="password"

# Активация rabbitmq для синхронизации и брокера
RMQ_ENABLE="true"
RMQ_URL="amqp://USER:PASSWORD@localhost:5672"
RMQ_RECONNECT_INTERVAL="5000"

Использование AMQPs

В случае, если требуется поддержка TLS в рамках протокола AMQP, замените RMQ_URL="amqp://USER:PASSWORD@localhost:5672" на RMQ_URL="amqps://USER:PASSWORD@localhost:5672"

# Отредактируйте /opt/sp-spider-broker/.env
# Порт, на котором запустится сервис
APP_PORT=3335

# Ключ из .env интерфейса
APP_SECRET="YOUR_APP_SECRET"

# Данные от базы данных из .env интерфейса
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="YOUR_DB_USER"
DB_DATABASE="YOUR_DB_NAME"
DB_PASSWORD="YOUR_DB_PASSWORD"

# Данные RabbitMQ из .env интерфейса
RMQ_URL="amqp://USER:PASSWORD@localhost:5672"
RMQ_RECONNECT_INTERVAL="5000"

# Путь к папке с политиками DosGate UH. Обязательно в конце ставить "/"
POLICY_PATH="/var/lib/dosgate-uh/profiles/"
# Путь к конфигурации обработчика оффендеров DosGate UH
OFFENDERS_CONF_PATH="/opt/sp-spider-broker/offenders/offenders.conf"
# Путь к объектам защиты Flowcollector. Обязательно в конце ставить "/"
FC_MO_PATH="/opt/spfc/etc/mo/"
# Путь к симлинкам на объекты защиты Flowcollector. Обязательно в конце ставить "/"
FC_MO_SYMLINK_PATH="/opt/spfc/etc/mo.enabled/"
# Путь к объектам обучения Treshold Learner. Обязательно в конце ставить "/"
FC_LEARNER_PATH="/opt/spfc/etc/learner/"
# Путь к симлинкам на объекты обучения Treshold Learner. Обязательно в конце ставить "/"
FC_LEARNER_SYMLINK_PATH="/opt/spfc/etc/learner.enabled/"

# Путь к конфигу dosgate-uh
DGUH_CONF="/etc/dosgate-uh.conf"
# Путь к снэпшотам дампов dosgate-uh
DGUH_SNAPSHOTS="/var/cache/dosgate-uh-snapshots"

Создание сервиса

Для веб-интерфейса:

# Отредактируйте /usr/lib/systemd/system/sp-spider.service
[Unit]
Description=SP Spider

[Service]
ExecStart=/usr/bin/node /opt/sp-spider/server/main.js
WorkingDirectory=/opt/sp-spider     
Restart=always

[Install]
WantedBy=multi-user.target

Для брокера:

# Отредактируйте /usr/lib/systemd/system/sp-spider-broker.service
[Unit]
Description=SP Spider Broker

[Service]
ExecStart=/opt/sp-spider-broker/sp-spider-broker
WorkingDirectory=/opt/sp-spider-broker
Restart=always

[Install]
WantedBy=multi-user.target

Запуск и проверка работы сервисов

sudo systemctl enable --now sp-spider sp-spider-broker

Проверяем статус всех компонентов:

sudo systemctl status sp-spider
sudo systemctl status sp-spider-broker
sudo systemctl status rabbitmq-server
sudo systemctl status postgresql
sudo systemctl status nginx

Активация веб-интерфейса

  1. Перейдите в веб-интерфейс по ссылке ip:port. Порт указывается при настройке VITE_APP_PORT в файле /opt/sp-spider/.env

  2. Стандартные логин и пароль требуется заменить после инсталляции. Логин: superadmin Пароль: superadmin

  3. После авторизации вы зафиксируете окно ошибки. Выберите:

    • Нажмите кнопку "Настройки" на появившемся окне
    • "Ноды"
    • "Добавить ноду"
    • Введите SSH-данные от установленной ноды Досгейта
  4. В управлении системой также нужно указать ссылку на Graphite (для получения графиков статистики) и название арены (названия арен должны быть одинаковые во всех dosgate.conf по всему кластеру)

    • Перейдите в "Настройки"
    • Укажите ссылку на Graphite
    • Укажите название arena
  5. Перейдите в настройки, нажав на свой профиль в правом верхнем углу экрана

    • Измените пароль с superadmin на требуемый
  6. Веб-интерфейс готов к работе. Убедитесь что графики активны, профили и правила создаются, синхронизация работает