CrowdSec vs Fail2ban v roku 2026: Migrácia z regex banov na kolaboratívnu IPS

CrowdSec na Linuxe 2026: prečo Fail2ban už nestačí, kompletný návod na inštaláciu s nftables bouncerom, behaviorálne scenáre, paralelná migrácia bez výpadku a kolaboratívne threat intelligence.

CrowdSec vs Fail2ban 2026: Migrácia Guide

Každý server vystavený do internetu dostáva denne tisíce automatizovaných útokov — SSH brute force, scannery webových zraniteľností, credential stuffing boti a v roku 2026 už čoraz častejšie aj útoky riadené AI agentmi. Klasický Fail2ban bol spoľahlivým štítom posledné dve dekády (sám som ho na vlastných VPS používal odkedy som začal s Linuxom), ale jeho regex-based prístup s lokálnymi ban listami už jednoducho nestíha. CrowdSec prináša behaviorálne scenáre, kolaboratívne threat intelligence a — čo je možno najdôležitejšie — oddelenie detekcie od remediácie. Tento sprievodca vás prevedie kompletnou migráciou: od architektúry, cez inštaláciu na Ubuntu 24.04 / Debian 12 s nftables bouncerom, až po paralelné nasadenie oboch nástrojov bez toho, aby vám padla produkcia.

Prečo Fail2ban v roku 2026 už nestačí

Fail2ban funguje na jednoduchom princípe: čítaj log súbory, aplikuj regex filter, a ak match prekročí prah, pridaj IP adresu do iptables/firewalld pravidla. Funkčné, jasné, predvídateľné. Lenže tento model má v roku 2026 niekoľko zásadných limitov, ktoré sa ťažko obchádzajú:

  • Lokálna myopia. Server vidí len útoky, ktoré dorazia priamo na neho. Ak útočník skenuje 10 000 serverov v poradí, vy ho zablokujete až vtedy, keď príde rad na vás. Bohužiaľ.
  • Regex bez kontextu. Filter dokáže overiť „riadok zodpovedá vzoru", ale nedokáže vyjadriť „5 zlyhaných pokusov za 2 minúty z rôznych účtov" bez krkolomnej kombinácie failregex a maxretry.
  • Škálovanie firewallu. Každá zablokovaná IP je samostatné iptables pravidlo. Pri 50 000 banoch sa kernel network stack jednoducho zadusí.
  • IPv6 ako dodatočná komplikácia. Fail2ban podporuje IPv6, ale konfiguračne je to (povedzme to úprimne) bolesť — najmä pri whitelistingu a action šablónach.
  • Žiadna distribuovaná architektúra. V cloude s 30 microservices kontajnermi musíte Fail2ban inštalovať na každý uzol zvlášť, bez akejkoľvek centrálnej koordinácie.

CrowdSec je oproti tomu napísaný v Go (čo je v praxi 60-násobne rýchlejšie ako Python Fail2ban), používa nftables IP sets namiesto jednotlivých pravidiel a — to je tá hlavná pointa — pracuje s globálnou kolaboratívnou databázou škodlivých IP adries. Takže ak útočník napadne CrowdSec inštanciu vo Frankfurte, vaša inštancia v Bratislave dostane upozornenie skôr, než útok dorazí. Pekne preventívne.

Architektúra CrowdSec: čo nahrádza Fail2ban jails

Aby ste pochopili, prečo migrácia nie je „len výmena nástroja", musíte poznať tok dát v CrowdSecu:

Log Sources → Acquisitions → Parsers → Scenarios → Decisions (LAPI) → Remediation (Bouncers)

Security Engine (Agent)

Agent je ten komponent, ktorý zodpovedá Fail2ban procesu. Číta logy z definovaných zdrojov (journald, súbory, syslog, k8s API), prechádza ich cez parser chain, ktorá raw riadok premení na štruktúrovaný záznam, a tieto záznamy potom porovnáva so scenármi.

Local API (LAPI)

LAPI je „mozog" inštalácie. Prijíma alerts od agenta, rozhoduje o remediácii (block, captcha, throttle), persistuje rozhodnutia do SQLite (predvolene) alebo PostgreSQL/MySQL a synchronizuje sa s Central API CrowdSec siete pre crowd-sourced threat intelligence. Na single-host setupe beží LAPI v rovnakom procese ako agent — takže si toho nevšimnete.

Bouncers (vykonávacie moduly)

Bouncery sú ekvivalent Fail2ban actions, ale — a toto je kľúčové — sú to samostatné procesy/binárky, ktoré komunikujú s LAPI cez REST API. Sú dostupné pre nftables, iptables, Nginx, Traefik, HAProxy, AWS WAF, Cloudflare a desiatky ďalších. Detekciu a remediáciu môžete pokojne rozdeliť na dva stroje: agent na log serveri, bouncer na hraničnom firewalle.

Hub a Collections

Namiesto manuálne písaných filtrov a jails sťahujete collections — kurátorované balíčky parserov a scenárov pre konkrétne služby. Inštaluje sa to ako balíčkovací manažér: cscli collections install crowdsecurity/sshd a CrowdSec vie chrániť SSH bez ďalšej konfigurácie. V Hube je v roku 2026 viac ako 350 scenárov pokrývajúcich brute force, exploity CVE, DDoS, web scrapery a kopu ďalších útočných vzorov.

Inštalácia CrowdSec na Ubuntu 24.04 / Debian 12

Tak, poďme na to. Predvolený inštalátor pridá CrowdSec apt repozitár a nainštaluje agenta s LAPI v jednom kroku:

curl -s https://install.crowdsec.net | sudo sh
sudo apt update
sudo apt install -y crowdsec

Po inštalácii overte, že služba beží a LAPI je dostupné lokálne:

sudo systemctl status crowdsec
sudo cscli lapi status
sudo cscli metrics

Inštalátor automaticky deteguje bežiace služby (sshd, nginx, apache2, postfix, mariadb…) a aktivuje zodpovedajúce kolekcie. Celkom príjemný detail. Ak chcete pridať ďalšie manuálne, použite hub:

sudo cscli collections list -a
sudo cscli collections install crowdsecurity/linux
sudo cscli collections install crowdsecurity/sshd
sudo cscli collections install crowdsecurity/nginx
sudo cscli collections install crowdsecurity/base-http-scenarios
sudo cscli collections install crowdsecurity/http-cve

Aktualizácia hub indexu a parserov

CrowdSec community pravidelne pridáva nové scenáre — napríklad pre čerstvo zverejnené CVE. Plánujte teda pravidelný update:

sudo cscli hub update
sudo cscli hub upgrade
sudo systemctl reload crowdsec

V produkcii túto sekvenciu zaraďte do týždenného cron skriptu alebo Ansible playbooku. Inak na to zabudnete (hovorím z vlastnej skúsenosti).

Inštalácia firewall bouncera s nftables

Na Ubuntu 24.04 a Debian 12 je nftables predvolený firewall framework — preferujte teda jeho bouncer pred iptables variantom:

sudo apt install -y crowdsec-firewall-bouncer-nftables
sudo systemctl enable --now crowdsec-firewall-bouncer
sudo modprobe nf_tables

Bouncer sa pri inštalácii automaticky zaregistruje cez cscli a vygeneruje API kľúč v /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml. Skontrolujte registráciu:

sudo cscli bouncers list

Konfigurácia bouncera

Predvolená konfigurácia funguje pre väčšinu nasadení, ale produkčné servery oceníte tieto úpravy:

mode: nftables
update_frequency: 10s
log_mode: file
log_dir: /var/log/
log_level: info
api_url: http://127.0.0.1:8080/
api_key: <BOUNCER_API_KEY>
disable_ipv6: false
deny_action: DROP
deny_log: true
nftables:
  ipv4:
    enabled: true
    set-only: false
    table: crowdsec
    chain: crowdsec-chain
    priority: -10
  ipv6:
    enabled: true
    set-only: false
    table: crowdsec6
    chain: crowdsec6-chain
    priority: -10
nftables_hooks:
  - input
  - forward

Po úprave reštartujte bouncer a overte, že chain bol vytvorený:

sudo systemctl restart crowdsec-firewall-bouncer
sudo nft list ruleset | grep -A 5 crowdsec

Pozor na konflikt s UFW

Ak na serveri beží UFW, ten si spravuje vlastné nftables chains. A tu nastáva problém — súbeh UFW + CrowdSec firewall bouncer môže produkovať nepredvídateľné výsledky, pravidlá sa neaplikujú v očakávanom poradí. Buď teda UFW vypnite a nechajte CrowdSec vlastniť blokovanie:

sudo ufw disable
sudo systemctl restart crowdsec-firewall-bouncer

Alebo použite iptables variant bouncera (crowdsec-firewall-bouncer-iptables), ktorý s UFW koexistuje pokojnejšie cez iptables-nft kompatibilnú vrstvu. Mne osobne sa osvedčilo prvé riešenie.

Anatómia CrowdSec scenára: za hranicami regexu

Tu sa CrowdSec naozaj zásadne odlišuje od Fail2ban. Kým Fail2ban filter vyzerá takto:

[Definition]
failregex = ^.*sshd.*Failed password for .* from <HOST>
maxretry = 5
findtime = 2m
bantime = 1h

CrowdSec scenár (napríklad crowdsecurity/ssh-bf) používa YAML s leaky bucket algoritmom, ktorý dokáže vyjadriť oveľa zložitejšie behaviorálne vzory:

type: leaky
name: crowdsecurity/ssh-bf
description: "Detect ssh bruteforce"
filter: "evt.Meta.log_type == 'ssh_failed-auth'"
leakspeed: "10s"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
labels:
  service: ssh
  type: bruteforce
  remediation: true

Princíp je vlastne dosť intuitívny: predstavte si vedro s kapacitou 5, do ktorého kvapká voda za každú zlyhanú autentifikáciu z rovnakej IP. Vedro presakuje rýchlosťou jedna kvapka za 10 sekúnd. Ak preteká, scenár vyhodnotí útok. blackhole: 1m bráni opakovanému spusteniu rovnakého alertu (čo je vec, ktorá vám v Fail2ban chýba častejšie, než si myslíte).

Triggered scenáre pre okamžitú detekciu

Pre exploity, kde stačí jediný útočný request (napr. CVE skenovanie), CrowdSec používa type: trigger:

type: trigger
name: crowdsecurity/http-cve-2021-44228
description: "Detect Log4j2 CVE-2021-44228 exploitation attempts"
filter: |
  evt.Meta.log_type == 'http_access-log' &&
  evt.Parsed.request matches '(?i)\\$\\{jndi:'
groupby: evt.Meta.source_ip
labels:
  service: http
  type: exploit
  remediation: true

Toto v jednom kroku rieši to, čo by ste vo Fail2ban riešili kombináciou multiple jails s rôznymi filtrami a actions. Takže menej súborov na údržbu, menej miest, kde sa dá pomýliť.

Praktická migrácia z Fail2ban: paralelný režim

Najistejší spôsob migrácie je paralelné nasadenie. CrowdSec a Fail2ban si neprekážajú — Fail2ban riadi svoje vlastné iptables chains, CrowdSec si pridáva vlastné. Postup je nasledovný:

Fáza 1: CrowdSec v learning móde (1–2 týždne)

Nainštalujte CrowdSec, ale nespustite bouncer. Agent bude generovať alerts a decisions, ale firewall ich neaplikuje. Tým získate prehľad, čo by sa stalo, a odhalíte potenciálne false positives v scenároch, ktoré sú špecifické pre vaše prostredie.

sudo apt install -y crowdsec
# bouncer NEINŠTALUJTE v tejto fáze
sudo cscli alerts list --since 24h
sudo cscli decisions list

Sledujte, či CrowdSec deteguje legitímny traffic ako útok (napríklad váš monitoring server alebo backup agent — to sa stáva častejšie, než by som čakal). Ak áno, pridajte ich do whitelistu:

sudo cscli decisions add --ip 10.0.0.5 --type whitelist --duration 8760h
# alebo trvalý whitelist v parser konfigurácii:
sudo nano /etc/crowdsec/parsers/s02-enrich/whitelists.yaml

Fáza 2: Bouncer s konzervatívnym TTL

Po overení baseline aktivujte bouncer, ale s krátkym TTL banov, aby ste nepoškodili produkciu pri prípadnom false positive:

sudo apt install -y crowdsec-firewall-bouncer-nftables
sudo cscli decisions add --ip 1.2.3.4 --duration 5m  # test ban

Defaultný ban v CrowdSec je 4 hodiny — pre SSH brute force je rozumné 24 hodín, kým útočníci predsa len rotujú IP, ale dlhšie bany znižujú šum v logoch:

# /etc/crowdsec/profiles.yaml
name: default_ip_remediation
filters:
  - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
  - type: ban
    duration: 24h
on_success: break

Fáza 3: Postupné vypínanie Fail2ban jails

Pre každý Fail2ban jail nájdite zodpovedajúcu CrowdSec collection a vypnite jail. Najčastejšie mapovania, na ktoré narazíte:

  • jail.local: [sshd]crowdsecurity/sshd
  • jail.local: [nginx-http-auth]crowdsecurity/nginx
  • jail.local: [apache-auth]crowdsecurity/apache2
  • jail.local: [postfix-sasl]crowdsecurity/postfix
  • jail.local: [recidive]crowdsecurity/iptables-scan-multi_ports a globálny CTI feed

Príkaz na vypnutie konkrétneho jail bez vypnutia celej služby:

sudo fail2ban-client stop sshd
# overte, že CrowdSec ssh scenário je aktívne:
sudo cscli scenarios list | grep ssh

Fáza 4: Úplné odstránenie Fail2ban

Po 30 dňoch súbežného behu a porovnaní detekčných čísel cez cscli alerts list a Fail2ban log môžete Fail2ban odinštalovať:

sudo systemctl stop fail2ban
sudo systemctl disable fail2ban
sudo apt purge -y fail2ban
sudo iptables -F f2b-sshd 2>/dev/null  # cleanup zvyškových chains

Kolaboratívne CTI: ako správne opt-in

Najdôležitejšia vlastnosť CrowdSec — community blocklist — je voliteľná, ale dôrazne odporúčaná. Vytvorte si free účet na app.crowdsec.net, získajte enrollment token a registrujte inštanciu:

sudo cscli console enroll <TOKEN>
sudo systemctl restart crowdsec
sudo cscli capi status

Po registrácii vám CrowdSec automaticky stiahne Community Blocklist — kurátorovaný feed IP adries, ktoré útočili na iných CrowdSec používateľov za posledných 24 hodín. Útočník sa zablokuje na vašom serveri ešte predtým, než vôbec dorazí. Toto je presne tá vec, ktorú s Fail2ban nikdy nedostanete.

Pridať môžete aj špecializované third-party blocklists z konzoly — napríklad pre Tor exit nodes, kompromitované VPN endpointy alebo botnet C2 IP adresy. Tieto feedy sú free do určitého počtu IP, nad ten limit potrebujete platený tier.

Privacy ohľady

CrowdSec zdieľa s Central API len tieto údaje: zdrojovú IP útočníka, scenár, ktorý sa spustil, a timestamp. Neukladajú sa URL, payloads, hostnames vašich serverov ani žiadne PII. Stále však platí jedno: ak GDPR alebo interná policy zakazuje akékoľvek zdieľanie security telemetrie s tretími stranami, môžete CrowdSec používať čisto lokálne — len bez community blocklistu.

Výkon a škálovanie: prečo IP sets vyhrávajú

Fail2ban pri 10 000 banoch generuje 10 000 jednotlivých iptables pravidiel. Každý packet musí prejsť reťazou — komplexita O(n). Pri vysokej traffic to znamená merateľný CPU overhead.

CrowdSec firewall bouncer s nftables používa set — hashovanú dátovú štruktúru s O(1) lookupom:

sudo nft list set inet crowdsec crowdsec-blacklists

Test na produkčnom Nginx serveri s 50 000 zablokovanými IP ukazuje rozdiel rádovo: Fail2ban pridá 4–7 ms latencie na request, CrowdSec pod 0,1 ms. Pri 10k req/s je to úspora desiatok sekúnd CPU času. Inými slovami — CrowdSec vám dovolí byť paranoidnejší (väčšie blocklisty), bez toho, aby ste zaplatili na výkone.

Monitoring: cscli, Prometheus a Grafana

CrowdSec exportuje natívne Prometheus metriky na http://127.0.0.1:6060/metrics. Stačí pridať scrape config:

scrape_configs:
  - job_name: 'crowdsec'
    static_configs:
      - targets: ['127.0.0.1:6060']
        labels:
          host: 'web01.example.com'

Oficiálna Grafana dashboard ID 14416 zobrazí počty alerts, decisions, top útočiace ASNs, najfrekventovanejšie scenáre a hit rate community blocklistu. Pre rýchly CLI prehľad poslúži:

sudo cscli metrics
sudo cscli alerts list --since 24h
sudo cscli decisions list --type ban
sudo cscli decisions list --origin lists  # community blocklist hits

CrowdSec a SIEM/XDR integrácia

V SOC pipeline často potrebujete CrowdSec alerts dostať do centrálneho SIEM. Najjednoduchšie cesty:

  • Wazuh integrácia. CrowdSec píše štruktúrované JSON logy do /var/log/crowdsec.log. Wazuh agent ich číta cez localfile direktívu a pridáva ako vlastné rules.
  • Webhook plugins. CrowdSec notification plugins (Slack, Splunk HEC, generic HTTP) odošlú každý alert na vašu SIEM endpoint.
  • Loki/Promtail. Ak ste v Grafana stack, Promtail číta CrowdSec log a vy môžete v LogQL korelovať s aplikačnými logmi.

Whitelist osvedčené postupy

Najčastejší zdroj „kde mi zmizol prístup" je chýbajúci whitelist pre interné systémy. Vytvorte trvalý whitelist v parser layeri (aktivuje sa pred scenármi):

# /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
name: crowdsecurity/whitelists
description: "Whitelist trusted networks"
whitelist:
  reason: "trusted infrastructure"
  ip:
    - "192.168.1.10"   # monitoring server
    - "10.0.0.0/8"     # internal network
  cidr:
    - "203.0.113.0/24" # office IP range
  expression:
    - "evt.Meta.source_ip in ['1.2.3.4', '5.6.7.8']"

Po úprave reload agenta:

sudo systemctl reload crowdsec

Často kladené otázky (FAQ)

Môžu Fail2ban a CrowdSec bežať súčasne na rovnakom serveri?

Áno, pokojne. Fail2ban si spravuje vlastné iptables/nftables chains a CrowdSec si pridáva vlastné. Počas migrácie sa odporúča paralelný režim 14–30 dní, kým overíte, že CrowdSec deteguje rovnaké alebo viac útokov ako Fail2ban a bez false positives. Pozor len na duplicitné bany v logoch — to nie je chyba, len kozmetika.

Aký je predvolený ban time v CrowdSec a ako ho zmeniť?

Predvolený ban je 4 hodiny (oproti 10-minútovému default Fail2ban). Zmeníte ho v /etc/crowdsec/profiles.yaml nastavením duration: 24h v default_ip_remediation profile. Pre SSH brute force odporúčame 24 hodín, pre web exploity 7 dní. Pozor: príliš dlhé bany môžu zablokovať legitímnych používateľov za NAT/CGNAT.

Je CrowdSec zadarmo? Čo stojí community blocklist?

Samotný CrowdSec engine, agent, bouncery a community blocklist sú open source a zadarmo bez ohľadu na počet serverov. Platenú verziu (Console/SaaS) potrebujete len ak chcete centralizovaný dashboard pre veľa inštancií, prémiové third-party blocklisty alebo enterprise sync funkcie. Pre 95 % home labov a malých nasadení free tier úplne stačí.

Funguje CrowdSec v kontajneroch a Kubernetes?

Áno. CrowdSec poskytuje oficiálny Helm chart pre Kubernetes, kde agent beží ako DaemonSet a LAPI ako Deployment. Bouncery existujú pre Nginx Ingress Controller, Traefik a Istio. V Docker Compose setupe je tiež bežná inštalácia ako sidecar k web reverse proxy. CrowdSec navyše dokáže parsovať Kubernetes audit logy, čo je v cloud-native prostrediach poriadne užitočné.

Čo robiť, ak CrowdSec banuje moju vlastnú IP?

Najprv overte cez cscli decisions list --ip <vasa-ip>, či ide o lokálny ban alebo community blocklist hit. Lokálny ban odstráňte cez cscli decisions delete --ip <vasa-ip>. Ak ste v community blocklist, je to znamenie, že vašu IP niekto v sieti ohlásil ako útočiacu — skontrolujte, či nemáte kompromitovaný stroj. Pre trvalé riešenie pridajte IP do whitelistu v /etc/crowdsec/parsers/s02-enrich/whitelists.yaml.

Záver: kedy migrovať a kedy zostať pri Fail2ban

Pre jednoduchý home server s SSH a Nginx a nízkou návštevnosťou je Fail2ban stále úplne legitímna voľba — minimálne resources, dekáda dokumentácie, predvídateľné správanie. Nič proti nemu nemám, naozaj. Ale pre čokoľvek nad jeden server, pre verejne exponované webové aplikácie, pre multi-cloud infraštruktúru alebo pre compliance scenáre s kontinuálnym threat intelligence je CrowdSec v roku 2026 jednoznačná voľba. Kolaboratívna sieť, behaviorálne scenáre, oddelená detekcia/remediácia a moderný nftables backend dohromady zatvárajú tie najbolestivejšie medzery, ktoré Fail2ban architekturálne nemá ako vyriešiť. A vďaka paralelnému režimu je migrácia bezpečná — žiadny dôvod ju odkladať.

O Autorovi Editorial Team

Our team of expert writers and editors.