Oba nástroje čtou logy a blokují adresy, takže na první pohled je CrowdSec Fail2ban s novějším kódem. Rozdíl je podstatnější a nespočívá ve stáří kódu, ale v tom, odkud pochází rozhodnutí o blokaci.

Stavba

Fail2ban je jediný proces, který čte logy, počítá shody regulárních výrazů a volá příkaz firewallu. Každé rozhodnutí padá na našem stroji na základě našich čítačů. Nikam se nic neposílá, závislosti nejsou a konfigurace jsou textové soubory.

CrowdSec je rozdělen na dvě části a to je nejdůležitější věc k pochopení před instalací. Samotný agent pouze detekuje: analyzuje logy, aplikuje scénáře a zapisuje rozhodnutí do vlastní databáze. Rozhodnutí vykonává samostatný program — bouncer. Bez nainstalovaného bounceru CrowdSec funguje, ukazuje výstrahy, vede seznam rozhodnutí — a nic neblokuje.

To je nejčastější zklamání při prvním setkání: nástroj nainstalovaný, útoky vidět, a provoz plyne přesně jako předtím.

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

Poslední příkaz by měl ukázat alespoň jeden registrovaný záznam. Prázdný seznam znamená, že se nic neblokuje.

Druhý rozdíl: sdílená reputace

Fail2ban ví jen to, co se dělo u nás. Adresa, která včera útočila na stovku cizích serverů, je pro něj čistá, dokud nezaklepe na naše dveře — a prvních pět pokusů má zadarmo.

CrowdSec posílá signály o svých detekcích do sdílené sítě a odtud dostává seznam adres zaznamenaných u ostatních. Praktický efekt: znatelná část pokusů se odřízne ještě před prvním. Význam to má zejména u distribuovaných útoků — tisíce adres po jednom pokusu, kde jsou lokální čítače bezmocné z principu.

A věc, kterou je dobré vědět předem: výměna je oboustranná. Náš server opouštějí adresy útočníků a typy scénářů, které se spustily. Zcela lokální provoz je možný — bez registrace v cloudové konzoli — ale pak není sdílený seznam dostupný ani nám a hlavní výhoda mizí. Je to vědomá volba, ne detail konfigurace.

Příkazy pro každodenní práci

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

metrics odpovídá na otázku, zda se logy vůbec čtou: je-li počet analyzovaných řádků nulový, kolekce pro náš webový server není nainstalovaná nebo je špatná cesta k logu. To je druhý nejčastější případ „stojí a nefunguje“.

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

Zdroje

CrowdSec je napsaný v Go a svůj stav drží v databázi. Spotřeba paměti je řádově sto megabajtů plus bouncer. Na serveru s gigabajtem je to znát, od dvou už ne. Fail2ban je lehčí, ale také dělá méně.

Zda mít oba

Nekolidují spolu: jeden zapisuje svá pravidla do firewallu, druhý svá, a dvojitá blokace téže adresy nikomu neuškodí. Rozumné rozdělení vypadá takto.

CrowdSec bere hromadné jevy: hádání hesel k SSH, skenování webového serveru, známé špatné adresy ze sdíleného seznamu. Fail2ban zůstává tam, kde máme vlastní log ve vlastním formátu, pro nějž je snazší napsat regulární výraz než scénář — vlastnoručně napsaná aplikace, vzácná služba, netypický přihlašovací formulář.

Je-li třeba vybrat jeden, orientační bod je tento: na serveru s webem, který někdo neustále prosvěcuje, dá CrowdSec díky sdílenému seznamu více. Na serveru dostupném jen vám přes SSH s klíči je rozdíl malý — tam už většinu práce udělalo vypnutí hesel.

Společné omezení

Ani jeden nechrání před zranitelností v aplikaci. Oba pracují s frekvencí požadavků a reputací adresy a požadavek zneužívající díru v rozšíření napoprvé a z čisté adresy projde kolem obou. To je úkol jiných nástrojů — WAF na úrovni požadavků a včasné aktualizace. Blokování adres odstraňuje pozadí, ne příčinu.

Praktická hodnota obou závisí na tom, zda se někdo dívá na výsledek. Rostoucí počet rozhodnutí, scénář, který se spustil poprvé, změna zemí, odkud pokusy přicházejí — to jsou právě ty informace, kvůli nimž se nástroj stavěl. Jak vypadají na jedné stránce, ukazuje ukázka níže.