Oba narzędzia czytają dzienniki i blokują adresy, więc na pierwszy rzut oka CrowdSec to Fail2ban z nowszym kodem. Różnica jest istotniejsza i leży nie w wieku kodu, lecz w tym, skąd bierze się decyzja o blokadzie.

Budowa

Fail2ban to jeden proces, który czyta dzienniki, liczy dopasowania wyrażeń regularnych i wywołuje polecenie zapory. Każda decyzja zapada na naszej maszynie na podstawie naszych liczników. Nic nigdzie nie jest wysyłane, zależności nie ma, a konfiguracja to pliki tekstowe.

CrowdSec jest podzielony na dwie części i to najważniejsza rzecz do zrozumienia przed instalacją. Sam agent tylko wykrywa: analizuje dzienniki, stosuje scenariusze i zapisuje decyzje do własnej bazy. Decyzje wykonuje osobny program — bouncer. Bez zainstalowanego bouncera CrowdSec działa, pokazuje alerty, prowadzi listę decyzji — i niczego nie blokuje.

To najczęstsze rozczarowanie przy pierwszym zetknięciu: narzędzie zainstalowane, ataki widać, a ruch płynie dokładnie tak jak wcześniej.

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

Ostatnie polecenie powinno pokazać przynajmniej jeden zarejestrowany wpis. Pusta lista oznacza, że blokowania nie ma.

Druga różnica: wspólna reputacja

Fail2ban wie tylko to, co działo się u nas. Adres, który wczoraj atakował setkę cudzych serwerów, jest dla niego czysty, dopóki nie zapuka do naszych drzwi — a pierwsze pięć prób ma za darmo.

CrowdSec wysyła sygnały o swoich wykryciach do wspólnej sieci i otrzymuje stamtąd listę adresów zauważonych u innych. Efekt praktyczny: zauważalna część prób zostaje odcięta przed pierwszą. Ma to znaczenie zwłaszcza przy atakach rozproszonych — tysiące adresów po jednej próbie, gdzie lokalne liczniki są bezsilne z definicji.

I rzecz, o której warto wiedzieć z góry: wymiana jest dwustronna. Nasz serwer opuszczają adresy napastników i typy scenariuszy, które zadziałały. Praca całkowicie lokalna jest możliwa — bez rejestracji w konsoli chmurowej — ale wtedy wspólna lista też jest dla nas niedostępna i główna przewaga znika. To wybór świadomy, a nie drobiazg konfiguracyjny.

Polecenia na co dzień

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

metrics odpowiada na pytanie, czy dzienniki są w ogóle czytane: jeśli liczba przeanalizowanych wierszy wynosi zero, kolekcja dla naszego serwera WWW nie jest zainstalowana albo ścieżka do dziennika jest błędna. To drugi co do częstości przypadek „stoi i nie działa”.

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

Zasoby

CrowdSec napisano w Go i trzyma swój stan w bazie. Zużycie pamięci to rząd stu megabajtów plus bouncer. Na serwerze z gigabajtem to odczuwalne, od dwóch — już nie. Fail2ban jest lżejszy, ale i robi mniej.

Czy warto mieć oba

Nie kolidują ze sobą: jeden zapisuje swoje reguły w zaporze, drugi swoje, a podwójna blokada tego samego adresu nikomu nie szkodzi. Rozsądny podział wygląda tak.

CrowdSec bierze na siebie masówkę: zgadywanie haseł SSH, skanowanie serwera WWW, znane złe adresy ze wspólnej listy. Fail2ban zostaje tam, gdzie mamy własny dziennik we własnym formacie, dla którego łatwiej napisać wyrażenie regularne niż scenariusz — samodzielnie napisana aplikacja, rzadka usługa, nietypowy formularz logowania.

Jeśli trzeba wybrać jedno, punkt odniesienia jest taki: na serwerze z witryną, którą stale ktoś prześwietla, CrowdSec daje więcej dzięki wspólnej liście. Na serwerze dostępnym tylko dla nas po SSH z kluczami różnica jest niewielka — tam większość pracy wykonało już wyłączenie haseł.

Wspólne ograniczenie

Żadne z nich nie chroni przed podatnością w aplikacji. Oba pracują na częstotliwości żądań i reputacji adresu, a żądanie wykorzystujące dziurę we wtyczce za pierwszym razem i z czystego adresu przejdzie obok obu. To zadanie innych narzędzi — WAF-a na poziomie żądań i aktualizacji na czas. Blokowanie adresów usuwa tło, a nie przyczynę.

Praktyczna wartość obu zależy od tego, czy ktoś patrzy na wynik. Rosnąca liczba decyzji, scenariusz, który zadziałał po raz pierwszy, zmiana krajów, z których przychodzą próby — to właśnie informacje, dla których narzędzie stawiano. Jak wyglądają na jednej stronie, pokazuje demonstracja poniżej.