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.