Перейти к содержанию

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

  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, строки логов — там, где их читает каждый агент.

Warning

Bouncer, который перестаёт опрашивать, продолжает применять замороженный список: новые злоумышленники проходят, и никто не жалуется. DumbMonit предупреждает, когда запросы bouncer-а останавливаются на 30 минут. Он знает только о bouncer-ах, опросивших хотя бы раз с момента последнего запуска CrowdSec.

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 на хосте.