В любой инфраструктуре, где есть публичные сервисы, постоянно происходят попытки несанкционированного доступа. Это могут быть переборы SSH-паролей, сканирование портов, попытки эксплуатации уязвимостей, атаки на веб-приложения, боты, парсеры и другой нежелательный трафик.
Классический подход — вручную настраивать firewall, использовать Fail2Ban или разбирать логи после инцидента. Но в современных условиях этого часто недостаточно: атаки идут массово, источники быстро меняются, а инфраструктура становится всё более распределённой.
CrowdSec решает эту задачу более гибко. Это open-source система, которая анализирует поведение по логам, выявляет подозрительные IP и применяет к ним действия: блокировку, капчу, ограничение доступа или передачу решения в firewall, CDN, WAF или другое средство защиты. CrowdSec описывает себя как open-source и participative security solution для обнаружения и защиты от вредоносных IP.
Что такое CrowdSec
CrowdSec — это система поведенческого анализа и автоматической реакции на атаки.
Она работает по простой логике:
- читает логи сервисов;
- применяет парсеры и сценарии обнаружения;
- определяет подозрительное поведение;
- создаёт alert;
- формирует decision;
- передаёт решение bouncer-компоненту;
- bouncer блокирует или ограничивает атакующий IP.
По смыслу CrowdSec похож на Fail2Ban, но с более современной архитектурой, готовыми коллекциями сценариев и возможностью использовать коллективную threat intelligence базу. CrowdSec документация отдельно описывает Detection Scenarios, Virtual-Patching Collections и возможность локально определять и блокировать плохие IP по логам и запросам.
Зачем это необходимо
CrowdSec нужен для снижения количества успешных атак и автоматизации первичной защиты.
Он помогает закрыть типовые проблемы:
- перебор SSH-паролей;
- brute-force авторизации в веб-приложениях;
- сканирование портов;
- попытки эксплуатации известных уязвимостей;
- подозрительные HTTP-запросы;
- атаки на WordPress, Nginx, Apache, Traefik и другие сервисы;
- массовый вредоносный трафик с известных IP;
- повторяющиеся попытки доступа к административным панелям.
Особенно полезен CrowdSec на публичных серверах, где открыты SSH, HTTP, HTTPS, VPN, панели управления, API или другие внешние сервисы.
Чем CrowdSec отличается от обычного firewall
Firewall обычно работает по заранее заданным правилам:
разрешить этот порт
запретить этот IP
разрешить эту сеть
запретить этот протокол
CrowdSec работает иначе. Он смотрит на поведение.
Например, если один IP за короткое время сделал много неудачных попыток входа по SSH, CrowdSec может определить это как brute-force и автоматически заблокировать источник.
То есть firewall — это статическая защита, а CrowdSec — динамическая защита на основе событий.
Основные компоненты CrowdSec
CrowdSec состоит из нескольких ключевых частей.
| Компонент | Назначение |
|---|---|
| Security Engine | Основной движок анализа логов и событий |
| Parser | Разбирает строки логов и приводит их к понятному виду |
| Scenario | Описывает подозрительное поведение |
| Collection | Набор готовых парсеров, сценариев и конфигураций |
| Alert | Событие, созданное при срабатывании сценария |
| Decision | Решение о реакции, например ban |
| Bouncer | Компонент, который реально применяет блокировку |
| Local API | Локальный API CrowdSec для взаимодействия компонентов |
| Console | Веб-интерфейс для просмотра событий и управления |
В документации CrowdSec указано, что collections — это наборы парсеров, сценариев и других элементов, scenarios — это поведенческие детекторы, а alerts создаются при срабатывании сценария или AppSec-правила.
Что такое bouncer
Bouncer — это компонент, который применяет решение CrowdSec на практике.
Сам CrowdSec может определить, что IP вредоносный. Но чтобы реально заблокировать его, нужен bouncer.
Примеры bouncer-компонентов:
- firewall bouncer;
- nginx bouncer;
- traefik bouncer;
- cloudflare bouncer;
- wordpress bouncer;
- php bouncer;
- openresty bouncer;
- captcha bouncer.
Например, firewall bouncer может добавлять IP в blacklist на уровне iptables или nftables. В OpenWrt-документации CrowdSec firewall bouncer описывается как пакет, который получает решения из CrowdSec API и добавляет их в blacklist для поддерживаемых firewall.
Что такое CrowdSec Hub
CrowdSec Hub — это репозиторий готовых конфигураций.
В нём можно найти:
- collections;
- parsers;
- scenarios;
- postoverflows;
- AppSec rules;
- готовые наборы для популярных сервисов.
Например, можно установить коллекцию для SSH, Nginx, Apache, WordPress, Traefik, Docker и других сервисов.
CrowdSec Hub в официальной документации описан как репозиторий готовых конфигурационных файлов, которые поддерживаются командой CrowdSec и сообществом.
Пример сценария работы
Допустим, на сервере открыт SSH.
В логах появляются события:
Failed password for root from 1.2.3.4
Failed password for admin from 1.2.3.4
Failed password for test from 1.2.3.4
CrowdSec читает эти логи, применяет SSH parser, затем сценарий brute-force. Если количество попыток превышает порог, создаётся alert и decision.
После этого firewall bouncer блокирует IP:
1.2.3.4 -> ban
В результате атакующий IP больше не может подключаться к серверу.
Установка CrowdSec на Linux
Для Debian/Ubuntu установка обычно выполняется через официальный репозиторий CrowdSec:
curl -s https://install.crowdsec.net | sudo sh
sudo apt update
sudo apt install -y crowdsec
После установки проверяем статус:
sudo systemctl status crowdsec
Проверяем версию:
cscli version
Проверяем установленные коллекции:
sudo cscli collections list
Установка firewall bouncer
Чтобы CrowdSec не только обнаруживал атаки, но и блокировал IP на уровне firewall, устанавливается bouncer.
Для nftables:
sudo apt install -y crowdsec-firewall-bouncer-nftables
Для iptables:
sudo apt install -y crowdsec-firewall-bouncer-iptables
После установки проверяем сервис:
sudo systemctl status crowdsec-firewall-bouncer
Проверяем список bouncer:
sudo cscli bouncers list
Установка коллекции для SSH
Для защиты SSH можно установить коллекцию:
sudo cscli collections install crowdsecurity/sshd
Перезапускаем CrowdSec:
sudo systemctl reload crowdsec
Проверяем, что коллекция установлена:
sudo cscli collections list | grep sshd
Проверка событий
Посмотреть alerts:
sudo cscli alerts list
Посмотреть decisions:
sudo cscli decisions list
Посмотреть метрики:
sudo cscli metrics
Проверить, какие файлы логов читает CrowdSec:
sudo cscli machines list
Или посмотреть конфигурацию acquisition:
sudo cat /etc/crowdsec/acquis.yaml
Пример acquisition для SSH
CrowdSec должен знать, какие логи читать.
Пример для SSH:
source: file
filenames:
- /var/log/auth.log
labels:
type: syslog
После изменения конфигурации нужно перезапустить CrowdSec:
sudo systemctl restart crowdsec
Пример защиты Nginx
Для Nginx можно установить коллекцию:
sudo cscli collections install crowdsecurity/nginx
Пример acquisition:
source: file
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
Перезапуск:
sudo systemctl restart crowdsec
Проверка:
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
Пример защиты Docker-сервисов
Если сервисы работают в Docker, CrowdSec можно настроить на чтение Docker logs.
Типовой вариант — использовать отдельный контейнер CrowdSec и дать ему доступ к логам контейнеров или Docker socket. Но с Docker socket нужно быть аккуратным: это чувствительный доступ, который фактически даёт широкие возможности управления Docker-хостом.
Более безопасный вариант — прокидывать только нужные логи:
volumes:
- /var/log/nginx:/var/log/nginx:ro
- /var/log/auth.log:/var/log/auth.log:ro
И уже по ним выполнять анализ.
Ручное добавление IP в ban
IP можно заблокировать вручную:
sudo cscli decisions add --ip 1.2.3.4 --duration 4h --type ban
Проверить:
sudo cscli decisions list
Удалить решение:
sudo cscli decisions delete --ip 1.2.3.4
Пример использования в инфраструктуре
CrowdSec можно поставить на серверы, где есть:
- публичный SSH;
- reverse proxy;
- Nginx;
- Apache;
- Traefik;
- VPN;
- GitLab;
- WordPress;
- API;
- панели администрирования;
- Docker-сервисы.
Например, для сервера с Nginx и SSH логика будет такая:
auth.log ---> CrowdSec ---> SSH brute-force detection ---> firewall bouncer ---> ban IP
nginx.log ---> CrowdSec ---> HTTP attack detection -------> firewall bouncer ---> ban IP
Что можно мониторить в Zabbix
CrowdSec хорошо дополняется мониторингом.
В Zabbix можно контролировать:
- запущен ли сервис CrowdSec;
- запущен ли firewall bouncer;
- количество active decisions;
- количество alerts;
- количество заблокированных IP;
- ошибки в логах CrowdSec;
- доступность Local API;
- наличие обновлений collections;
- размер логов;
- дату последней успешной обработки событий.
Примеры команд для мониторинга:
sudo cscli decisions list -o json
sudo cscli alerts list -o json
sudo cscli metrics
systemctl is-active crowdsec
systemctl is-active crowdsec-firewall-bouncer
Преимущества CrowdSec
| Преимущество | Описание |
|---|---|
| Open-source | Можно использовать бесплатно и разворачивать самостоятельно |
| Поведенческий анализ | Система реагирует на действия атакующего, а не только на статические правила |
| Готовые коллекции | Для популярных сервисов уже есть готовые сценарии |
| Bouncer-архитектура | Можно применять решения через firewall, WAF, CDN, reverse proxy |
| Коллективная защита | Можно использовать данные сообщества о вредоносных IP |
| Гибкость | Подходит для Linux-серверов, веб-сервисов, reverse proxy и контейнеров |
| Интеграции | Есть варианты интеграции с firewall, Nginx, Traefik, Cloudflare, WordPress и другими системами |
Ограничения и важные моменты
CrowdSec не является полной заменой firewall, WAF, IDS/IPS или нормальной hardening-политики.
Его лучше рассматривать как дополнительный слой защиты.
Важно учитывать:
- если логи не подключены, CrowdSec не увидит атаку;
- если bouncer не установлен, CrowdSec будет только обнаруживать, но не блокировать;
- неправильная настройка сценариев может привести к ложным срабатываниям;
- доступ к Local API не нужно открывать в интернет;
- Docker socket лучше не отдавать без необходимости;
- перед массовым внедрением лучше протестировать правила на одном сервере.
Рекомендуемая схема внедрения
Оптимальный порядок внедрения:
- Установить CrowdSec на один тестовый сервер.
- Подключить анализ SSH-логов.
- Установить firewall bouncer.
- Проверить alerts и decisions.
- Добавить Nginx или другой reverse proxy.
- Настроить уведомления.
- Подключить мониторинг в Zabbix.
- После тестирования масштабировать на остальные серверы.
Базовые команды администратора
Проверить статус CrowdSec:
sudo systemctl status crowdsec
Проверить bouncer:
sudo cscli bouncers list
Проверить alerts:
sudo cscli alerts list
Проверить блокировки:
sudo cscli decisions list
Установить коллекцию:
sudo cscli collections install crowdsecurity/sshd
Обновить Hub:
sudo cscli hub update
Обновить установленные элементы:
sudo cscli hub upgrade
Посмотреть метрики:
sudo cscli metrics
Итог
CrowdSec — это удобный инструмент для автоматической защиты серверов и сервисов от массовых атак. Он анализирует логи, определяет подозрительное поведение, создаёт решения и через bouncer-компоненты применяет блокировки.
Решение хорошо подходит как дополнительный слой безопасности для публичных Linux-серверов, reverse proxy, веб-приложений, Docker-инфраструктуры и сервисов с открытым доступом в интернет.
Главная ценность CrowdSec — автоматизация реакции на типовые атаки и возможность использовать коллективную базу вредоносных IP, не ограничиваясь только локальными правилами firewall.
Комментариев пока нет.