Beide hulpmiddelen lezen logboeken en blokkeren adressen, en op het eerste gezicht is CrowdSec een Fail2ban met nieuwere code. Het verschil is wezenlijker, en het zit niet in de leeftijd van de code maar in de herkomst van de blokkeerbeslissing.

De opbouw

Fail2ban is één proces dat logboeken leest, treffers van reguliere uitdrukkingen telt en een firewallcommando aanroept. Elke beslissing valt op uw machine op basis van uw tellers. Er wordt niets ergens heen gestuurd, er zijn geen afhankelijkheden, en de configuratie bestaat uit tekstbestanden.

CrowdSec is in tweeën gedeeld, en dat is het belangrijkste om vóór de installatie te begrijpen. De agent zelf detecteert alleen: hij ontleedt logboeken, past scenario's toe en schrijft beslissingen naar zijn eigen database. Beslissingen worden uitgevoerd door een apart programma, de bouncer. Zonder geïnstalleerde bouncer draait CrowdSec, toont meldingen, houdt een beslissingenlijst bij — en blokkeert niets.

Dat is de vaakst voorkomende teleurstelling bij de eerste kennismaking: het hulpmiddel is geïnstalleerd, de aanvallen zijn zichtbaar, en het verkeer loopt precies zoals eerst.

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

Dat laatste commando moet minstens één geregistreerde regel tonen. Een lege lijst betekent dat er niet wordt geblokkeerd.

Het tweede verschil: gedeelde reputatie

Fail2ban kent alleen wat er bij u is gebeurd. Een adres dat gisteren honderd andermans servers bestookte, is in zijn ogen schoon totdat het bij u aanklopt — en zijn eerste vijf pogingen zijn gratis.

CrowdSec stuurt de signalen van zijn detecties naar een gemeenschappelijk netwerk en krijgt daaruit een lijst met adressen die bij anderen zijn opgemerkt. Praktisch effect: een merkbaar deel van de pogingen wordt vóór de eerste al afgesneden. Dat is vooral van belang tegen verspreide aanvallen — duizenden adressen met elk één poging, waar lokale tellers per definitie machteloos staan.

En dan wat u vooraf moet weten: de uitwisseling gaat twee kanten op. Uw server verlaten de adressen van de aanvallers en de soorten scenario's die afgingen. Volledig lokaal draaien kan — zonder aanmelding bij de cloudconsole — maar dan is ook de gemeenschappelijke lijst voor u niet beschikbaar en verdwijnt het belangrijkste voordeel. Dat is een bewuste keuze, geen configuratiedetail.

De commando's voor elke dag

sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25

metrics beantwoordt de vraag of de logboeken überhaupt worden gelezen: is het aantal ontlede regels nul, dan is de verzameling voor uw webserver niet geïnstalleerd of klopt het logpad niet. Dat is het op één na vaakst voorkomende geval van «het staat er en doet niets».

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

De middelen

CrowdSec is in Go geschreven en houdt zijn toestand in een database bij. Het geheugengebruik ligt in de orde van honderd megabyte, plus de bouncer. Op een server met een gigabyte is dat merkbaar, vanaf twee niet meer. Fail2ban is lichter — en doet minder.

Loont het beide te draaien

Ze zitten elkaar niet in de weg: de een schrijft zijn regels in de firewall, de ander de zijne, en een adres twee keer blokkeren schaadt niets. Een verstandige verdeling ziet er zo uit.

CrowdSec neemt het massale werk: SSH-raden, het aflopen van de webserver, bekende slechte adressen uit de gemeenschappelijke lijst. Fail2ban blijft waar u een eigen logboek met een eigen opmaak hebt, waarvoor een reguliere uitdrukking eenvoudiger te schrijven is dan een scenario — een zelfgebouwde toepassing, een zeldzame dienst, een bijzonder aanmeldformulier.

Moet u er één kiezen, dan is de maatstaf deze: op een server met een site waaraan voortdurend wordt gemorreld, levert CrowdSec meer op dankzij de gemeenschappelijke lijst. Op een server die alleen voor u via SSH met sleutels bereikbaar is, is het verschil klein — daar is het meeste werk al gedaan door de wachtwoorden uit te zetten.

Een gedeelde grens

Geen van beide beschermt tegen een kwetsbaarheid in een toepassing. Beide werken met de frequentie van verzoeken en de reputatie van een adres, en een verzoek dat een gat in een uitbreiding bij de eerste poging vanaf een schoon adres misbruikt, gaat langs beide heen. Dat is het werk van andere hulpmiddelen — een WAF op verzoekniveau en tijdige updates. Adressen blokkeren haalt de achtergrond weg, niet de oorzaak.

De praktische waarde van beide hangt ervan af of iemand naar het resultaat kijkt. Een stijgend aantal beslissingen, een scenario dat voor het eerst afgaat, een verschuiving in de landen waaruit de pogingen komen — dat is de informatie waarvoor het hulpmiddel is geïnstalleerd. Hoe die op één pagina oogt, toont de demo hieronder.