CrowdSec: коллективная защита сервера вместо Fail2ban

Настройка сервера
CrowdSec: коллективная защита сервера вместо Fail2ban

CrowdSec — это открытый инструмент защиты сервера, который анализирует логи, находит подозрительное поведение и блокирует источники атак. Главное отличие от классических решений: установка CrowdSec подключает ваш сервер к коллективной базе — IP-адреса, замеченные в атаках на тысячи других машин, блокируются у вас превентивно. В этой статье разберём, как поставить CrowdSec на VPS с Ubuntu/Debian, настроить сценарии обнаружения и баунсер для файрвола, а также сравним его с Fail2ban.

Как работает CrowdSec

Архитектура CrowdSec состоит из трёх частей, и это важно понять до установки:

  1. Агент (crowdsec) — читает логи (SSH, Nginx, системный журнал), прогоняет их через парсеры и сценарии. Если поведение IP-адреса совпадает со сценарием атаки (перебор паролей, сканирование путей, флуд запросами), агент выносит «решение» (decision) о блокировке.
  2. Баунсер (bouncer) — отдельный компонент, который применяет решения на практике: добавляет правила в nftables/iptables, отдаёт 403 в Nginx и так далее. Без баунсера CrowdSec только детектирует, но ничего не блокирует.
  3. Центральный API (CAPI) — сюда агенты со всего мира анонимно отправляют сигналы об атакующих IP. Взамен вы получаете community blocklist — список адресов, которые прямо сейчас атакуют другие серверы.

Такой подход называют коллективной защитой: вы блокируете злоумышленника ещё до того, как он постучался именно к вам. Это принципиальное отличие от Fail2ban, который видит только собственные логи — подробнее о нём в статье про защиту от подбора паролей с Fail2ban.

CrowdSec или Fail2ban: краткое сравнение

КритерийCrowdSecFail2ban
Источник данныхСвои логи + общая база атакТолько свои логи
Язык и формат правилYAML-сценарии, хаб готовых коллекцийРегулярные выражения в INI-файлах
Применение блокировокОтдельные баунсеры (firewall, Nginx, Cloudflare)Встроенные actions (iptables)
Нагрузка на CPUУмеренная, парсинг оптимизированНизкая
Метрики и наблюдаемостьВстроенные метрики, Prometheus-эндпоинтМинимальные
IPv6ПоддерживаетсяПоддерживается

Fail2ban по-прежнему хорош для простых задач «забанить перебор SSH». CrowdSec выигрывает, когда сервисов много, атаки идут распределённо с сотен IP, и вы хотите видеть картину целиком.

Установка CrowdSec на Ubuntu/Debian

Команды выполняются от root или через sudo. Сначала подключаем официальный репозиторий — в нём версии свежее, чем в стандартных репозиториях дистрибутива:

# Скрипт добавляет репозиторий CrowdSec в APT
curl -s https://install.crowdsec.net | sudo sh

# Устанавливаем сам агент
sudo apt update
sudo apt install -y crowdsec

Во время установки CrowdSec автоматически определяет запущенные сервисы (SSH, Nginx, Apache) и подтягивает подходящие коллекции парсеров и сценариев. Проверим, что сервис работает:

# Статус службы
sudo systemctl status crowdsec

# Список установленных коллекций
sudo cscli collections list

В выводе cscli collections list вы должны увидеть как минимум crowdsecurity/linux и crowdsecurity/sshd. Если у вас стоит Nginx, добавьте коллекцию для него:

# Коллекция включает парсер логов Nginx и сценарии против сканеров/ботов
sudo cscli collections install crowdsecurity/nginx
sudo systemctl reload crowdsec

Подключение баунсера: чтобы блокировки заработали

Сам по себе агент только фиксирует атаки. Ставим firewall-баунсер, который будет добавлять забаненные IP в nftables (или iptables — определится автоматически):

# Баунсер для файрвола
sudo apt install -y crowdsec-firewall-bouncer-nftables

# Проверяем, что баунсер зарегистрирован в локальном API
sudo cscli bouncers list

В списке должен появиться cs-firewall-bouncer со статусом валидного API-ключа. С этого момента связка полноценно работает: агент детектирует, баунсер блокирует. Убедитесь, что баунсер не конфликтует с вашими правилами файрвола — если вы настраивали UFW по нашей инструкции по настройке firewall UFW, CrowdSec будет работать поверх него: баунсер создаёт собственные цепочки и не трогает ваши разрешающие правила.

Проверка работы и управление решениями

Посмотрим текущие блокировки и метрики:

# Активные решения (кого и за что забанили)
sudo cscli decisions list

# Сводные метрики: сколько строк логов разобрано, какие сценарии срабатывали
sudo cscli metrics

# Последние алерты с деталями
sudo cscli alerts list

Протестировать связку можно вручную, добавив тестовую блокировку на заведомо «чужой» IP (не свой! иначе потеряете доступ):

# Забанить адрес на 5 минут вручную
sudo cscli decisions add --ip 203.0.113.50 --duration 5m --reason "test"

# Снять блокировку
sudo cscli decisions delete --ip 203.0.113.50

Если вы случайно забанили себя (например, несколько раз ошиблись в пароле SSH), снять бан можно той же командой decisions delete из консоли VNC панели управления. А чтобы этого не происходило, добавьте свой домашний IP в белый список:

# /etc/crowdsec/parsers/s02-enrich/mywhitelist.yaml
name: my/whitelist
description: "Мои доверенные адреса"
whitelist:
  reason: "trusted admin IP"
  ip:
    - "198.51.100.10"

После правки перезапустите агент: sudo systemctl reload crowdsec.

Подключение к коллективной базе

При установке из официального репозитория агент обычно сам регистрируется в Central API. Проверить это просто:

sudo cscli capi status

Если видите You can successfully interact with Central API, всё в порядке: сервер отправляет анонимные сигналы об атаках и получает общий блок-лист. Посмотреть, сколько адресов пришло из community-базы:

sudo cscli decisions list --origin CAPI | head -n 20

Обычно это тысячи IP — и все они блокируются ещё до первой попытки атаки на ваш сервер. Именно этот механизм делает CrowdSec эффективным против распределённого брутфорса, когда каждый отдельный IP делает всего 2–3 попытки и классические пороги срабатывания не достигаются. О том, почему такие атаки опасны, мы писали в материале о защите от брутфорса.

Тонкая настройка сценариев

Пороги срабатывания задаются в сценариях, но переопределять их лучше через профили и длительность бана. Файл /etc/crowdsec/profiles.yaml управляет тем, что происходит при срабатывании:

name: default_ip_remediation
filters:
  - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
  - type: ban
    duration: 8h
on_success: break

Увеличьте duration до 24h или 48h, если атаки повторяются с одних и тех же адресов. Для просмотра того, какие сценарии срабатывают чаще всего, снова пригодится cscli metrics — раздел «Local API Alerts».

Полезные команды на каждый день:

  • cscli hub update && cscli hub upgrade — обновить парсеры и сценарии из хаба;
  • cscli explain --file /var/log/auth.log --type syslog — отладка: показать, как парсится конкретный лог;
  • cscli alerts inspect <id> — детали конкретного алерта, включая события, которые к нему привели.

Частые вопросы

Можно ли использовать CrowdSec вместе с Fail2ban?

Технически да — они не конфликтуют, так как работают с разными цепочками файрвола. Но практического смысла мало: CrowdSec покрывает те же сценарии (SSH, Nginx, почта) и добавляет коллективный блок-лист. Держать оба — двойной парсинг одних и тех же логов. Разумнее мигрировать: установить CrowdSec, убедиться, что алерты идут, и затем отключить Fail2ban.

Сколько ресурсов потребляет CrowdSec?

На типичном VPS с одним сайтом агент потребляет 50–150 МБ RAM и незначительную долю CPU. Нагрузка растёт с объёмом логов: если Nginx пишет сотни строк в секунду, парсинг станет заметен. На тарифах от 8 ГБ RAM запас по ресурсам многократный.

Что делать, если CrowdSec заблокировал мой IP?

Зайдите на сервер через VNC-консоль в панели управления (она работает в обход сети) и выполните sudo cscli decisions delete --ip ВАШ_IP. Затем добавьте свой адрес в whitelist-парсер, как показано выше, чтобы ситуация не повторялась.

Обязательно ли отправлять данные в Central API?

Нет. Можно отключить регистрацию в CAPI и использовать CrowdSec как локальный детектор — закомментируйте учётные данные в /etc/crowdsec/online_api_credentials.yaml и перезапустите службу. Но тогда вы теряете главное преимущество — превентивную блокировку по общей базе. Передаются только временные метки, сработавший сценарий и IP атакующего, содержимое логов не отправляется.

Работает ли CrowdSec на NAT VPS?

Да. Агент и баунсер работают с любым типом виртуализации и сетевой конфигурации. На NAT VPS входящие соединения приходят только на проброшенные порты, поэтому поверхность атаки меньше, но защита SSH-порта всё равно необходима.

Итог

CrowdSec — это логичное развитие идеи Fail2ban: те же автоматические баны по логам, но с общей базой атакующих IP, готовыми коллекциями сценариев и нормальными метриками. Установка занимает 10 минут, а сервер начинает блокировать известных злоумышленников с первой минуты работы. Разверните CrowdSec на VPS от Cheap-Host: тариф Pro за 750₽/мес (12 vCPU, 16 ГБ RAM, 128 ГБ NVMe, KVM, Москва) с запасом хватит и для боевых сервисов, и для системы защиты. Сервер выдаётся за 45–60 секунд — закажите на https://cheap-host.onl/.

Читайте также