CrowdSec
Движок безопасности: активные решения и их происхождение, оповещения, bouncer-ы, перестающие опрашивать, прочитанные строки логов и те, что не распознал ни один парсер, и отвечает ли Local API.
DumbMonit читает метрики Prometheus от CrowdSec (порт 6060) и проверяет
/health Local API (порт 8080). С опциональным ключом bouncer он также
запрашивает у Local API решения по адресу 192.0.2.1 — документационному
адресу: ответ всегда пустой, и это доказывает, что аутентификация и база
данных отвечают. Он никогда не создаёт и не удаляет решение и никогда не
скачивает список блокировки.
Отказ, за которым стоит следить, — это bouncer, который перестал опрашивать. Файрвол или обратный прокси продолжает работать со списком, который у него был, новые злоумышленники проходят, и никто не жалуется. CrowdSec не публикует, когда bouncer опрашивал последний раз; DumbMonit читает это из счётчика запросов bouncer-а, который перестаёт двигаться. Второй отказ — источник, который сломался (переименованный файл лога, пересозданный контейнер): CrowdSec ничего не читает, не видит атаки и остаётся зелёным.
Что отслеживается
Заголовок раздела «Что отслеживается»Все метрики с префиксом dumbmonit_crowdsec_. Суммарные значения — это
счётчики: графики и правила превращают их в скорости.
| Метрика | Что | Метки |
|---|---|---|
version_info | значение 1 | version |
lapi_up | 1, когда Local API отвечает на /health | |
lapi_decisions_ok | с ключом bouncer: 1, когда Local API ответил на запрос решений | |
decisions | активные решения, включая общественные списки блокировки | |
decisions_by_origin | origin: crowdsec, cscli, CAPI, lists… | |
alerts | оповещения, хранимые Local API, кроме общественных | |
bouncers_seen | bouncer-ы, обратившиеся к Local API с момента запуска CrowdSec | |
bouncer_requests_total | запросы каждого bouncer-а; когда перестаёт двигаться, bouncer перестал опрашивать | bouncer |
machine_requests_total | запросы каждого агента (машины) | machine |
lapi_requests_total | все запросы к Local API | |
scenario_overflows_total | сценарии, сработавшие у локального агента: каждый — это оповещение | |
lines_read_total, lines_parsed_total, lines_unparsed_total | строки логов, прочитанные агентом, и те, что разобраны или нет | |
source_lines_total, source_lines_unparsed_total | то же на источник лога | source |
buckets | открытые сейчас корзины сценариев | |
alerts_recent | с учётной записью машины: локальные оповещения за последние 24 часа из Local API | |
alerts_by_country | с учётной записью машины: эти оповещения по стране происхождения (source.cn) | country |
Семейства Local API появляются там, где работает Local API, семейства логов — там, где агент читает логи; официальный образ и стандартная установка запускают оба.
Применяемые встроенные правила: «Local API CrowdSec не работает», «Bouncer CrowdSec перестал опрашивать», «CrowdSec не читает логи», плюс «Монитор недоступен».
Страница монитора
Заголовок раздела «Страница монитора»Панель над графиками читает то, что сохранила проверка; открытие страницы никогда не запрашивает CrowdSec. Она сообщает, что не так, в одном предложении (Local API, bouncer-ы, чтение логов и доля строк, не распознанных ни одним парсером), затем — активные решения, хранимые оповещения, сценарии, сработавшие за последние 24 часа, и строки, читаемые в секунду, затем — время с последнего опроса каждого bouncer-а, решения по происхождению и долю нераспознанных строк каждого источника лога.
С учётной записью машины ниже появляется карта угроз: оповещения за последние 24 часа, окрашенные по странам. Те же счётчики питают карту угроз страницы «Безопасность» рядом с блокировками межсетевых экранов и угрозами Cloudflare.
Дать DumbMonit читать метрики CrowdSec
Заголовок раздела «Дать DumbMonit читать метрики CrowdSec»-
CrowdSec по умолчанию публикует свои метрики на 127.0.0.1:6060. Задайте listen_addr в разделе prometheus файла /etc/crowdsec/config.yaml на адрес, доступный DumbMonit, затем перезапустите CrowdSec. Официальный образ Docker уже слушает на каждом интерфейсе.
sudo sed -i 's/listen_addr: 127.0.0.1/listen_addr: 0.0.0.0/' /etc/crowdsec/config.yamlsudo systemctl restart crowdsec -
Метрикам не нужны учётные данные: они содержат счётчики, имена bouncer-ов и машин и пути файлов логов, никогда IP-адрес. Отфильтруйте порт 6060 так, чтобы до него доходил только хост DumbMonit, и проверьте, что он отвечает.
curl -s http://crowdsec.lan:6060/metrics | grep cs_info -
DumbMonit также проверяет /health Local API, на порту 8080 того же хоста: listen_uri в разделе api.server тогда тоже должен быть доступен. Снимите отметку Check the Local API для хоста, на котором работает только агент.
-
Необязательно: создайте ключ bouncer для DumbMonit и вставьте его как Bouncer API key ниже. Ключ bouncer может только читать решения. DumbMonit запрашивает решения по адресу 192.0.2.1, документационному адресу, поэтому ответ всегда пуст, а список блокировки никогда не скачивается.
sudo cscli bouncers add dumbmonit -
Или, для карты угроз страницы «Безопасность»: создайте учётную запись машины и выберите ниже «Учётная запись машины». Сохраняется только страна каждого оповещения.
sudo cscli machines add dumbmonit --password 'a-long-password' -
В DumbMonit введите хост CrowdSec, например «crowdsec.lan». Если Local API и агенты работают на разных хостах, добавьте каждый хост: решения, оповещения и bouncer-ы считаются там, где работает Local API, строки логов — там, где их читает каждый агент.
Bouncer, удалённый с помощью cscli bouncers delete, сохраняет свой счётчик
до перезапуска CrowdSec и до этого момента сообщается как остановленный.
Bouncer, который обращается к Local API только при обслуживании запроса
(bouncer обратного прокси в режиме live), может молчать полчаса в спокойную
ночь; переключите его в режим stream, либо увеличьте окно правила.
Учётные данные
Заголовок раздела «Учётные данные»| Учётные данные | Поля |
|---|---|
| Только метрики | Ничего: читает /metrics, и /health Local API. |
| Ключ API bouncer | Ключ, выведенный cscli bouncers add dumbmonit, отправляется как X-Api-Key в Local API. |
| Учётная запись машины | Имя и пароль, переданные cscli machines add. DumbMonit входит (/v1/watchers/login) и читает локальные оповещения за последние 24 часа (/v1/alerts, без общественных), сохраняя только страну каждого: адреса не хранятся. |
Адрес: имя хоста или IP (crowdsec.lan), host:port для метрик, или полный
URL. Опции: протокол (по умолчанию HTTP), порт метрик (6060), Check the
Local API (включено), порт Local API (8080), проверка сертификата и таймаут
запроса (10 с). Элементы Hub (парсеры, сценарии, коллекции), которые испорчены
или устарели, не видны через метрики, только через cscli hub list на
хосте.