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.
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.

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/sshdjail.local: [nginx-http-auth]→crowdsecurity/nginxjail.local: [apache-auth]→crowdsecurity/apache2jail.local: [postfix-sasl]→crowdsecurity/postfixjail.local: [recidive]→crowdsecurity/iptables-scan-multi_portsa 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 cezlocalfiledirektí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ť.


