CrowdSec — це сучасна відкрита IPS (Intrusion Prevention System), яка працює як покращена заміна fail2ban. Ключова відмінність: усі користувачі CrowdSec діляться інформацією про атакуючі IP, формуючи колективну базу загроз із мільйонів джерел.
CrowdSec проти fail2ban
| Функція | fail2ban | CrowdSec |
|---|---|---|
| Архітектура | Монолітна | Agent + Bouncer |
| Threat Intelligence | Лише локальні логи | Глобальна shared DB |
| Проактивне блокування | Немає | Так (відомі атакуючі) |
| Веб-дашборд | Немає | Так (app.crowdsec.net) |
| Колекції сценаріїв | Лише regex | YAML-сценарії, Hub |
| Ліцензія | GPL | MIT (Community) |
Встановлення CrowdSec
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash
apt install crowdsec -y
# Встановити Nginx Bouncer (блокувальник)
apt install crowdsec-nginx-bouncer -y
# Або firewall bouncer
apt install crowdsec-firewall-bouncer-nftables -y
Встановлення колекцій сценаріїв
cscli collections list
cscli collections install crowdsecurity/nginx
cscli collections install crowdsecurity/wordpress
cscli collections install crowdsecurity/ssh-bf
cscli collections install crowdsecurity/linux-lpe
systemctl reload crowdsec
Керування блокуваннями
cscli decisions list
cscli decisions add --ip 1.2.3.4 --duration 24h --reason "manual ban"
cscli decisions delete --ip 1.2.3.4
cscli alerts list --limit 20
Моніторинг метрик
cscli metrics
cscli bouncers list
cscli machines list
CrowdSec Hub: На app.crowdsec.net доступний безкоштовний дашборд із графіками атак, картою джерел загроз і керуванням вашими агентами.
CrowdSec не замінює налаштування firewall і SSH hardening — це додатковий шар. Використовуйте його в парі з ufw/nftables і правилами sshd_config.
Розбір типових проблем під час впровадження CrowdSec
level=fatal msg="unable to run local API: listen tcp 127.0.0.1:8080: bind: address already in use"— порт 8080 за замовчуванням уже зайнятий іншим сервісом (Node.js-застосунком, панеллю, тестовим PHP-сервером). Змінітьapi.server.listen_uriу/etc/crowdsec/config.yamlна вільний порт.- Команда
cscli decisions addвідпрацювала без помилок, а трафік атакуючого всі одно проходить — decision це лише запис у базі LAPI. Реальне блокування виконує bouncer, і без встановленого та налаштованого bouncer'а трафік ніхто не зупинить. cscli bouncers listпоказує bouncer із порожньою колонкою Last Pull — він зареєстрований, але не забирає рішення. Майже завжди причина в неправильномуapi_urlчиapi_keyу його конфігу, наприклад/etc/crowdsec/bouncers/crowdsec-nginx-bouncer.yaml.cscli metricsпоказує нульові події за встановленим сценарієм — джерело логів зacquis.yamlне читається: неправильний шлях до файлу або в користувача, від імені якого працює crowdsec, немає прав на читання логу.- nginx-bouncer не запускається на стоковому Nginx із репозиторію дистрибутива —
crowdsec-nginx-bouncerвимагає Nginx, зібраний ізngx_http_lua_module, або OpenResty; звичайна збірка Nginx з apt цей модуль не містить.
Типи bouncer'ів і що вони блокують
| Bouncer | Рівень блокування | Де встановлюється | Обмеження |
|---|---|---|---|
| nginx-bouncer | HTTP-запит (рівень застосунку) | На кожному сервері з Nginx | Потребує Lua-модуль, не впливає на не-HTTP трафік |
| firewall-bouncer (nftables/iptables) | Мережевий пакет | На хості цілком | Блокує будь-який трафік, але не бачить HTTP-заголовки й URL |
| cloudflare-bouncer | Периметр CDN | В акаунті Cloudflare | Працює лише якщо весь трафік іде через Cloudflare |
| Власний bouncer через API | Будь-який, який ви реалізуєте | Власний скрипт, що звертається до LAPI | Потребує власної розробки та підтримки |
Коли CrowdSec не підходить
- Одиночний сервер із невисоким трафіком, де fail2ban уже закриває потреби — CrowdSec додає agent, LAPI і bouncer, а отже більше рухомих частин і памʼяті заради не набагато більшого виграшу.
- Ізольована мережа без доступу до інтернету — обмін колективною базою атакуючих із CAPI CrowdSec потребує звʼязку із зовнішнім сервісом; у закритому контурі залишиться лише локальний аналіз за сценаріями, без мережевого ефекту.
- Сервер із дуже обмеженою памʼяттю (512 MB — 1 GB) — агент CrowdSec, локальна база рішень і bouncer разом вимогливіші до ресурсів, ніж fail2ban.
- Потрібне блокування за складними поведінковими ознаками після логіну (device fingerprint, аномалії сесії) — це завдання рівня застосунку чи спеціалізованого anti-fraud, а не IPS рівня CrowdSec.
Перевірка, що блокування справді працює
# Додати тестове блокування ВЛАСНОГО зовнішнього IP на короткий час
cscli decisions add --ip 1.2.3.4 --duration 1m --reason "test block"
# Переконатися, що рішення потрапило до бази LAPI
cscli decisions list
# Перевірити із заблокованого IP, що зʼєднання дійсно не проходить
curl -I https://example.com
# Зняти тестове блокування, не чекаючи закінчення строку
cscli decisions delete --ip 1.2.3.4
Замініть 1.2.3.4 на власну зовнішню адресу і виконуйте перевірку саме з неї, а не з сервера — інакше третя команда покаже успіх локально, але нічого не скаже про те, чи справді bouncer блокує чужий трафік.