CrowdSec — это открытый инструмент защиты сервера, который анализирует логи, находит подозрительное поведение и блокирует источники атак. Главное отличие от классических решений: установка CrowdSec подключает ваш сервер к коллективной базе — IP-адреса, замеченные в атаках на тысячи других машин, блокируются у вас превентивно. В этой статье разберём, как поставить CrowdSec на VPS с Ubuntu/Debian, настроить сценарии обнаружения и баунсер для файрвола, а также сравним его с Fail2ban.
Как работает CrowdSec
Архитектура CrowdSec состоит из трёх частей, и это важно понять до установки:
- Агент (crowdsec) — читает логи (SSH, Nginx, системный журнал), прогоняет их через парсеры и сценарии. Если поведение IP-адреса совпадает со сценарием атаки (перебор паролей, сканирование путей, флуд запросами), агент выносит «решение» (decision) о блокировке.
- Баунсер (bouncer) — отдельный компонент, который применяет решения на практике: добавляет правила в nftables/iptables, отдаёт 403 в Nginx и так далее. Без баунсера CrowdSec только детектирует, но ничего не блокирует.
- Центральный API (CAPI) — сюда агенты со всего мира анонимно отправляют сигналы об атакующих IP. Взамен вы получаете community blocklist — список адресов, которые прямо сейчас атакуют другие серверы.
Такой подход называют коллективной защитой: вы блокируете злоумышленника ещё до того, как он постучался именно к вам. Это принципиальное отличие от Fail2ban, который видит только собственные логи — подробнее о нём в статье про защиту от подбора паролей с Fail2ban.
CrowdSec или Fail2ban: краткое сравнение
| Критерий | CrowdSec | Fail2ban |
|---|---|---|
| Источник данных | Свои логи + общая база атак | Только свои логи |
| Язык и формат правил | 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/.