Oba nástroje čítajú logy a blokujú adresy, takže na prvý pohľad je CrowdSec Fail2ban s novším kódom. Rozdiel je podstatnejší a nespočíva vo veku kódu, ale v tom, odkiaľ pochádza rozhodnutie o blokovaní.
Stavba
Fail2ban je jediný proces, ktorý číta logy, počíta zhody regulárnych výrazov a volá príkaz firewallu. Každé rozhodnutie padá na našom stroji na základe našich počítadiel. Nikam sa nič neposiela, závislosti nie sú a konfigurácie sú textové súbory.
CrowdSec je rozdelený na dve časti a to je najdôležitejšia vec na pochopenie pred inštaláciou. Samotný agent iba deteguje: analyzuje logy, aplikuje scenáre a zapisuje rozhodnutia do vlastnej databázy. Rozhodnutia vykonáva samostatný program — bouncer. Bez nainštalovaného bouncera CrowdSec funguje, ukazuje výstrahy, vedie zoznam rozhodnutí — a nič neblokuje.
To je najčastejšie sklamanie pri prvom stretnutí: nástroj nainštalovaný, útoky vidieť, a prevádzka plynie presne ako predtým.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Posledný príkaz by mal ukázať aspoň jeden registrovaný záznam. Prázdny zoznam znamená, že sa nič neblokuje.
Druhý rozdiel: zdieľaná reputácia
Fail2ban vie len to, čo sa dialo u nás. Adresa, ktorá včera útočila na stovku cudzích serverov, je preň čistá, kým nezaklope na naše dvere — a prvých päť pokusov má zadarmo.
CrowdSec posiela signály o svojich detekciách do zdieľanej siete a odtiaľ dostáva zoznam adries zaznamenaných u ostatných. Praktický efekt: badateľná časť pokusov sa odreže ešte pred prvým. Význam to má najmä pri distribuovaných útokoch — tisíce adries po jednom pokuse, kde sú lokálne počítadlá bezmocné z princípu.
A vec, ktorú je dobré vedieť vopred: výmena je obojstranná. Náš server opúšťajú adresy útočníkov a typy scenárov, ktoré sa spustili. Úplne lokálna prevádzka je možná — bez registrácie v cloudovej konzole — ale potom nie je zdieľaný zoznam dostupný ani nám a hlavná výhoda mizne. Je to vedomá voľba, nie detail konfigurácie.
Príkazy na každodennú prácu
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics odpovedá na otázku, či sa logy vôbec čítajú: ak je počet analyzovaných riadkov nulový, kolekcia pre náš webový server nie je nainštalovaná alebo je zlá cesta k logu. To je druhý najčastejší prípad „stojí a nefunguje“.
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Zdroje
CrowdSec je napísaný v Go a svoj stav drží v databáze. Spotreba pamäte je rádovo sto megabajtov plus bouncer. Na serveri s gigabajtom je to cítiť, od dvoch už nie. Fail2ban je ľahší, ale aj robí menej.
Či mať oba
Nekolidujú spolu: jeden zapisuje svoje pravidlá do firewallu, druhý svoje, a dvojité blokovanie tej istej adresy nikomu neuškodí. Rozumné rozdelenie vyzerá takto.
CrowdSec berie hromadné javy: hádanie hesiel k SSH, skenovanie webového servera, známe zlé adresy zo zdieľaného zoznamu. Fail2ban zostáva tam, kde máme vlastný log vo vlastnom formáte, pre ktorý je ľahšie napísať regulárny výraz než scenár — vlastnoručne napísaná aplikácia, zriedkavá služba, netypický prihlasovací formulár.
Ak treba vybrať jeden, orientačný bod je tento: na serveri s webom, ktorý niekto neustále presvecuje, dá CrowdSec vďaka zdieľanému zoznamu viac. Na serveri dostupnom len vám cez SSH s kľúčmi je rozdiel malý — tam už väčšinu práce urobilo vypnutie hesiel.
Spoločné obmedzenie
Ani jeden nechráni pred zraniteľnosťou v aplikácii. Oba pracujú s frekvenciou požiadaviek a reputáciou adresy a požiadavka zneužívajúca dieru v rozšírení naprvýkrát a z čistej adresy prejde okolo oboch. To je úloha iných nástrojov — WAF na úrovni požiadaviek a včasné aktualizácie. Blokovanie adries odstraňuje pozadie, nie príčinu.
Praktická hodnota oboch závisí od toho, či sa niekto pozerá na výsledok. Rastúci počet rozhodnutí, scenár, ktorý sa spustil prvýkrát, zmena krajín, odkiaľ pokusy prichádzajú — to sú práve tie informácie, kvôli ktorým sa nástroj staval. Ako vyzerajú na jednej stránke, ukazuje ukážka nižšie.