(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/v22.08/dist/accesslog/docker-compose.yml \
        -O /opt/mitigator-accesslog/docker-compose.yml
    
  3. Создайте службу для запуска подсистемы на внешнем сервере:

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

    wget https://docs.mitigator.ru/v22.08/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
      
  5. Проверьте связность между сервером анализатора и экземплярами MITIGATOR:

    • Выполните команду

      docker-compose exec gateway wg
      
    • Убедитесь в наличии handshake между всеми участниками VPN-сети.

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

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

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

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

Настройка в Web-интерфейсе

Для работы анализатора логов как на экземпляре MITIGATOR, так и на внешнем сервере, необходимо задать адрес и порт внутри VPN, по которым доступен анализатор логов. Адрес и порт задаются в виде 10.8.3.254:7200 на странице «Настройка системы» в карточке «Общие параметры защиты».

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

Анализатор получает логи на портах:

  • 7201 – UDP;
  • 7202 – TCP;
  • 7203 – TLS поверх TCP.

Отправка логов с 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= задается секретный идентификатор (токен), позволяющий определить, к какому сервису относится запись в логе, его знают только администраторы защищаемого сервиса и политики защиты. Токен должен содержать 16 символов. Если tag= задан пустым, то в качестве токена в MITIGATOR используется IP-адрес, с которого отправляется access_log.

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

    systemctl restart nginx
    

NGINX за PROXY

Если nginx защищаемого сервера находится за прокси или балансировщиком трафика, то должна быть настроена подстановка реальных IP-адресов отправителей из заголовка X-Forwarded-For. Для этого требуется наличие в nginx модуля http_realip_module.

Проверить, что модуль http_realip_module установлен можно с помощью команды:

2>&1 nginx -V | tr -- - '\n' | grep http_realip_module

Если модуль не установлен, следует пересобрать nginx с параметром --with-http_realip_module.

В файле /etc/nginx/nginx.conf на защищаемом сервере в секции http:

  1. Добавить IP-адрес Proxy-сервера в список доверенных:
set_real_ip_from 192.168.0.1/32;

Здесь 192.168.0.1/32 – IP-адрес Proxy-сервера.

  1. Задать заголовок “X-Forwarded-For” в качестве источника
real_ip_header X-Forwarded-For;

В файле /etc/nginx/nginx.conf на Proxy-сервере в секции server:

  1. Настроить отправку реального адреса в заголовке X-Real-IP header
proxy_set_header X-Real-IP $remote_addr;

Отправка логов с помощью 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);
};