Проблема
Bruteforce-атаки на SSH, веб-формы и панели администрирования остаются одним из самых распространённых векторов вторжения. Классический Fail2Ban, установленный почти на каждом Linux-сервере, отлично блокирует одиночные IP-адреса после нескольких неудачных попыток, но не способен противостоять распределённым атакам, когда злоумышленник меняет IP-адреса или ведёт наступление через ботнет. Кроме того, Fail2Ban изолирован: каждый сервер ведёт свою локальную базу заблокированных адресов, не обмениваясь информацией с соседними узлами. Для более эффективной защиты нужна система, которая коллективно анализирует атаки и распространяет решения по всей инфраструктуре. CrowdSec решает именно эту задачу, превращая защиту от bruteforce из разрозненного набора локальных правил в централизованную, обновляемую в реальном времени систему безопасности с открытым исходным кодом.
Решение
CrowdSec это современный фреймворк для обнаружения и предотвращения вторжений, состоящий из двух основных компонентов. Лёгкий агент (демон) читает логи сервисов (SSH, Nginx, Apache и десятков других), анализирует их с помощью сценариев (collections) и при обнаружении атаки выносит решение: временно или перманентно заблокировать IP-адрес через bouncer (например, iptables, nftables или Cloudflare). Главное отличие от Fail2Ban наличие центрального API crowdsec, куда агенты (опционально) отправляют сигналы об атаках. Эти сигналы анализируются, и всем участникам сети рассылаются обновлённые списки вредоносных адресов. Таким образом, если на одном сервере зафиксирована атака, все остальные серверы в вашей инфраструктуре (и в сообществе) получают информацию о ней в течение минуты.
Официальная документация доступна на CrowdSec Documentation, руководство по установке в разделе Getting Started, описание архитектуры на Architecture Overview. Установка выполняется через официальный репозиторий, поддерживаются Debian, Ubuntu, RHEL и другие дистрибутивы.
Пошаговая инструкция
Шаг 1. Установка CrowdSec Security Engine (агента)
Добавьте официальный репозиторий CrowdSec и установите пакет crowdsec. Пример для Debian/Ubuntu:
bash
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt update
sudo apt install crowdsec -y
После установки служба запустится автоматически. Проверьте её статус:
bash
sudo systemctl status crowdsec
Агент начнёт мониторинг стандартных логов: /var/log/auth.log (SSH), /var/log/syslog, /var/log/nginx/access.log и других. Убедиться, какие коллекции активны, можно командой:
bash
sudo cscli collections list
Шаг 2. Установка bouncer для блокировки атак
Чтобы crowdsec не только обнаруживал, но и блокировал IP-адреса, установите bouncer. Самый распространённый crowdsec-firewall-bouncer-iptables, который добавляет правила в iptables/nftables.
bash
sudo apt install crowdsec-firewall-bouncer-iptables -y
Bouncer автоматически подписывается на решения агента и применяет их: временно блокирует IP при множественных неудачных попытках (по умолчанию на 4 часа) и перманентно при неоднократном попадании в бан.
Проверьте статус bouncer:
bash
sudo systemctl status crowdsec-firewall-bouncer
Документация по bouncer: CrowdSec Bouncers.
Шаг 3. Проверка и тестирование работы
По умолчанию crowdsec мониторит SSH. Проведите тестовую атаку (с другого хоста) несколько раз введите неверный пароль при подключении по SSH. Затем выполните на защищаемом сервере:
bash
sudo cscli decisions list
Вы увидите принятые решения: IP-адрес, причина (например, crowdsecurity/ssh-bf), тип (ban), длительность. Проверьте, что адрес заблокирован на уровне файрвола:
bash
sudo iptables -L -n | grep <IP-адрес>
Bouncer добавляет правила в цепочку CROWDSEC_CHAIN.
Шаг 4. Расширение мониторинга: Nginx, WordPress и другие сервисы
С помощью cscli можно установить дополнительные коллекции для защиты веб-приложений, баз данных, FTP и многого другого.
- Просмотрите доступные коллекции на CrowdSec Hub:
bash
sudo cscli collections list -a
- Установите коллекцию, например, для защиты WordPress:
bash
sudo cscli collections install crowdsecurity/wordpress
- Чтобы crowdsec начал читать лог конкретного сервиса, в сценарии коллекции уже прописан путь. Если лог лежит в нестандартном месте, можно создать файл ассоциации в
/etc/crowdsec/acquis.yaml(основной файл конфигурации источников логов). Пример для пользовательского пути:
yaml
filenames:
- /var/log/myapp/access.log
labels:
type: nginx
После изменения acquis.yaml перезапустите агент:
bash
sudo systemctl restart crowdsec
Документация по acquis.yaml: Acquisition Configuration.
Шаг 5. Подключение к Central API и использование Blocklists
CrowdSec предлагает бесплатный Central API для подписки на глобальные блок-листы и обмена информацией об атаках. Подключение опционально, но крайне полезно.
- Зарегистрируйте экземпляр:
bash
sudo cscli capi register
- Подпишитесь на один или несколько блок-листов (например, список известных брутфорс-IP). Просмотр доступных:
bash
sudo cscli blocklists list
- Подпишитесь:
bash
sudo cscli blocklists install crowdsecurity/bruteforce
Теперь ваш сервер будет автоматически получать обновления вредоносных IP-адресов, обнаруженных другими участниками сети crowdsec.
Официальная документация по Central API: CrowdSec CAPI.
Устранение распространённых проблем
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Агент запущен, но решения не принимаются | Коллекция не установлена или неверно указан путь к логам | Проверьте sudo cscli collections list. Убедитесь, что лог-файл существует и читаем (sudo -u crowdsec cat /var/log/auth.log). |
| Bouncer не добавляет правила в iptables | Пакет iptables не установлен или используется nftables без обратной совместимости | Установите iptables или выберите bouncer для nftables (crowdsec-firewall-bouncer-nftables). |
| Ошибка «connection refused» при регистрации CAPI | Сервер не может достучаться до api.crowdsec.net (порт 443) | Проверьте сетевой доступ: curl https://api.crowdsec.net. Откройте порт 443 исходящий. |
Решение ban активно слишком долго | Настройки длительности по умолчанию (4 часа) подходят не всем | Измените профили длительности в /etc/crowdsec/profiles.yaml. Подробнее в Profile Configuration. |
| Не устанавливаются коллекции из Hub | Устаревшая версия cscli или отсутствие интернета | Обновите crowdsec: sudo apt update && sudo apt upgrade crowdsec. Если интернета нет, рассмотрите локальное зеркало или ручную установку коллекций. |
CrowdSec выводит защиту серверов от bruteforce на принципиально новый уровень. В отличие от Fail2Ban, который работает локально и изолированно, crowdsec объединяет серверы в единую сеть обмена информацией об угрозах, что особенно ценно в распределённой инфраструктуре. Настройка занимает не более получаса, после чего вы получаете автоматически обновляемый щит, блокирующий как локальные атаки, так и адреса, замеченные на других узлах сообщества. Для большинства стандартных сценариев (SSH, веб-сервер) достаточно установки агента и bouncer, а для более сложных достаточно активировать дополнительные коллекции из официального хаба.







