Ambele instrumente citesc jurnale și blochează adrese, așa că la prima vedere CrowdSec este un Fail2ban cu cod mai nou. Diferența este mai importantă și nu stă în vechimea codului, ci în locul de unde vine decizia de blocare.
Structura
Fail2ban este un singur proces care citește jurnale, numără potrivirile expresiilor regulate și apelează comanda firewallului. Fiecare decizie se ia pe mașina noastră, pe baza contoarelor noastre. Nimic nu se trimite nicăieri, dependențe nu există, iar configurația constă în fișiere text.
CrowdSec este împărțit în două părți, și acesta este cel mai important lucru de înțeles înainte de instalare. Agentul propriu-zis doar detectează: analizează jurnale, aplică scenarii și scrie deciziile în propria bază de date. Deciziile le pune în aplicare un program separat — bouncerul. Fără bouncer instalat, CrowdSec funcționează, afișează alerte, ține o listă de decizii — și nu blochează nimic.
Aceasta este cea mai frecventă dezamăgire la prima întâlnire: instrumentul instalat, atacurile vizibile, iar traficul curge exact ca înainte.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Ultima comandă ar trebui să arate cel puțin o intrare înregistrată. O listă goală înseamnă că nu se blochează nimic.
A doua diferență: reputația partajată
Fail2ban știe doar ce s-a întâmplat la noi. O adresă care ieri a atacat o sută de servere străine este pentru el curată până când bate la ușa noastră — iar primele cinci încercări sunt gratuite.
CrowdSec trimite semnale despre detecțiile sale într-o rețea partajată și primește de acolo lista adreselor observate la alții. Efectul practic: o parte vizibilă din încercări este tăiată înainte de prima. Contează mai ales la atacurile distribuite — mii de adrese cu câte o încercare fiecare, unde contoarele locale sunt neputincioase prin definiție.
Și un lucru de știut din timp: schimbul este bidirecțional. De pe serverul nostru pleacă adresele atacatorilor și tipurile de scenarii declanșate. Funcționarea complet locală este posibilă — fără înregistrare în consola din cloud — dar atunci nici lista partajată nu ne este accesibilă, iar avantajul principal dispare. Este o alegere conștientă, nu un detaliu de configurare.
Comenzi pentru fiecare zi
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics răspunde la întrebarea dacă jurnalele sunt citite în general: dacă numărul de linii analizate este zero, colecția pentru serverul nostru web nu este instalată sau calea către jurnal este greșită. Este al doilea caz ca frecvență de „stă și nu funcționează”.
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Resurse
CrowdSec este scris în Go și își ține starea într-o bază de date. Consumul de memorie este de ordinul a o sută de megaocteți, plus bouncerul. Pe un server cu un gigaoctet se simte, de la doi în sus nu se mai simte. Fail2ban este mai ușor, dar și face mai puțin.
Dacă merită amândouă
Nu intră în conflict: unul își scrie regulile în firewall, celălalt pe ale sale, iar o blocare dublă a aceleiași adrese nu strică nimănui. O împărțire rezonabilă arată astfel.
CrowdSec preia fenomenele de masă: ghicirea parolelor SSH, scanarea serverului web, adresele rele cunoscute din lista partajată. Fail2ban rămâne acolo unde avem un jurnal propriu, în format propriu, pentru care este mai ușor de scris o expresie regulată decât un scenariu — o aplicație scrisă în casă, un serviciu rar, un formular de autentificare atipic.
Dacă trebuie ales unul singur, reperul este acesta: pe un server cu un site pe care cineva îl scanează constant, CrowdSec dă mai mult datorită listei partajate. Pe un server accesibil doar ție prin SSH cu chei, diferența este mică — acolo dezactivarea parolelor a făcut deja cea mai mare parte a treabei.
Limitarea comună
Niciunul nu protejează împotriva unei vulnerabilități din aplicație. Amândouă lucrează cu frecvența cererilor și cu reputația adresei, iar o cerere care exploatează o breșă dintr-o extensie din prima încercare și de la o adresă curată trece pe lângă amândouă. Aceasta este treaba altor instrumente — un WAF la nivel de cerere și actualizări la timp. Blocarea adreselor înlătură fondul, nu cauza.
Valoarea practică a ambelor depinde de faptul dacă cineva se uită la rezultat. Un număr crescând de decizii, un scenariu declanșat pentru prima dată, o schimbare a țărilor din care vin încercările — tocmai acestea sunt informațiile pentru care instrumentul a fost pus la treabă. Cum arată ele pe o singură pagină arată demonstrația de mai jos.