Перейти к содержимому

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значение 1version
lapi_up1, когда Local API отвечает на /health
lapi_decisions_okс ключом bouncer: 1, когда Local API ответил на запрос решений
decisionsактивные решения, включая общественные списки блокировки
decisions_by_originorigin: crowdsec, cscli, CAPI, lists…
alertsоповещения, хранимые Local API, кроме общественных
bouncers_seenbouncer-ы, обратившиеся к 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.

  1. 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.yaml
    sudo systemctl restart crowdsec
  2. Метрикам не нужны учётные данные: они содержат счётчики, имена bouncer-ов и машин и пути файлов логов, никогда IP-адрес. Отфильтруйте порт 6060 так, чтобы до него доходил только хост DumbMonit, и проверьте, что он отвечает.

    curl -s http://crowdsec.lan:6060/metrics | grep cs_info
  3. DumbMonit также проверяет /health Local API, на порту 8080 того же хоста: listen_uri в разделе api.server тогда тоже должен быть доступен. Снимите отметку Check the Local API для хоста, на котором работает только агент.

  4. Необязательно: создайте ключ bouncer для DumbMonit и вставьте его как Bouncer API key ниже. Ключ bouncer может только читать решения. DumbMonit запрашивает решения по адресу 192.0.2.1, документационному адресу, поэтому ответ всегда пуст, а список блокировки никогда не скачивается.

    sudo cscli bouncers add dumbmonit
  5. Или, для карты угроз страницы «Безопасность»: создайте учётную запись машины и выберите ниже «Учётная запись машины». Сохраняется только страна каждого оповещения.

    sudo cscli machines add dumbmonit --password 'a-long-password'
  6. В 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 на хосте.