Begge verktøyene leser logger og blokkerer adresser, så ved første øyekast er CrowdSec et Fail2ban med nyere kode. Forskjellen er mer vesentlig enn som så, og den ligger ikke i kodens alder, men i hvor avgjørelsen om blokkering kommer fra.
Oppbygningen
Fail2ban er én enkelt prosess som leser logger, teller treff mot regulære uttrykk og kaller brannmurens kommando. Hver avgjørelse tas på vår maskin ut fra våre tellere. Ingenting sendes noe sted, det finnes ingen avhengigheter, og konfigurasjonen er tekstfiler.
CrowdSec er delt i to deler, og det er det viktigste å forstå før installasjonen. Selve agenten bare oppdager: den analyserer logger, anvender scenarioer og skriver avgjørelser til sin egen database. Avgjørelsene iverksettes av et eget program — en bouncer. Uten en installert bouncer virker CrowdSec, viser varsler, fører en avgjørelsesliste — og blokkerer ingenting.
Det er den vanligste skuffelsen ved første møte: verktøyet installert, angrepene synlige, og trafikken flyter nøyaktig som før.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Den siste kommandoen skal vise minst én registrert oppføring. En tom liste betyr at ingen blokkering skjer.
Den andre forskjellen: delt omdømme
Fail2ban vet bare det som har skjedd hos oss. En adresse som i går angrep hundre andre servere, er for den ren til den banker på vår dør — og de fem første forsøkene er gratis.
CrowdSec sender signaler om sine oppdagelser til et delt nettverk og får derfra en liste over adresser som er sett hos andre. Den praktiske effekten: en merkbar del av forsøkene kuttes før det første. Det betyr særlig noe ved distribuerte angrep — tusenvis av adresser med ett forsøk hver, der lokale tellere per definisjon er maktesløse.
Og én ting å vite på forhånd: utvekslingen går begge veier. Fra serveren vår forlater angripernes adresser og hvilken type scenario som ble utløst. Helt lokal drift er mulig — uten registrering i skykonsollen — men da er den delte listen heller ikke tilgjengelig for oss, og hovedfordelen forsvinner. Det er et bevisst valg og ingen oppsettsdetalj.
Kommandoer for hverdagen
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics svarer på spørsmålet om loggene i det hele tatt leses: er antallet analyserte linjer null, er samlingen for webserveren vår ikke installert, eller stien til loggen er feil. Det er det nest vanligste tilfellet av «det står og gjør ingenting».
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Ressurser
CrowdSec er skrevet i Go og holder tilstanden sin i en database. Minnebruken ligger i størrelsesorden hundre megabyte pluss bounceren. På en server med én gigabyte merkes det, fra to og oppover ikke lenger. Fail2ban er lettere, men gjør også mindre.
Trenger du begge
De kolliderer ikke: den ene skriver sine regler i brannmuren, den andre sine, og en dobbel blokkering av samme adresse skader ingen. En fornuftig arbeidsdeling ser slik ut.
CrowdSec tar massetilfellene: passordgjetting mot SSH, skanning av webserveren, kjente dårlige adresser fra den delte listen. Fail2ban blir igjen der vi har en egen logg i eget format, der det er lettere å skrive et regulært uttrykk enn et scenario — en egenskrevet applikasjon, en uvanlig tjeneste, et annerledes innloggingsskjema.
Må du velge ett, er målestokken denne: på en server med et nettsted som stadig gjennomlyses, gir CrowdSec mer takket være den delte listen. På en server bare du når over SSH med nøkler, er forskjellen liten — der gjorde avslåingen av passord allerede det meste av arbeidet.
Den felles begrensningen
Ingen av dem beskytter mot en sårbarhet i applikasjonen. Begge arbeider på forespørselsfrekvens og adressens omdømme, og en forespørsel som utnytter et hull i en utvidelse første gang og fra en ren adresse, går forbi dem begge. Det er andre verktøys oppgave — en WAF på forespørselsnivå og oppdateringer i tide. Adresseblokkering fjerner bakgrunnen, ikke årsaken.
Den praktiske verdien av begge avhenger av om noen ser på resultatet. Et voksende antall avgjørelser, et scenario som ble utløst for første gang, en endring i hvilke land forsøkene kommer fra — det er nettopp de opplysningene verktøyet ble satt opp for. Hvordan de ser ut på én side, viser demonstrasjonen nedenfor.