CrowdSec: коллективная защита серверов от атак и подозрительных IP

CrowdSec — это open-source решение для защиты серверов и сервисов от brute-force, сканирования, атак на веб-приложения и другой подозрительной активности. Система анализирует логи, выявляет атакующих, блокирует их локально и может использовать коллективную базу вредоносных IP.

В любой инфраструктуре, где есть публичные сервисы, постоянно происходят попытки несанкционированного доступа. Это могут быть переборы SSH-паролей, сканирование портов, попытки эксплуатации уязвимостей, атаки на веб-приложения, боты, парсеры и другой нежелательный трафик.

Классический подход — вручную настраивать firewall, использовать Fail2Ban или разбирать логи после инцидента. Но в современных условиях этого часто недостаточно: атаки идут массово, источники быстро меняются, а инфраструктура становится всё более распределённой.

CrowdSec решает эту задачу более гибко. Это open-source система, которая анализирует поведение по логам, выявляет подозрительные IP и применяет к ним действия: блокировку, капчу, ограничение доступа или передачу решения в firewall, CDN, WAF или другое средство защиты. CrowdSec описывает себя как open-source и participative security solution для обнаружения и защиты от вредоносных IP.


Что такое CrowdSec

CrowdSec — это система поведенческого анализа и автоматической реакции на атаки.

Она работает по простой логике:

  1. читает логи сервисов;
  2. применяет парсеры и сценарии обнаружения;
  3. определяет подозрительное поведение;
  4. создаёт alert;
  5. формирует decision;
  6. передаёт решение bouncer-компоненту;
  7. 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 лучше не отдавать без необходимости;
  • перед массовым внедрением лучше протестировать правила на одном сервере.

Рекомендуемая схема внедрения

Оптимальный порядок внедрения:

  1. Установить CrowdSec на один тестовый сервер.
  2. Подключить анализ SSH-логов.
  3. Установить firewall bouncer.
  4. Проверить alerts и decisions.
  5. Добавить Nginx или другой reverse proxy.
  6. Настроить уведомления.
  7. Подключить мониторинг в Zabbix.
  8. После тестирования масштабировать на остальные серверы.

Базовые команды администратора

Проверить статус 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.

Действия с записью
Назад в блог

Комментарии

Комментариев пока нет.

Войдите, чтобы оставить комментарий.