Open-source IDS/IPS с коллаборативной базой IP-репутации. Анализирует логи, обнаруживает атаки, блокирует IP, обменивается данными с сообществом. Написан на Go.

Почему не Cloudflare

Cloudflare де-факто не работает в РФ с 2025 года (троттлинг до 16 КБ/соединение). CrowdSec — self-hosted альтернатива для IP-репутации и bot protection.

Архитектура

Nginx логи → CrowdSec Engine (парсит, ищет паттерны)
                  ↓
            Local API (хранит decisions: ban/captcha/throttle)
                  ↓
            Bouncer (применяет decisions)
                  ↓
            Central API (обмен IP-репутацией с сообществом)

Bouncer

Bouncer — компонент, который исполняет решения Engine. Варианты:

BouncerКак работаетСложность
Firewall (iptables/nftables)Блокирует на уровне ОС. Не трогает nginxМинимальная
Nginx (Lua)access_by_lua_block в nginx. Требует OpenRestyСредняя
Traefik, HAProxyПлагины для соответствующих проксиСредняя

Для малого проекта: firewall bouncer — самый простой путь, не нужно менять nginx.

Коллаборативная IP-репутация

  1. Engine обнаруживает атаку, банит IP
  2. На Central API отправляется: timestamp + scenario + IP (без payload)
  3. Central API курирует: honeypots, canary-списки, cross-validation
  4. Обратно приходит персонализированный Community Blocklist

Условие: бесплатные пользователи получают blocklist только при регулярной контрибуции (quid pro quo).

Anti-scraping

Из коробки: brute-force, сканеры (по 404/403 ответам, User-Agent). Для скрейпинга — кастомный YAML-сценарий (leaky bucket на количество запросов с IP).

Чего нет: browser fingerprinting, JS challenges, CAPTCHA. Основная сила — IP-репутация и поведенческий анализ логов.

Docker-деплой

services:
  crowdsec:
    image: crowdsecurity/crowdsec:latest
    volumes:
      - ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - nginx-logs:/var/log/nginx:ro
      - crowdsec-db:/var/lib/crowdsec/data
      - crowdsec-config:/etc/crowdsec
    environment:
      COLLECTIONS: "crowdsecurity/nginx crowdsecurity/base-http-scenarios"
      BOUNCER_KEY_nginx: "your-bouncer-api-key"
    mem_limit: 256m
    cpus: "0.5"

Ресурсы: ~100-256 MB RAM. Один контейнер + bouncer на хосте.

Metabase dashboard

Опциональный dashboard потребляет 1-2 GB RAM. Для маленького VPS не ставить — использовать cscli CLI.

Free vs Paid

ВозможностьFreePaid (от $200/мес)
Engine + все scenariosДаДа
Community BlocklistДо 3 списковБольше
Web Console (базовая)ДаДа
Premium BlocklistsНетДа
CTI APIНетДа

Для малого проекта бесплатного тарифа достаточно.

Связанные заметки