CrowdSec на сервере клиента: коллективная защита вместо fail2ban в 2026
Привет! Семёнов Евгений Сергеевич, директор ITFresh. За полтора года мы внедрили CrowdSec на целых 19 серверов наших клиентов в Москве. Это были самые разные системы, от обычных VPS с сайтами до терминальных серверов 1С, почтовых систем и даже корпоративных VPN-шлюзов. Хотите узнать, почему, по моему убеждению, CrowdSec на голову превосходит наш старый, добрый fail2ban? И почему мы активно переводим на него абсолютно всех, подчеркиваю, всех наших клиентов?
Почему fail2ban больше меня не устраивает
Десять лет я ставил 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 уже в вашем блоклисте. Ещё до того, как он вообще успеет хоть разок к вам постучаться!
Архитектура 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 |
А знаете, что самое крутое? Из этих 2063 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-пароли. Что дальше? Через три месяца количество таких попыток упало просто колоссально — с двух сотен в час до каких-то 5–10! Причём большая часть отсеивалась уже на уровне глобального блоклиста.
Сценарии для специфических задач
Бывает, что стандартные сценарии не дотягивают. Например, у нас был клиент — владелец интернет-магазина на WooCommerce. Там боты, представляете, нагло подбирали купоны на скидку прямо через страницу корзины! Но вот беда: готового сценария, который отследил бы «слишком много запросов к /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, конечно, прожорливее. Он съедает в четыре раза больше оперативной памяти и столько же CPU. Ну, это, по сути, наша плата за расширенный функционал. На современных VPS-ках с двумя и более гигабайтами оперативки это вообще не вопрос. Но если у вас старенький, маломощный VDS на 512 мегабайт, тогда, пожалуй, разумнее будет остаться на 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-атаки.
