К основному содержимому

CrowdSec: современная IPS-система защиты для VPS

Безопасность · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «CrowdSec: современная IPS-система защиты для VPS»

CrowdSec — это современная открытая IPS (Intrusion Prevention System), которая работает как улучшенная замена fail2ban. Ключевое отличие: все пользователи CrowdSec делятся информацией об атакующих IP, формируя коллективную базу угроз из миллионов источников.

CrowdSec vs fail2ban

Функцияfail2banCrowdSec
АрхитектураМонолитнаяAgent + Bouncer
Threat IntelligenceТолько локальные логиГлобальная shared DB
Проактивная блокировкаНетДа (известные атакующие)
Веб-дашбордНетДа (app.crowdsec.net)
Коллекции сценариевТолько regexYAML-сценарии, Hub
ЛицензияGPLMIT (Community)

Установка CrowdSec

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash
apt install crowdsec -y

# Установить Nginx Bouncer (блокировщик)
apt install crowdsec-nginx-bouncer -y

# Или firewall bouncer
apt install crowdsec-firewall-bouncer-nftables -y

Установка коллекций сценариев

cscli collections list
cscli collections install crowdsecurity/nginx
cscli collections install crowdsecurity/wordpress
cscli collections install crowdsecurity/ssh-bf
cscli collections install crowdsecurity/linux-lpe
systemctl reload crowdsec

Управление блокировками

cscli decisions list
cscli decisions add --ip 1.2.3.4 --duration 24h --reason "manual ban"
cscli decisions delete --ip 1.2.3.4
cscli alerts list --limit 20

Мониторинг метрик

cscli metrics
cscli bouncers list
cscli machines list
CrowdSec Hub: На app.crowdsec.net доступен бесплатный дашборд с графиками атак, картой источников угроз и управлением вашими агентами.
CrowdSec не заменяет настройку firewall и SSH hardening — это дополнительный слой. Используйте его в связке с ufw/nftables и правилами sshd_config.

Разбор типичных проблем при внедрении CrowdSec

  • level=fatal msg="unable to run local API: listen tcp 127.0.0.1:8080: bind: address already in use" — порт 8080 по умолчанию уже занят другим сервисом (Node.js-приложением, панелью, тестовым PHP-сервером). Измените api.server.listen_uri в /etc/crowdsec/config.yaml на свободный порт.
  • Команда cscli decisions add отработала без ошибок, а атакующий трафик всё равно проходит — decision это только запись в базе LAPI. Реальную блокировку выполняет bouncer, и без установленного и настроенного bouncer'а трафик никто не остановит.
  • cscli bouncers list показывает bouncer с пустой колонкой Last Pull — он зарегистрирован, но не забирает решения. Почти всегда причина в неверном api_url или api_key в его конфиге, например /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.yaml.
  • cscli metrics показывает нулевые события по установленному сценарию — источник логов из acquis.yaml не читается: неверный путь к файлу или у пользователя, от имени которого работает crowdsec, нет прав на чтение лога.
  • nginx-bouncer не запускается на стоковом Nginx из репозитория дистрибутива — crowdsec-nginx-bouncer требует Nginx, собранный с ngx_http_lua_module, либо OpenResty; обычная сборка Nginx из apt этот модуль не включает.

Типы bouncer'ов и что они блокируют

BouncerУровень блокировкиГде устанавливаетсяОграничение
nginx-bouncerHTTP-запрос (уровень приложения)На каждом сервере с NginxТребует Lua-модуль, не влияет на не-HTTP трафик
firewall-bouncer (nftables/iptables)Сетевой пакетНа хосте целикомБлокирует любой трафик, но не видит HTTP-заголовки и URL
cloudflare-bouncerПериметр CDNВ аккаунте CloudflareРаботает только если весь трафик идёт через Cloudflare
Собственный bouncer через APIЛюбой, который вы реализуетеСвой скрипт, обращающийся к LAPIТребует собственной разработки и поддержки

Когда CrowdSec не подходит

  • Одиночный сервер с невысоким трафиком, где fail2ban уже закрывает потребности — CrowdSec добавляет agent, LAPI и bouncer, а значит больше движущихся частей и памяти ради не сильно большего выигрыша.
  • Изолированная сеть без доступа в интернет — обмен коллективной базой атакующих с CAPI CrowdSec требует связи с внешним сервисом; в закрытом контуре останется только локальный анализ по сценариям, без сетевого эффекта.
  • Сервер с очень ограниченной памятью (512 MB — 1 GB) — агент CrowdSec, локальная база решений и bouncer вместе требовательнее к ресурсам, чем fail2ban.
  • Нужна блокировка по сложным поведенческим признакам после логина (device fingerprint, аномалии сессии) — это задача уровня приложения или специализированного anti-fraud, а не IPS уровня CrowdSec.

Проверка, что блокировка реально работает

# Добавить тестовую блокировку СВОЕГО внешнего IP на короткое время
cscli decisions add --ip 1.2.3.4 --duration 1m --reason "test block"

# Убедиться, что решение попало в базу LAPI
cscli decisions list

# Проверить с заблокированного IP, что соединение действительно не проходит
curl -I https://example.com

# Снять тестовую блокировку, не дожидаясь истечения срока
cscli decisions delete --ip 1.2.3.4

Замените 1.2.3.4 на собственный внешний адрес и выполняйте проверку с него, а не с сервера — иначе третья команда покажет успех локально, но ничего не скажет о том, действительно ли bouncer блокирует чужой трафик.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке