(WIP) Анализатор логов Web-сервера

В настоящий момент подсистема accesslog находится в режиме бета-тестирования.
Подсистема является дополнительно лицензируемым модулем.

В Mitigator добавлена подсистема accesslog, которая, анализируя логи защищаемого Web-сервера (HTTP, HTTPS), выявляет аномалии и атакующие адреса.

Защищаемые сервера отправляют свои логи на Анализатор, используя syslog RFC 3164 (UDP, TCP, TLS).

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

Анализатор на экземпляре Mitigator´а

Дальнейшие шаги предполагают, что экземпляр Mitigator´а уже установлен. В противном случае предварительно выполните установку одним из способов.

Чтобы включить accesslog на постоянной основе, необходимо в docker-compose.yml изменить значение параметра scale c 0 на 1.

services:
  ...
  accesslog:
    ...
    scale: 1
    ...

После настройки необходимо перезапустить Mitigator:

docker-compose down && docker-compose up -d

Анализатор на внешнем сервере

Подготовка внешнего сервера

Предполагается, что на внешний сервер уже установлены Docker, docker-compose и wireguard-dkms.

  1. На сервере создайте docker-compose.yml для подсистемы accesslog:

    mkdir -p /opt/mitigator-accesslog
    
  2. Скачайте docker-compose.yml:

    wget https://docs.mitigator.ru/dist/accesslog/docker-compose.yml \
        -O /opt/mitigator-accesslog/docker-compose.yml
    
  3. Создайте службу для запуска подсистемы на внешнем сервере:

    Скачайте файл сервиса:

    wget https://docs.mitigator.ru/dist/docker-compose@.service \
        -O /etc/systemd/system/docker-compose@.service
    

    Активируйте службу:

    systemctl enable docker-compose@mitigator-accesslog
    
  4. На внешнем сервере запустите сервисы:

    • Войдите на docker.mitigator.ru

      docker login docker.mitigator.ru
      
    • Перейдите в рабочую директорию

      cd /opt/mitigator-accesslog
      
    • Загрузите образы

      docker-compose pull
      
    • Запустите сервис

      systemctl start docker-compose@mitigator-accesslog
      

Настройка взаимодействия с Mitigator по VPN

Экземпляры Mitigator´а взаимодействуют через Wireguard, между ними создается виртуальная сеть (VPN). Для того чтобы accesslog мог взаимодействовать с системой Mitigator, необходимо настроить для него VPN также как для всех экземпляров внутри кластера.

По желанию пользователя имена переменных MITIGATOR_VPN_ADDRESS и MITIGATOR_VPN_PREFIX для accesslog могут быть изменены на более подходящие.

Рекомендуется выбирать для accesslog адрес внутри VPN, отстоящий от адресов экземпляров, например 10.8.3.254. При этом все адреса должны быть внутри одной сети /24.

Настройка отправки логов на Web-сервере

Отправка логов с NGINX

NGINX позволяет сразу отправлять свои логи по syslog без использования сторонних приложений (syslog-ng, rsyslog).

  1. По умолчанию nginx использует формат логов «combined», который не содержит информацию о времени обработки запроса $request_time. Свой формат логов можно определить в файле /etc/nginx/nginx.conf.

    log_format myformat '$remote_addr - $remote_user [$time_local] "$request" $request_time $status $body_bytes_sent "$http_referer" "$http_user_agent"';
    

    Здесь myformat – имя формата лога.

  2. В файле настроек сайта, например, /etc/nginx/sites-enabled/default, задайте:

    access_log syslog:server=192.0.2.1:7201,tag=123456789abcdefg myformat;
    

    Здесь server=192.0.2.1:7201 – IP-адрес и порт анализатора логов.

    Через tag= задается секретный идентификатор (токен), позволяющий определить, к какому сервису относится запись в логе, его знают только администраторы защищаемого сервиса и политики защиты. Если tag= задан пустым, то в качестве токена в Mitigator используется IP-адрес, с которого отправляется access_log.

    access_log syslog:server=10.10.10.4:7201 tag= myformat;
    
  3. Перезапустите NGINX.

    systemctl restart nginx
    

Отправка логов с помощью Syslog-ng

Приблизительная конфигурация файла /etc/syslog-ng/conf.d/mitigator_log.conf приведена ниже:

source s_source {
file("/var/log/nginx/access.log" flags(no-parse));
};

destination d_MITIGATOR {
syslog("10.10.10.4" transport("udp") port(7201));
};

log {
source(s_source);
destination(d_MITIGATOR);
};