Begge værktøjer læser logfiler og blokerer adresser, så ved første øjekast er CrowdSec et Fail2ban med nyere kode. Forskellen er mere væsentlig end som så, og den ligger ikke i kodens alder, men i, hvor afgørelsen om blokering kommer fra.

Opbygningen

Fail2ban er én enkelt proces, der læser logfiler, tæller træf mod regulære udtryk og kalder firewallens kommando. Hver afgørelse træffes på vores maskine ud fra vores tællere. Intet sendes nogen steder, der findes ingen afhængigheder, og konfigurationen er tekstfiler.

CrowdSec er delt i to dele, og det er det vigtigste at forstå før installationen. Selve agenten opdager blot: den analyserer logfiler, anvender scenarier og skriver afgørelser til sin egen database. Afgørelserne føres ud i livet af et separat program — en bouncer. Uden en installeret bouncer virker CrowdSec, viser advarsler, fører en afgørelsesliste — og blokerer intet.

Det er den hyppigste skuffelse ved første møde: værktøjet installeret, angrebene synlige, og trafikken flyder præcis som før.

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

Den sidste kommando skal vise mindst én registreret post. En tom liste betyder, at der ikke blokeres.

Den anden forskel: delt omdømme

Fail2ban ved kun det, der er sket hos os. En adresse, der i går angreb hundrede andre servere, er for den ren, indtil den banker på vores dør — og de fem første forsøg er gratis.

CrowdSec sender signaler om sine opdagelser til et delt netværk og får derfra en liste over adresser, der er set hos andre. Den praktiske effekt: en mærkbar del af forsøgene skæres fra før det første. Det betyder især noget ved distribuerede angreb — tusindvis af adresser med ét forsøg hver, hvor lokale tællere per definition er magtesløse.

Og én ting at vide på forhånd: udvekslingen går begge veje. Fra vores server forlader angribernes adresser og hvilken type scenarie, der blev udløst. Helt lokal drift er mulig — uden registrering i skykonsollen — men så er den delte liste heller ikke tilgængelig for os, og hovedfordelen forsvinder. Det er et bevidst valg og ingen opsætningsdetalje.

Kommandoer til 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ørgsmålet, om logfilerne overhovedet læses: er antallet af analyserede linjer nul, er samlingen til vores webserver ikke installeret, eller stien til logfilen er forkert. Det er det næsthyppigste tilfælde af »det står og gør ingenting«.

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

Ressourcer

CrowdSec er skrevet i Go og holder sin tilstand i en database. Hukommelsesforbruget ligger i størrelsesordenen hundrede megabyte plus bounceren. På en server med en gigabyte mærkes det, fra to og opefter ikke længere. Fail2ban er lettere, men gør også mindre.

Har du brug for begge

De kolliderer ikke: den ene skriver sine regler i firewallen, den anden sine, og en dobbelt blokering af samme adresse skader ingen. En fornuftig arbejdsdeling ser sådan ud.

CrowdSec tager massetilfældene: adgangskodegætteri mod SSH, scanning af webserveren, kendte dårlige adresser fra den delte liste. Fail2ban bliver tilbage, hvor vi har en egen logfil i eget format, hvor det er lettere at skrive et regulært udtryk end et scenarie — en egenudviklet applikation, en usædvanlig tjeneste, en anderledes loginformular.

Skal du vælge ét, er målestokken denne: på en server med en hjemmeside, der konstant gennemlyses, giver CrowdSec mere takket være den delte liste. På en server, kun du når over SSH med nøgler, er forskellen lille — der gjorde frakoblingen af adgangskoder allerede det meste af arbejdet.

Den fælles begrænsning

Ingen af dem beskytter mod en sårbarhed i applikationen. Begge arbejder på forespørgselsfrekvens og adressens omdømme, og en forespørgsel, der udnytter et hul i en udvidelse første gang og fra en ren adresse, går forbi dem begge. Det er andre værktøjers opgave — en WAF på forespørgselsniveau og opdateringer i tide. Adresseblokering fjerner baggrunden, ikke årsagen.

Den praktiske værdi af begge afhænger af, om nogen ser på resultatet. Et voksende antal afgørelser, et scenarie der blev udløst for første gang, en ændring i hvilke lande forsøgene kommer fra — det er netop de oplysninger, værktøjet blev sat op for. Hvordan de ser ud på én side, viser demonstrationen nedenfor.