Обидва інструменти читають журнали й банять адреси, і на перший погляд CrowdSec — це Fail2ban зі свіжішим кодом. Різниця між ними суттєвіша, і полягає вона не у віці коду, а в тому, звідки береться рішення про блокування.

Як вони влаштовані

Fail2ban — це один процес, який читає журнали, рахує збіги регулярних виразів і викликає команду брандмауера. Кожне рішення ухвалюється на вашій машині з ваших лічильників. Нікуди нічого не надсилається, залежностей немає, а конфігурація — текстові файли.

CrowdSec поділений на дві частини, і це головне, що треба зрозуміти до встановлення. Сам агент лише виявляє: розбирає журнали, застосовує сценарії й записує рішення у власну базу. Виконує рішення окремий застосунок — bouncer. Без встановленого bouncer CrowdSec працює, показує сповіщення, веде список рішень — і не блокує нічого.

Це найчастіше розчарування при першому знайомстві: інструмент встановлено, атаки видно, а трафік іде рівно як і раніше.

sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list

Ця остання команда має показати хоча б один зареєстрований запис. Порожній список означає, що блокування немає.

Друга відмінність: спільна репутація

Fail2ban знає лише те, що сталося у вас. Адреса, яка вчора ламала сотню інших серверів, для нього чиста, доки не постукає до вас, — і перші п’ять її спроб безкоштовні.

CrowdSec надсилає сигнали про те, що спрацювало, у спільну мережу й отримує назад список адрес, помічених на чужих серверах. Практичний ефект: помітна частина перебору відсікається до першої спроби. Це особливо важливо проти розподілених атак — тисячі адрес з однією спробою кожна, де локальні лічильники безсилі за визначенням.

І ось що варто знати заздалегідь: обмін іде в обидва боки. З вашого сервера йдуть адреси порушників і типи сценаріїв, які спрацювали. Повністю локальна робота можлива — без реєстрації у хмарній консолі, — але тоді й спільний список вам недоступний, і головна перевага зникає. Це свідомий вибір, а не деталь конфігурації.

Повсякденні команди

sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25

metrics відповідає на питання, чи читаються журнали взагалі: якщо кількість розібраних рядків дорівнює нулю, то колекцію для вашого вебсервера не встановлено або шлях до журналу неправильний. Це другий за поширеністю випадок «встановлено й не працює».

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

Ресурси

CrowdSec написано на Go, і стан він тримає в базі даних. Витрата пам’яті — близько сотні мегабайтів, плюс bouncer. На сервері з гігабайтом пам’яті це помітно; від двох і вище — ні. Fail2ban легший і робить менше.

Чи варто тримати обидва

Вони не конфліктують: один пише свої правила в брандмауер, другий — свої, а забанити ту саму адресу двічі нікому не шкодить. Розумний поділ має такий вигляд.

CrowdSec бере на себе масовий трафік: перебір SSH, сканування вебсервера, відомі погані адреси зі спільного списку. Fail2ban лишається там, де у вас власний журнал у власному форматі, для якого написати регулярний вираз простіше, ніж сценарій, — саморобний застосунок, рідкісна служба, конкретна форма входу.

Якщо треба вибрати щось одне, орієнтир такий: на сервері із сайтом, який постійно промацують, CrowdSec дає більше завдяки спільному списку. На сервері, доступному лише вам через SSH з ключами, різниця між ними невелика — більшу частину роботи там уже зроблено вимкненням паролів.

Спільне обмеження

Жоден не захищає від уразливості в застосунку. Обидва працюють із частотою запитів і репутацією адрес, а запит, який з першого разу експлуатує діру в плагіні з чистої адреси, пройде повз обох. Це робота інших інструментів — WAF на рівні запиту й вчасних оновлень. Блокування адрес прибирає фон, а не причину.

Практична цінність і того, і того залежить від того, чи дивиться хтось на результат. Зростання кількості рішень, сценарій, що спрацював уперше, зміна країн, з яких ідуть спроби, — це і є інформація, заради якої інструмент ставили. Який вигляд це має на одній сторінці, показує демо нижче.