Статистика трафика и атак

Содержание

Обзор

Модуль ngx_http_statistics в SEnginx собирает статистику трафика и атак.
Вся статистика хранится в оперативной памяти, поэтому при остановке или перезапуске SEnginx статистика обнуляеся. При перезагрузке конфигурации SEnginx статистика не сбрасывается.
Статистика подерживает следующие счетчики:

Статистика трафика

  • Количество запросов в обработке ("cur_rec")
  • Количество запросов, обработанных с момента запуска сервера ("rec")
  • Количество ответов, отправленных сервером с разными кодами ответа ("res_Nxx")
  • Количество байтов, отправленных сервером ("sent")
  • Количество байтов, полученных сервером ("recvd")

Статистика трафика доступна только на стороне сервера, upstream не поддерживается.

Статистика атак

  • SQL Injection ("sql") обработанных Naxsi
  • Cross Site Scripting ("xss") обработанных Naxsi
  • Remote File Inclusion ("rfi") обработанных Naxsi
  • Dir Traversal ("dt") обработанных Naxsi
  • Evading Tricks ("evade") обработанных Naxsi
  • File Uploads Threat ("fu") обработанных Naxsi
  • Libinjection XSS ("libinjection_xss") обработанных Naxsi (с SEnginx 1.8.1)
  • Libinjection SQL ("libinjection_sql") обработанных Naxsi (с SEnginx 1.8.1)
  • Cookie Poisoning ("cp")
  • Web Defacement ("wd")
  • Проверки Robot Mitigation ("rm")

Эта функция доступна с SEnginx 1.5.14
Доступность в статистике перечисленных типов атак зависит от того, включена ли соответствующая функция в конфигурации. В настоящее время атаки, о которых сообщает ModSecurity, в статистике не учитываются.

Директивы

statistics_zone

Синтаксис statistics_zone size;
По умолчанию
Контекст http

Создать в разделяемой памяти зону статистики размером size.
Пример:

statistics_zone 10m;

Для серверов, по которым должна собираться статистика, должна быть указана директива "virtual_server_name" с уникальным именем, которое обычно совпадает с server_name. Если "virtual_server_name" не задано, статистика по серверу не будет собираться.
Пример:

statistics_zone 10m;

server {
    listen 80;
    server_name www.abc.com;

    virtual_server_name www.abc.com;

    ...
}

statistics

Синтаксис statistics;
По умолчанию
Контекст location

Указывает location, в котором отображается статистика.
Пример:

location /stats {
    statistics;
}


Формат данных

Статистика формируется в формате JSON:

 {
 "timestamp":123455678,
 "servers":[
 {
   "name":"server1",
   "traffic":{"cur_req":10,"req":100,"res_2xx":50,"res_3xx":20,"res_4xx":15,
              "res_5xx":15,"sent":1453,"recvd":3541},
   "attack":{"sql":10,"xss":10,"rfi":5,"dt":2,"evade":1,"fu":1,"libinjection_xss":0,"libinjection_sql":0,"cp":1,"wd":3,
             "rm":50,"other":0}
  },
  {
   "name":"server2",
   "traffic":{"cur_req":10,"req":100,"res_2xx":50,"res_3xx":20,"res_4xx":15,
              "res_5xx":15,"sent":1453,"recvd":3541},
   "attack":{"sql":10,"xss":10,"rfi":5,"dt":2,"evade":1,"fu":1,"libinjection_xss":0,"libinjection_sql":0,"cp":1,"wd":3,
             "rm":50,"other":0}
  },
  ...]
 }

Демо

Смотрите в файле /html/demo.html.