CrowdSec на сервере клиента: коллективная защита вместо fail2ban в 2026
Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш. За полтора года я внедрил CrowdSec на 19 серверах клиентов в Москве — VPS с сайтами, терминальные серверы 1С, почтовые серверы, корпоративные VPN-шлюзы. Расскажу, чем он лучше старого доброго fail2ban и почему я перевожу всех клиентов на эту систему.
Почему fail2ban больше меня не устраивает
10 лет я ставил fail2ban на все Linux-серверы, которые торчат наружу. Простая, надёжная штука: смотрит логи SSH, веб-сервера, почты, считает количество неудачных попыток за единицу времени, банит IP в iptables. Работает.
Но в 2024 году я столкнулся с двумя проблемами, которые fail2ban решить не может.
Первая. Современные ботнеты атакуют с тысяч разных IP по 1–2 попытки с каждого. Fail2ban настроен «5 неудачных попыток за 10 минут — бан». Бот делает 2 попытки и переходит на другой IP — бан не срабатывает, но бот в итоге подбирает пароль за неделю. У клиента в декабре 2024 так подобрали SSH к серверу 1С — пароль был «Server2023!», то самое, что я просил поменять трижды.
Вторая. Сканеры уязвимостей тестируют 500 разных URL подряд (поиск админок, форумов, старых CMS). Каждая попытка возвращает 404, а не 401. Fail2ban на это не реагирует, потому что в логах нет «failed login» — есть просто 404. Сервер тонет в шуме сканеров, а админка остаётся доступной.
CrowdSec решает обе проблемы по-другому: он смотрит не на ваш одинокий лог, а на глобальную базу атак. Если IP вчера сканировал 100 серверов в мире — сегодня он попадает в ваш блоклист до того, как успеет постучаться к вам.
Архитектура CrowdSec: что внутри
CrowdSec состоит из четырёх компонентов:
- Агент (crowdsec). Демон, который читает логи через парсеры, прогоняет через сценарии, выдаёт алерты.
- Local API (LAPI). REST API для управления агентами и баунсерами.
- Баунсеры (bouncers). Исполнители — реально блокируют IP. Есть для iptables, nftables, Nginx, HAProxy, Cloudflare, AWS WAF и т. д.
- Central API (CAPI). Облачный сервис CrowdSec, куда стекаются алерты от всех инсталляций и откуда раздаются глобальные блоклисты.
Логически работает так: агент видит в логах подозрительную активность, парсер вытаскивает IP и контекст, сценарий принимает решение (бан / не бан), решение записывается в базу LAPI, баунсер достаёт его и применяет в iptables / Nginx / любом другом месте. Параллельно алерт отправляется в CAPI, где обогащает глобальный блоклист.
Установка на Debian/Ubuntu
На Debian 12 / Ubuntu 22.04 ставится одной командой:
curl -s https://install.crowdsec.net | sudo sh
apt install crowdsec
apt install crowdsec-firewall-bouncer-iptables
После установки агент автоматически детектит установленные сервисы (sshd, nginx, apache) и подключает соответствующие коллекции парсеров. Проверяем:
cscli collections list
cscli parsers list
cscli scenarios list
cscli bouncers list
Должны увидеть включённые коллекции crowdsecurity/sshd, crowdsecurity/nginx, crowdsecurity/linux. Если что-то не подцепилось — добавляем вручную:
cscli collections install crowdsecurity/postfix
cscli collections install crowdsecurity/wordpress
cscli collections install crowdsecurity/iptables
Базовая настройка для типового сервера
Файл /etc/crowdsec/acquis.yaml описывает, какие логи читать. Для офисного сервера с Nginx и SSH мой стандартный набор:
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
---
filenames:
- /var/log/auth.log
labels:
type: syslog
---
journalctl_filter:
- "_SYSTEMD_UNIT=ssh.service"
labels:
type: syslog
После изменения acquis перезапускаем агент:
systemctl restart crowdsec
Whitelist собственных IP — обязательный шаг
Это первое, что я делаю на свежей инсталляции. Без whitelist я в первый же день забанил себя с домашнего IP при тестировании скриптов. Создаём /etc/crowdsec/parsers/s02-enrich/mywhitelist.yaml:
name: crowdsecurity/whitelists
description: "Whitelist office and admin IPs"
whitelist:
reason: "trusted networks"
ip:
- "127.0.0.1"
- "::1"
cidr:
- "192.168.0.0/16"
- "10.0.0.0/8"
- "172.16.0.0/12"
- "85.142.123.45/32" # IP офиса клиента
- "94.130.45.67/32" # IP АйТи Фреш
Запихиваю сюда сразу: офисные IP клиента, наши IP с АйТи Фреш, IP моего домашнего интернета и резервного 4G. После этого случайные баны самих себя становятся невозможны.
Подключение к Central API
Без подключения к CAPI вы не получаете главного — глобального блоклиста. Регистрируем инсталляцию:
cscli capi register
systemctl restart crowdsec
Теперь раз в час агент скачивает обновлённый блоклист из 70 000+ известных вредоносных IP и обновляет правила в iptables. Через сутки в логах появляется заметное количество дропов от этих IP — реальная польза от коллективного интеллекта.
Подключение console.crowdsec.net — мониторинг через веб
На бесплатном плане можно подключить инсталляцию к веб-консоли, где видны все алерты, баны, статистика по странам и так далее. Очень удобно для быстрого обзора:
cscli console enroll YOUR-ENROLL-KEY
После этого в личном кабинете на console.crowdsec.net появляется ваш сервер с дашбордом. Я подключаю туда все серверы клиентов — одно окно, в котором видно, что происходит на 19 серверах одновременно.
Реальные алерты с серверов клиентов
За первый месяц после установки CrowdSec на VPS интернет-магазина клиента я получил такую статистику атак:
| Тип атаки | Кол-во инцидентов | Заблокировано IP |
|---|---|---|
| SSH brute-force | 2 847 | 419 |
| HTTP bad-paths (поиск админок) | 15 932 | 1 087 |
| WordPress login brute-force | 892 | 156 |
| SQL injection попытки | 234 | 89 |
| Сканирование портов | 4 121 | 312 |
| ИТОГО за 30 дней | 24 026 | 2 063 |
Из этих 2 063 IP примерно 60 % были заблокированы превентивно — на основе CTI от других инсталляций CrowdSec. То есть атакующий ещё не успел даже постучаться к нашему серверу, но уже был в блоклисте.
CrowdSec для Windows: терминальный сервер 1С
В прошлом году выпустили нативную Windows-версию. Я её обкатал на терминальном сервере 1С у клиента в Подольске.
Установка — обычный MSI-инсталлятор. После установки агент сам подцепляется к Event Log Security и Application. Парсеры RDP brute-force и IIS bad-paths включаются командой:
cscli collections install crowdsecurity/windows-auth
cscli collections install crowdsecurity/iis
Баунсер для Windows реализован как Service, который меняет правила Windows Firewall. Работает через WMI, никаких сторонних утилит не нужно.
Эффект: за первый месяц на терминалке заблокировано 78 IP, пытавшихся подобрать RDP. После трёх месяцев количество попыток упало с 200 в час до 5–10 (упали уже на этапе глобального блоклиста).
Сценарии для специфических задач
Иногда нужны не стандартные сценарии. Например, у клиента — интернет-магазин на WooCommerce, и боты подбирают купоны на скидку через cart-страницу. Стандартного сценария «слишком много обращений к /cart» нет, пишу свой:
type: leaky
name: itfresh/coupon-bruteforce
description: "Detect coupon code brute-force"
debug: false
filter: "evt.Meta.log_type == 'http_access-log' && evt.Parsed.request matches '/cart/.*coupon'"
distinct: "evt.Parsed.request"
leakspeed: "10s"
capacity: 5
groupby: "evt.Meta.source_ip"
blackhole: 5m
labels:
service: http
type: bruteforce
remediation: true
Кладу файл в /etc/crowdsec/scenarios/coupon-bruteforce.yaml, перезапускаю агент. Теперь любой IP, который за 50 секунд проверил больше 5 разных купонов — баниться на 5 минут.
Сравнение с fail2ban в реальных цифрах
На сервере одного клиента я месяц гонял CrowdSec и fail2ban параллельно (с разными jails, чтобы не пересекались). Результаты:
| Метрика | fail2ban | CrowdSec |
|---|---|---|
| Заблокированных уникальных IP | 187 | 2 063 |
| Из них превентивно (до атаки) | 0 | 1 247 |
| Ложных банов (whitelist tweets) | 4 | 0 |
| Использование RAM | ~30 MB | ~120 MB |
| Использование CPU | ~0.5 % | ~2 % |
| Время на настройку под клиента | 2 часа | 3 часа |
CrowdSec потребляет в 4 раза больше RAM и в 4 раза больше CPU. Это плата за бóльшую функциональность. На современных VPS с 2+ GB RAM это не проблема. На старых маломощных VDS на 512 MB — лучше остаться на fail2ban.
Защитим серверы клиентов от современных атак
Я лично провожу аудит вашей серверной инфраструктуры и внедряю CrowdSec под ваши задачи. Бесплатный выезд по Москве и в радиусе 50 км от МКАД, поддержка 24/7 в рамках абонентского обслуживания.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по CrowdSec
- Чем CrowdSec отличается от fail2ban?
- Главное отличие — коллективный интеллект. CrowdSec обменивается данными об атаках с глобальным сообществом, поэтому ваш сервер блокирует IP, который атаковал кого-то другого ещё час назад. Fail2ban работает изолированно — учится только на собственных логах.
- Бесплатен ли CrowdSec?
- Базовая версия Community Edition полностью бесплатна и open source. Платные планы (от 50$ в месяц) дают премиум-блоклисты, multi-server console и SLA на поддержку. Для офисного сервера хватает бесплатной версии.
- Сколько ресурсов потребляет CrowdSec?
- На типовом VPS с 2 GB RAM и 2 vCPU агент потребляет 100–150 MB RAM и 1–3 % CPU. На пике атак потребление RAM до 250 MB. Лёгкое решение даже для слабых серверов.
- Можно ли запустить CrowdSec и fail2ban одновременно?
- Технически — да, они не конфликтуют. Практически — не нужно. Fail2ban будет дублировать работу CrowdSec и создавать путаницу в логах. Я рекомендую полностью переходить на CrowdSec.
- Поддерживает ли CrowdSec Windows-серверы?
- Да, есть нативная Windows-версия с парсерами Event Log. Поддерживается RDP brute-force, IIS-логи, MSSQL. На Windows я её ставил на терминальные серверы 1С — отлично закрывает RDP-атаки.