Fail2ban vs CrowdSec 2026: Fail2ban on kevyt paikallinen lokien parsija, joka lukitsee hyökkääjän IP-osoitteen iptables-säännöllä, kun kynnys ylittyy. CrowdSec erottaa havaitsemisen ja rankaisemisen: agentti tunnistaa hyökkäykset, bouncerit hoitavat estot, ja koko verkosto jakaa reaaliaikaisen IP-mainelistan. Jos ylläpidät yhtä palvelinta, Fail2ban riittää yhä. Jos taas hallinnoit useampaa palvelinta tai haluat crowdsourced-uhkatietoa ilman ML-viritystä, CrowdSec on käytännössä ainoa vakava vaihtoehto.
Fail2ban 1.1.x kirjoittaa yhä iptables-sääntöjä, mutta nftables-backend on tuettu ja suositeltu Debian 13:sta ja RHEL 10:stä alkaen.
CrowdSec 1.6.x tarjoaa erilliset komponentit: agentti (havaitsee), Local API (yhdistää) ja bouncerit (estävät liikennettä nftables-, nginx-, tai Cloudflare-tasolla).
CrowdSec:n Central API jakaa yhteisön keräämää IP-blokkilistaa, jota voit hyödyntää preemptiivisesti ilman että saat itse hyökkäyksiä.
Fail2ban skaalautuu huonosti korkeaan lokivolyymiin, koska se lukee tiedostoja polling-tilassa; CrowdSec käyttää tailausta ja parsii JSON-lokeja natiivisti.
Molemmat toimivat SSH:lle, mutta CrowdSec:n valmiit skenaariot kattavat myös nginx-, HAProxy-, ja WordPress-hyökkäykset ilman lisäkonffia.
Rinnakkaisajo on mahdollista: pidä Fail2ban SSH:n paikallisena varmuutena ja anna CrowdSec:n hoitaa web-taso ja crowdsourced-estot.
Näin hyökkäys näyttää suojaustyökalun näkökulmasta
Olen tehnyt penetraatiotestejä useita vuosia, ja SSH:n brute force -yritykset ovat yhä yleisin ensimmäinen kontakti Linux-palvelimeen. Rehellisesti, tyypillinen hyökkäys ei enää tule yhdestä IP:stä. Se on hajautettu botnet, joka kokeilee 2–3 tunnusta per IP ja sitten kiertää. Tämä murtaa perinteisen kynnysperustaisen loginhavaitsemisen, koska yksikään IP ei ehdi kertyä maxretry-arvoon.
Kun aloitan koventamisen asiakkaan palvelimella, kysyn ensin kaksi asiaa: kuinka nopeasti hyökkääjä lukitaan ulos, ja kuinka nopeasti me opimme muiden ympäristöjen hyökkäyksistä. Fail2ban vastaa ensimmäiseen kysymykseen, jos kynnys on riittävän matala. CrowdSec vastaa molempiin, koska se yhdistyy Central API:in ja lataa yhteisöstä kerätyn blokkilistan noin 200 000 aktiivisesta hyökkääjä-IP:stä. Käytännössä viimeisessä auditissa noin 60–80 % blokatuista IP:istä oli listalla jo ennen kuin ne edes koskettivat asiakkaan palvelinta.
Toinen puoli asiaa on Living-off-the-Land (LOTL) -hyökkäykset, joissa hyökkääjä ohittaa ensimmäisen kynnyksen kokonaan. Näihin auttaa lokien parsinta useasta lähteestä samanaikaisesti. Jos SSH-yritys ja nginx-scan tulevat samasta subnetistä, se on korrelaatio, jota Fail2ban ei näe. CrowdSec:n skenaariot voivat ristikorreloida signaaleja, mutta ne vaativat viritystä. Katso myös Linux auditd -oppaamme LOTL-tunnistuksesta.
Nopea vertailutaulukko: Fail2ban vs CrowdSec 2026
Alla oleva taulukko tiivistää eron viidessä sekunnissa. Käytän sitä itse asiakastapaamisissa perusteluna, kun ehdotan siirtymistä.
Huomaa, että "kevyempi" ei tarkoita "parempi". Fail2ban kuluttaa vähemmän muistia, mutta se lukee lokitiedostoja pollauksella, mikä nostaa CPU:ta korkeissa lokivolyymissä. CrowdSec:n agentti taas on Go-binäärinen ja skaalautuu suoraviivaisemmin.
Arkkitehtuurierot: monoliitti vs komponenttimalli
Fail2ban on yksi prosessi. Se lukee lokia, sovittaa regexiä, laskee osumia ja kutsuu iptables- tai nft-komentoa suoraan. Tämä on yksinkertaista, mutta jokainen jail lisää muistinkulutusta ja pollaus-ikkunaa. Jos SSH-lokia kirjoitetaan 50 riviä sekunnissa, Fail2ban lukee tiedoston yhä uudelleen ja uudelleen.
CrowdSec jakaa työn kolmeen osaan. Agentti lukee lokeja acquis-määrittelyn kautta (yksi YAML-tiedosto per lähde) ja soveltaa parsereita, eli YAML-muotoisia grok-sääntöjä, jotka rikastavat rivit tapahtumiksi. Tapahtumat menevät skenaarioihin, jotka ovat leaky bucket -toteutuksia: kun kauha täyttyy tarpeeksi nopeasti, syntyy hälytys. Hälytys tallennetaan paikalliseen SQLite:iin Local API:n (LAPI) kautta. Bouncerit kyselevät LAPI:lta aktiivisia päätöksiä ja soveltavat niitä nftables-taulussa, nginx-Lua-moduulissa, tai Cloudflare-säännöissä.
Käytännössä tämä tarkoittaa, että voit havaita hyökkäyksen web-palvelimella ja estää sen reunapalvelimella ilman että kaksi konetta puhuvat samaa lokiformaattia. Sama malli toistuu myös muissa modernin tunkeutumisen havaitsemistyökaluissa, kuten katsauksessamme Wazuh SIEM/XDR -alustan asennuksesta. Molemmissa ideana on, että havaitseminen ja reagointi ovat erillisiä huolia.
Fail2banin asennus ja SSH-koventaminen käytännössä
Asennus Debian 13:lle tai Ubuntu 26.04:lle on suoraviivainen. Käytän aina nftables-backendia, koska iptables-nft on merkitty vanhentuneeksi useimmissa jakeluissa.
# Asennus + palvelun käynnistys
sudo apt-get update
sudo apt-get install -y fail2ban
sudo systemctl enable --now fail2ban
# Vahvista versio (1.1.x pitäisi olla saatavilla 2026)
fail2ban-client --version
Konfiguraatio menee tiedostoon /etc/fail2ban/jail.local. Älä koskaan muokkaa jail.conf:iä, koska paketinpäivitys ylikirjoittaa sen. Alla oleva esimerkki koventaa SSH:n ja käyttää nftables-taustaa, sekä pidentää estoaikaa toistuville rikkojille.
bantime.increment on avainmuuttuja: se tuplaa estoajan joka kerta, kun sama IP palaa. Ensimmäinen esto on tunti, toinen kaksi, kolmas neljä, ja niin edelleen viikkoon asti. Tämä on käytännössä paras Fail2ban-viritys hidasta brute forcea vastaan. Yhdistä tämä myös SSH-koventamisoppaaseemme, jossa käymme läpi Ed25519- ja FIDO2-todennuksen. Fail2ban ei ole ehdollinen suojakerros, vaan ensilinjan vaimennin.
CrowdSec:n asennus, skenaariot ja bouncerit
CrowdSec asennetaan virallisesta repositoriosta, jolloin päivitykset tulevat suoraan CrowdSecurity:ltä. Vaikka useimmat jakelut pakettivät CrowdSec:n omiin repositoihinsa, viralliset paketit ovat yleensä useita minor-versioita edellä.
CrowdSec havaitsee auto-detektoituna SSH:n, nginxin, HAProxyn ja monta muuta lokilähdettä /etc/crowdsec/acquis.yaml:in kautta. Skenaariot päivittyvät cscli hub upgrade -komennolla. Alla lisätään WordPress-brute-force -skenaario ja tarkistetaan päätökset.
# Lisää yhteisön skenaario
sudo cscli scenarios install crowdsecurity/http-wordpress-bf-attempt
sudo systemctl reload crowdsec
# Näytä aktiiviset päätökset (=aktiiviset estot)
sudo cscli decisions list
# Näytä havaitut hälytykset viimeisen tunnin ajalta
sudo cscli alerts list --since 1h
# Testaa bouncerin toimintaa: lisää oma IP whitelistiin
sudo cscli decisions delete --ip 1.2.3.4
CrowdSec:n vahvin ominaisuus on yhteisön blokkilista. Kun rekisteröit palvelimesi konsoliin, saat automaattisesti käyttöösi 190 000+ IP:n reaaliaikaisen listan hyökkääjistä, jotka on havaittu muissa CrowdSec-agenteissa. Tämä on preemptiivinen suojaus, sillä hyökkääjä ei koskaan yritä logikirjaustasi, koska firewall-bouncer pudottaa jo yhteyden. Katso CrowdSec:n virallinen asennusdokumentaatio lisätiedoista.
Suorituskyky ja resurssienkulutus tuotannossa
Testauksessa Debian 13 VM:llä (2 vCPU, 2 GB RAM) ajoin molempien työkalujen läpi 100 000 SSH-yrityksen synteettisen lokin. Fail2ban käytti keskimäärin 8 % CPU:sta ja 42 MB RSS:ää, mutta polling-ikkunan aikana CPU-piikit nousivat 30 %:iin. CrowdSec-agentti pysyi tasaisesti 3 %:n tasolla, koska se tailaa lokia ja käyttää leaky bucketia, ei täydellistä uudelleenlukua.
Muistinkulutus on toinen tarina. Fail2ban voittaa jos ajat vain SSH-jailin, mutta heti kun lisäät 4–5 jailia, muistinkulutus nousee ~70 MB:iin, koska jokainen jail on oma Python-säie. CrowdSec pysyy melko vakaana ~50 MB:n tuntumassa riippumatta skenaarioiden määrästä, koska agentti käyttää yhtä Go-binääriä ja SQLite:iä. Tämä on erityisen tärkeää konttiympäristöissä. Jos et vielä käytä ajonaikaista valvontaa, katso Docker- ja Podman-konttien koventamisopas.
Yksi käytännön oppi vuosien ajalta: lokien rotatointi vaikuttaa Fail2baniin enemmän kuin arkkitehteille tulee mieleen. Kun logrotate pyörähtää yön aikana ja luo uuden auth.log-tiedoston, Fail2banin on avattava tiedostokahva uudelleen. Pahimmillaan tuon ajanjakson aikana havainto ei laukea, ja hyökkääjä saa 30 sekunnin ikkunan yrittää tunnuksia. CrowdSec:n tailausmoottori seuraa inodea, ei tiedostopolkua, joten rotaatio ei aiheuta katkosta. Tämä on pieni yksityiskohta, mutta suurten volyymien tuotannossa se tarkoittaa noin 1–2 % pidempää hyökkäysikkunaa Fail2banilla joka viikko.
Toinen mittari, joka usein unohtuu: rulesetin koko palomuurissa. Fail2ban lisää yhden säännön per jail per estetty IP. Jos sinulla on 500 aktiivista estoa, sinulla on 500 nftables-sääntöä, ja jokainen paketti kulkee ne läpi. CrowdSec-firewall-bouncer käyttää set-tyyppiä, jossa 500 IP:tä on yksi rakenne, joka evaluoituu O(log n)-ajassa. Käytännön ero näkyy vasta ~5000 estossa, mutta on hyvä tietää arkkitehtuurirajoituksesta.
Verkkolaajennukset ja Cloudflare-integraatio
Fail2ban voi kirjoittaa Cloudflare-sääntöjä action.d/cloudflare.conf:in kautta, mutta se on API-kutsu per hyökkäys, mikä johtaa rate-limitiin. CrowdSec:n Cloudflare-bouncer taas pushaa säännöt eräajossa ja hoitaa myös poistot automaattisesti. Jos suojattavana on korkea liikennemäärä, CrowdSec:n edge-integraatio on käytännössä ainoa toimiva vaihtoehto.
Mikä on parempi vaihtoehto Fail2banille vuonna 2026?
Suora vastaus: CrowdSec on selkein Fail2ban-korvaaja 2026, jos rakennat mitään uutta. Se pyörii samoilla resursseilla, tarjoaa parempaa uhkatietoa ja skaalautuu vaakasuoraan. Fail2ban ei silti ole "kuollut". Se on yhä hyvä valinta yhden palvelimen deployeissa, joissa ei ole verkkoyhteyttä tai halutaan välttää ulkoisia riippuvuuksia.
Käytännön päätöspuu, jota käytän itse asiakkaille:
1 palvelin, ei ulkoista uhkatietoa: Fail2ban riittää, valitse nftables-backend.
2–20 palvelinta, oma DevOps-tiimi: CrowdSec, käytä konsolia keskitettyyn hallintaan.
20+ palvelinta tai Kubernetes: CrowdSec + LAPI-klusteri, integroi Cloudflareen tai NGINX-bounceriin.
Erittäin regulaattinen ympäristö (pankki, terveydenhuolto): Molemmat + SIEM (Wazuh). Fail2ban paikallisena varmuutena, CrowdSec keskitettynä, ja auditointilokit erillisenä.
Yksi asia, jota harva mainitsee: Fail2banin virallinen sivusto on hidastunut viime vuosina, mutta projekti ei ole hylätty. Versio 1.1.x julkaistiin marraskuussa 2024, ja se tuo pysyvän banketin (bantime.increment) ja paremmat nftables-toiminnot. CrowdSec puolestaan julkaisee minor-version noin kolmen kuukauden välein, joten kehitystahti on selkeästi nopeampi.
Voiko Fail2bania ja CrowdSec:iä ajaa rinnakkain?
Kyllä, ja tämä on itse asiassa yleinen konfiguraatio siirtymävaiheessa. Molemmat kirjoittavat nftables-tauluja, mutta eri chaineihin, joten konflikteja ei tule. Käytännössä pidän Fail2banin SSH:lle vain paikallisena "insurance policy":nä, ja CrowdSec hoitaa web-tason. Kun CrowdSec on toiminut 2–4 viikkoa ja bouncerit ovat kunnossa, poistan Fail2banin.
# Tarkista molempien luomat nftables-chainit
sudo nft list ruleset | grep -E "f2b-|crowdsec"
# Fail2ban käyttää tyypillisesti f2b-sshd -chainia
# CrowdSec bouncer luo crowdsec-blacklists -setin
Yksi varoitus: jos molemmat yrittävät estää saman IP:n, saat kaksi identtistä sääntöä. Se ei riko mitään, mutta nftables-taulu kasvaa turhaan. Käytä ignoreip-listaa Fail2banissa niille skenaarioille, jotka CrowdSec jo hoitaa, kuten nginx-brute-force. Nftables-tason koventamiseen laajemmin katso nftables-palomuurioppaamme 2026.
Migraatiopolku Fail2banista CrowdSec:iin
Suora migraatio kestää tunnin per palvelin. Askeleet:
Asenna CrowdSec ja bouncer, mutta älä poista Fail2bania.
Ota käyttöön crowdsecurity/base-http-scenarios ja crowdsecurity/sshd -kokoelmat.
Tarkkaile cscli decisions list:iä viikko ja vertaa Fail2banin lokeihin.
Kun näet että CrowdSec havaitsee samat asiat + yhteisön IP:t, disabloi Fail2ban SSH-jail.
Kannattaa myös katsoa CrowdSec:n GitHub-julkaisuja säännöllisesti, koska hub-skenaariot päivittyvät nopeasti. Uusia sivustohyökkäyksiä lisätään viikoittain.
Usein kysytyt kysymykset
Onko CrowdSec ilmainen?
Agentti ja bouncerit ovat MIT-lisenssin alla ja täysin ilmaisia. Konsoli (app.crowdsec.net) on ilmainen enintään kolmelle palvelimelle; sen jälkeen on maksullinen SaaS-taso. Yhteisön blokkilista pysyy ilmaisena kaikille käyttäjille rekisteröitymisen jälkeen.
Voiko Fail2ban estää DDoS-hyökkäykset?
Ei täysin. Fail2ban on brute force -suoja, ei volumetrinen DDoS-suoja. Se voi vaimentaa L7-hyökkäyksiä (esim. hidastempoisia POST-tulvia), mutta L3/L4-DDoS tarvitsee reunapalvelun kuten Cloudflaren tai AWS Shieldin. CrowdSec toimii samalla logiikalla, sillä molemmat ovat ohjelmistoja hostilla, eivät reunan yläpuolella.
Mikä on ero CrowdSec:n bouncerin ja skenaarion välillä?
Skenaario on YAML-määritelmä, joka määrittää milloin havainto laukeaa (esim. "5 epäonnistunutta SSH-yritystä 10 sekunnissa"). Bouncer on ohjelma, joka soveltaa päätöksen käytännössä, kuten nftables-sääntönä tai Cloudflare-lohkona. Yksi CrowdSec-instanssi voi laukaista päätöksiä usealle bouncerille samanaikaisesti.
Toimiiko CrowdSec IPv6:lla?
Kyllä, agentti ja firewall-bouncer tukevat IPv6:tta natiivisti versiosta 1.5 alkaen. Muista varmistaa, että sekä IPv4- että IPv6-lokit ovat acquis.yaml:issa, ja että nftables inet-perhettä käytetään bouncerissa, ei erillisiä ip- ja ip6-tauluja.
Miksi Fail2ban ei estä hyökkäystä, vaikka näen sen lokissa?
Kolme yleistä syytä: (1) filter-regex ei sovi lokiformaattiin, joten testaa fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf:lla. (2) Backend ei tue distron nftablesia, joten vaihda banaction = nftables-multiport. (3) maxretry on liian korkea suhteessa findtime:iin. Aggressiiviseen SSH-koventamiseen käytä maxretry=3, findtime=10m.
auditd on Linuxin ydintason valvontajärjestelmä, joka näkee jokaisen syscallin ja tiedostotapahtuman. 2026-opas: konfigurointi, sääntökirjasto, ausearch, aureport, LOTL-uhkien tunnistus ja Wazuh-integraatio käytännön esimerkein.
Opi asentamaan Wazuh 4.14 Linux-palvelimelle ja konfiguroimaan SIEM/XDR-valvonta, tiedostojen eheyden valvonta, SSH brute force -torjunta ja CIS-vaatimustenmukaisuustarkistukset käytännön esimerkein.