Обидва інструменти читають журнали й банять адреси, і на перший погляд 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 на рівні запиту й вчасних оновлень. Блокування адрес прибирає фон, а не причину.
Практична цінність і того, і того залежить від того, чи дивиться хтось на результат. Зростання кількості рішень, сценарій, що спрацював уперше, зміна країн, з яких ідуть спроби, — це і є інформація, заради якої інструмент ставили. Який вигляд це має на одній сторінці, показує демо нижче.