В данной статье представлены процессы установки и настройки CrowdSec на примере Ubuntu 26.04 LTS. CrowdSec является ПО с открытым кодом, представляющим из себя систему обнаружения и предотвращения вторжений, обменивающуюся данными о злоумышленниках с другими устройствами. В статье рассмотрим CrowdSec версии 1.7.8, так как в ней закрыты уязвимости CVE-2026-44982 (обход WAF) и CVE-2026-44981 (DoS в Local API).
Сценарии использования CrowdSec
CrowdSec решает широкий круг задач и может применяться для практически любых сервисов, генерирующих логи. Некоторые из сценариев использования CrowdSec:
● Защита SSH от брутфорса
Проблема: Постоянные попытки подбора паролей к SSH от нежелательных источников.
Действия CrowdSec:
- Агент читает /var/log/auth.log (или journalctl) через коллекцию crowdsecurity/sshd.
- Обнаруживает многократные неудачные аутентификации с одного IP.
- Принимает решение (например, блокировка на 4 часа) и передает IP в баунсер.
- Баунсер мгновенно блокирует IP на уровне сети. IP-адрес атакующего отправляется в базу IP-адресов, которые CrowdSec классифицирует как злонамеренные.
● Защита веб-приложений на Nginx
Проблема: Атаки на сайт — сканирование уязвимостей, перебор админинистративных панелей, SQL-инъекции, межсайтовый скриптинг.
Действия CrowdSec:
- Парсит access-логи Nginx через коллекции crowdsecurity/nginx и crowdsecurity/http-cve.
- Обнаруживает подозрительные паттерны (например, запросы к /wp-admin, .env, /etc/passwd).
- Блокирует атакующий IP через баунсер.
Возможна установка кастомных сценариев под конкретные CMS (WordPress, Drupal).
● Защита почтового сервера
Проблема: Брутфорс SMTP/IMAP-авторизаций, спам-рассылки.
Действия CrowdSec:
- Коллекции для postfix и dovecot анализируют соответствующие логи.
- Обнаруживают множество неудачных логинов, попытки relay-атак.
- IP блокируются до того, как нагрузка на сервер станет критичной.
● Защита Kubernetes и контейнерных сред
Проблема: Атаки на Ingress-контроллер, API-сервер.
Действия CrowdSec:
- Анализирует логи Ingress (Nginx/Traefik) так же, как и обычный веб-сервер.
- Может читать audit-логи Kubernetes через отдельные парсеры.
- Блокировка на уровне Ingress-controller или через сетевые политики с помощью Kubernetes-bouncer.
● Защита баз данных (MySQL, PostgreSQL)
Проблема: Перебор паролей к БД, эксплуатация уязвимостей.
Действия CrowdSec:
- Анализирует логи СУБД (например, ошибки аутентификации в PostgreSQL).
- При множестве неудачных попыток IP блокируется.
Основные термины
Консоль (Console) — веб-интерфейс на сайте CrowdSec для управления добавленными движками безопасности — позволяет просматривать оповещения (alerts), решения (decisions) и другую информацию.
Движок безопасности (Security Engine) — основное приложение CrowdSec, которое устанавливается первоначально. Работает в качестве системы обнаружения вторжений, генерирует оповещения по выявленным угрозам. Внутренняя структура Security Engine включает два основных компонента: обработчик логов (отвечающий за обнаружение) и локальный API (отвечающий за хранение и распространение решений).
Log Processor (Агент анализатор) — Читает и анализирует системные логи и HTTP-трафик, проверяет их с помощью сценариев.При обнаружении угрозы отправляет оповещение (alert) в Local API.
Локальный (LAPI) — центральный компонент, который хранит оповещения (alerts) и решения (decisions), а также выступает в роли посредника между модулями обработки логов, компонентами реагирования и центральным API.
Оповещения (Alerts) — записи, которые создает CrowdSec, когда срабатывает сценарий или правило AppSec. Служат для мониторинга и содержат информацию об атаке.
AppSec — компонент, интегрированный в CrowdSec Security Engine, и представляющий из себя полноценный Web Application Firewall (WAF). Он используется для защиты веб-сервисов и работает в совокупности с веб-баунсером (к примеру crowdsec-nginx-bouncer). В данном случае баунсер перехватывает входящий запрос к веб-серверу, отправляет его на анализ в AppSec-компонент, затем тот возвращает вердикт: «пропустить» или «заблокировать».
Решения (Decisions) — инструкции по принятию мер (например, блокировка), созданные профилями Local API или вручную через cscli, используются баунсерами (bouncers).
Профили (Profiles) — Набор правил, который определяет, как Local API должен превращать оповещения (Alerts) в решения (Decisions).
cscli — интерфейс командной строки для управления CrowdSec, сценариями и базой данных. Он позволяет управлять блокировками, парсерами, сценариями и API, а также в целом администрировать CrowdSec.
Баунсеры (Bouncers) — это компоненты, которые блокируют трафик. Они опрашивают Local API, получают список решений (decisions) и применяют выбранные меры (блокировка на уровне брандмауэра, показ капчи, сброс HTTP-запроса).
Сценарии (Scenarios) — это YAML-файлы, позволяющие выявить определенное поведение, как правило, атаку.
Коллекции (Collections) — наборы парсеров, сценариев и других компонентов, которые устанавливаются вместе для защиты конкретного сервиса (например, коллекция для Nginx или SSH).
Установка CrowdSec
Загружаем и выполняем скрипт автоматического добавления репозитория CrowdSec:
curl -s https://install.crowdsec.net | sudo sh
Обновляем список репозиториев и устанавливаем CrowdSec:
sudo apt update && sudo apt install crowdsec
Добавляем службу CrowdSec в автозагрузку и проверяем, что она работает:
sudo systemctl enable crowdsec
sudo systemctl status crowdsec
Связывание локального агента CrowdSec с централизованной консолью
Для быстрой регистрации нашего движка на сайте вводим команду:
sudo cscli console enroll --quick
Сгенерируется уникальная ссылка, доступная в течение 15 минут, переходим по ней в браузере и регистрируем аккаунт.
Должно открыться окно, в котором нужно нажать кнопку Enroll engine. Если после регистрации аккаунта данное окно автоматически не открылось, то нужно заново перейти по сгенерированной ссылке в браузере.

Также есть альтернативный вариант связывания движка с консолью. Сначала необходимо создать аккаунт на сайте app.crowdsec.net. Затем нужно перейти в Engines и найти пункт Enroll. Здесь должна быть команда, которую нужно использовать на сервере для связывания:
sudo cscli console enroll (--name <Имя движка>) (--tags <Метки движка>) <Ключ>
Флаги name и tags не являются обязательными, но могут быть полезными.
После этого на сайте потребуется нажать кнопку Accept enroll для подтверждения связывания.
После успешного связывания нужно перезагрузить агент:
sudo systemctl reload crowdsec
Проверим связь движка с центральным API:
sudo cscli capi status
Если в выводе написано «You can successfully interact with Central API (CAPI)», то значит, что движок успешно аутентифицирован и может обмениваться данными с CAPI.
Установка Firewall Bouncer
Firewall Bouncer обеспечивает широкую защиту на уровне IP, но не может применяться для веб-сервисов. Этот баунсер подходит для SSH, баз данных или SMTP.
Для начала проверим, какой бэкенд используется в системе для обработки правил фильтрации трафика:
iptables -V
Если в выводе команды есть (nf_tables), тогда нужно устанавливать crowdsec-firewall-bouncer-nftables, иначе будем использовать crowdsec-firewall-bouncer-iptables.
Установка crowdsec-firewall-bouncer-nftables:
sudo apt install crowdsec-firewall-bouncer-nftables
Установка crowdsec-firewall-bouncer-iptables:
sudo apt install crowdsec-firewall-bouncer-iptables
Проверяем статус службы после установки подходящей версии Firewall Bouncer:
sudo systemctl status crowdsec-firewall-bouncer
Если установка баунсера осуществляется на удаленной ВМ, где cscli не имеет прямого доступа к Local API (LAPI), тогда на сервере с LAPI потребуется вручную сгенерировать API-ключ для нового баунсера:
sudo cscli bouncers add <Название баунсера>
На удаленном сервере открываем файл конфигурации баунсера:
sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
В строке api_url указываем IP-адрес сервера с LAPI:
api_url: http://<IP-адрес>:8080/
В строке api_key нужно добавить полученный ранее API-ключ:
api_key: <API-ключ>
После этого перезапускаем службу баунсера:
sudo systemctl restart crowdsec-firewall-bouncer
Установка Nginx Bouncer
Данный баунсер блокирует доступ к сайту для подозрительных IP-адресов или заставляет их проходить проверку. Обратите внимание, что этот баунсер работает как внутренний модуль NGINX с использованием Lua, поэтому у него нет собственной службы, которую нужно запускать через systemctl.
Сначала нужно установить зависимости:
sudo apt install nginx lua5.1 libnginx-mod-http-lua luarocks gettext-base
Затем установить сам баунсер:
sudo apt install crowdsec-nginx-bouncer
Установка коллекций
Количество устанавливаемых коллекций зависит от того, какие сервисы вы используете. Минимально рекомендуются следующие коллекции:
sudo cscli collections install crowdsecurity/linux
sudo cscli collections install crowdsecurity/sshd
При необходимости вы можете также установить коллекции из перечня:
sudo cscli collections install crowdsecurity/nginx
sudo cscli collections install crowdsecurity/apache2
sudo cscli collections install crowdsecurity/mysql
sudo cscli collections install crowdsecurity/http-cve
После установки коллекций необходимо их активировать, перезагрузив агент:
sudo systemctl reload crowdsec
Вывод перечня текущих коллекций:
sudo cscli collections list
Настройка источников логов
CrowdSec смотрит какие логи нужно считывать через /etc/crowdsec/acquis.yaml или из любого файла в каталоге /etc/crowdsec/acquis.d/. Для их правильного анализа как раз-таки необходимы ранее установленные коллекции. В последних версиях Crowdsec файл acquis.yaml по умолчанию отсутствует, рекомендуется создавать или использовать файлы конфигураций в каталоге acquis.d.
Пример создания файла конфигурации Nginx в /etc/crowdsec/acquis.d/:
sudo tee /etc/crowdsec/acquis.d/nginx.yaml > /dev/null << 'EOF'
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
EOF
Перезагружаем агент:
sudo systemctl reload crowdsec
AppSec
Сначала устанавливаем необходимую коллекцию:
sudo cscli collections install crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules
Создаем конфигурацию AppSec в /etc/crowdsec/acquis.d/:
sudo tee /etc/crowdsec/acquis.d/appsec.yaml > /dev/null << 'EOF'
appsec_config: crowdsecurity/appsec-default
labels:
type: appsec
listen_addr: 127.0.0.1:7422
source: appsec
EOF
Перезагружаем агент:
sudo systemctl reload crowdsec
Добавляем в конфиг баунсера Nginx тот же адрес, что указали при создании конфигурации AppSec:
sudo sed -i 's|^APPSEC_URL=.*|APPSEC_URL=http://127.0.0.1:7422|' /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf
Перезагружаем Nginx:
sudo systemctl restart nginx
Добавление IP в белый список
IP-адреса из белого списка проверяются до принятия каких-либо решений, они никогда не будут заблокированы, даже если спровоцируют срабатывание сценария.
Нужно создать список, в который затем будут добавляться разрешенные IP-адреса:
sudo cscli allowlists create <Название белого списка> \
--description "<Описание>"
Добавление IP-адресов происходит через команду:
sudo cscli allowlists add <Название белого списка> <IP-адрес> \
--comment "<Комментарий>"
Пример:
sudo cscli allowlists add my_whitelist 192.168.100.31 \
--comment "Internal"
С флагом –e можно добавлять IP-адреса в белый список на ограниченное количество времени (в примере 24 часа):
sudo cscli allowlists add <Название белого списка> <IP> -e 24h
Помимо одного IP-адреса могут быть указаны несколько IP-адресов (Пример: 112.3.145.6 112.3.145.7) или полностью сети (Пример: 192.168.100.0/24)
Полностью посмотреть белый список можно с помощью команды:
sudo cscli allowlists inspect <Название белого списка>
Удалить IP-адреса из списка:
sudo cscli allowlists remove <Название белого списка> <IP-адрес>
Удалить белый список:
sudo cscli allowlists delete <Название белого списка>
Посмотреть статус отдельного IP-адреса:
sudo cscli allowlists check <IP-адрес>
Режим симуляции
Когда включен режим симуляции для сценария, CrowdSec продолжает обнаруживать атаки и создавать решения (decisions) о блокировке, но эти решения не применяются на практике — блокировка не происходит.
Проверим, включена ли сейчас симуляция:
sudo cscli simulation status
Если хотите включить режим симуляции для всех сценариев:
sudo cscli simulation enable --global
Включить симуляцию для конкретного сценария:
sudo cscli simulation enable <Название, к примеру crowdsecurity/ssh-bf>
Выключение симуляции в обоих случаях выполняется аналогично, только со словом disable:
sudo cscli simulation disable --global
Как после включения, так и после выключения нужно перезагружать CrowdSec, чтобы изменения вступили в силу:
sudo systemctl reload crowdsec
Тестирование блокировки
Попробуем посмотреть, сработает ли блокировка IP-адреса при множестве неудачных попыток подключения по ssh, порт будет использоваться стандартный.
Для примера будем пробовать подключаться на другом компьютере вне локальной сети. Запускаем консоль и вводим:
ssh <логин>@<IP-адрес>
Требуется пароль учетной записи, специально вводим неверные пароли. После нескольких неудачных попыток доступ к серверу был ограничен, появилось сообщение:
ssh_dispatch_run_fatal: Connection to <IP-адрес> port 22: Connection timed out
Проверяем информацию на сайте CrowdSec.
Во вкладке Alerts добавилось 2 оповещения об атак — ssh-bf и ssh-slow-bf. У обоих стоит Behavior SSH — Bruteforce.

Во вкладке Decisions появилась новая запись, в которой указан IP-адрес злоумышленника, тип действия с ним (блокировка) и через какое время действие завершится.

Если агент на сервере не был связан с консолью CrowdSec, то можно посмотреть информацию об атаках с помощью команды:
sudo cscli alerts list

И аналогично для Decisions:
sudo cscli decisions list

Если вы хотите отменить какой-то Decision, то это можно сделать несколькими способами.
Удаление по ID Decision:
cscli decisions delete --id <ID из decisions list>
Обратите внимание – при удалении по ID также необходимо будет удалить дубликаты, которые могут создаться, если срабатывают сразу несколько сценариев.
Удаление по IP-адресу атакующего:
cscli decisions delete -i <IP-адрес>
Если вы хотите изменить стандартные 4 часа блокировки на другое время, то необходимо изменить информацию в файле profiles.yaml:
sudo nano /etc/crowdsec/profiles.yaml
Перезагружаем CrowdSec:
sudo systemctl reload crowdsec