И двата инструмента четат журнали и блокират адреси, така че на пръв поглед 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 на ниво заявки и навременни обновявания. Блокирането на адреси премахва фона, а не причината.

Практическата стойност и на двата зависи от това дали някой гледа резултата. Растящ брой решения, сценарий, сработил за първи път, промяна на държавите, от които идват опитите — точно това са сведенията, заради които инструментът е бил поставен. Как изглеждат те на една страница, показва демонстрацията по-долу.