После первой версии дашборда я понял, что сам по себе список заблокированных IP — это только половина истории.

CrowdSec отлично знает, кого и за что заблокировал. Nginx отлично знает, какой запрос в этот момент пришёл на сервер.

А вот посмотреть на эти две вещи вместе оказалось гораздо интереснее.

Поэтому BAN LOG теперь связывает события CrowdSec с реальными HTTP-запросами из Nginx.

То есть вместо условного:

«IP заблокирован за подозрительную активность»

можно увидеть примерно:

«Вот этот IP, вот в это время, отправил такой-то запрос, на такой-то адрес VPS, а Nginx ответил таким-то HTTP-кодом».

Причём здесь пришлось немного подумать о сопоставлении.

Недостаточно просто найти ближайшую запись с таким же IP. Иначе два похожих запроса, пришедших практически одновременно, вполне могут случайно «познакомиться» друг с другом.

Поэтому для связи используются сразу несколько признаков: IP источника, HTTP-метод, точный путь запроса и небольшой временной интервал.

Именно «точный путь» здесь довольно важен.

Например, /foo/.env.dev и /foo/.env.development — это для человека две похожие строки.

Для логики корреляции это два совершенно разных запроса.

Иначе однажды можно получить очень уверенный технический отчёт о событии, которого на самом деле не было.

Отдельно пришлось учитывать и запросы, которые приходят не на доменное имя, а непосредственно на IP VPS.

В Nginx для таких случаев используется default server, поэтому в журнале может фигурировать _.

Для дашборда это малоинформативно, поэтому такие события отображаются уже с фактическим публичным IP VPS.

Получается немного забавная картина.

Один журнал говорит:

«Вот человек пришёл».

Второй:

«Вот что он сделал».

А дашборд теперь пытается аккуратно выяснить:

«Так, господа, вы случайно не об одном и том же событии говорите?»

Причём всё это работает без изменения основной конфигурации логирования Nginx.

Данные просто сопоставляются уже на стороне самого дашборда.

В итоге BAN LOG стал для меня гораздо полезнее: это уже не просто список решений CrowdSec, а небольшой журнал того, что реально происходило на HTTP-уровне VPS.

И особенно приятно, что большая часть этой работы вообще не видна пользователю.

Никаких новых графиков на полэкрана, анимации, разноцветных индикаторов и очередного «AI-powered security overview».

Просто несколько логов, несколько точных условий и немного занудства.

Иногда именно так и получается нормальный технический инструмент.

А интернет тем временем продолжает присылать бесплатные тестовые данные.

За что ему, в общем-то, отдельное спасибо.