До основного вмісту

CrowdSec: сучасна IPS-система захисту для VPS

Безпека · 19.04.2026 · 4 хв читання
Ілюстрація до статті «CrowdSec: сучасна IPS-система захисту для VPS»

CrowdSec — це сучасна відкрита IPS (Intrusion Prevention System), яка працює як покращена заміна fail2ban. Ключова відмінність: усі користувачі CrowdSec діляться інформацією про атакуючі IP, формуючи колективну базу загроз із мільйонів джерел.

CrowdSec проти fail2ban

Функціяfail2banCrowdSec
АрхітектураМонолітнаAgent + Bouncer
Threat IntelligenceЛише локальні логиГлобальна shared DB
Проактивне блокуванняНемаєТак (відомі атакуючі)
Веб-дашбордНемаєТак (app.crowdsec.net)
Колекції сценаріївЛише regexYAML-сценарії, Hub
ЛіцензіяGPLMIT (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-bouncerHTTP-запит (рівень застосунку)На кожному сервері з 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 блокує чужий трафік.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці