-
Notifications
You must be signed in to change notification settings - Fork 0
Fail2ban a CrowdSec
Nástroje, které čtou logy a blokují adresy, ze kterých chodí opakované neúspěšné pokusy.
Nejsou náhradou za zabezpečení serveru — když máš vypnutá hesla u SSH, brute force ti nevadí a fail2ban ti jen uklidí log. Hodnotu mají hlavně u služeb, kde přihlašování vypnout nemůžeš.
Klasika. Sleduje logy, hledá vzory a při překročení počtu pokusů přidá pravidlo do firewallu.
apt install fail2banNikdy needituj jail.conf, přepíše se při aktualizaci. Vytvoř /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.10.0.0/24
banaction = nftables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.logignoreip s vlastními sítěmi je první věc, kterou nastav. Jinak se dřív nebo později zablokuješ sám.
systemctl restart fail2ban
fail2ban-client status
fail2ban-client status sshdfail2ban-client set sshd unbanip 1.2.3.4
fail2ban-client unban --all[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 5wOpakovaný útočník dostává postupně delší tresty. Užitečné proti botnetům, které se vracejí.
Pro aplikaci, kterou fail2ban nezná. Najdi si v logu, jak vypadá neúspěšné přihlášení, a napiš /etc/fail2ban/filter.d/mojeapp.conf:
[Definition]
failregex = ^.*Failed login attempt from <HOST>.*$
ignoreregex =[mojeapp]
enabled = true
port = http,https
filter = mojeapp
logpath = /var/log/mojeapp/access.log
maxretry = 3Otestuj regulární výraz proti skutečnému logu, než to nasadíš:
fail2ban-regex /var/log/mojeapp/access.log /etc/fail2ban/filter.d/mojeapp.confTohle je nejdůležitější odstavec na stránce.
Když aplikace běží za reverse proxy, vidí v logu adresu proxy, ne útočníka. Fail2ban tedy zablokuje 127.0.0.1 nebo adresu proxy — a tím odřízne úplně všechny návštěvníky.
Řešení má dva kroky.
1. Proxy musí posílat skutečnou IP. Hlavička X-Forwarded-For, viz nginx nebo Caddy.
2. Aplikace ji musí zapisovat do logu. V nginxu:
log_format proxy '$http_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent';
access_log /var/log/nginx/access.log proxy;Když je před tebou ještě Cloudflare, potřebuješ navíc set_real_ip_from s jejich rozsahy — viz nginx.
Ověř si po nasazení, že v logu vidíš skutečné adresy návštěvníků, ne pořád tu samou.
Fail2ban běžící na hostiteli zapisuje pravidla do INPUT, ale provoz do kontejnerů jde přes FORWARD. Blokace tedy nemusí zabrat.
Řešení je nastavit banaction, která zapisuje do DOCKER-USER:
[DEFAULT]
banaction = iptables-allports
chain = DOCKER-USERSouvislosti v Docker a firewall.
Modernější alternativa. Rozdíl je v tom, že sdílí informace mezi instalacemi — když někoho zablokuje deset tisíc serverů, dozvíš se to dřív, než k tobě dorazí.
curl -s https://install.crowdsec.net | sh
apt install crowdsec
apt install crowdsec-firewall-bouncer-nftablescscli metrics
cscli decisions list
cscli collections list
cscli collections install crowdsecurity/nginxArchitektura je oddělená: detektor čte logy a rozhoduje, bouncer blokuje. Bouncerů je víc druhů — firewallový, plugin do nginxu, plugin do Cloudflare.
Fail2ban je jednodušší, běží všude, nepotřebuje připojení ven, konfigurace je textová a předvídatelná. Pro jeden server je to pořád rozumná volba.
CrowdSec dává předběžnou ochranu díky sdílené databázi, lépe se škáluje a má hezčí přehledy. Cenou je složitější architektura a to, že posílá signály ven.
Pro homelab s pár službami bych zůstal u fail2ban. Když provozuješ něco veřejného a hlučného, CrowdSec dává větší smysl.
Nepouštěj oba naráz — budou si lézt do zelí ve firewallu.
Tyhle nástroje řeší hlučnost, ne cílený útok. Botnet s deseti tisíci adresami je fail2ban neschopný zastavit, protože každá adresa zkusí jednou.
Skutečná obrana je jinde: klíče místo hesel, aktualizace, autentizace před službami a nevystavovat ven nic, co tam nemusí být.
Našel jsi chybu nebo něco chybí? Založ issue nebo pošli pull request. — Psáno 2026, licence CC BY-SA 4.0
Základy
- Cesta paketu
- Vrstvy a zapouzdření
- MAC, ARP a přepínání
- Prefixy a masky
- Směrování
- DHCP a DNS
- Porty a spojení
- NAT a port forwarding
Domácí síť
IPv6
Linux firewall
TLS a reverse proxy
- TLS a HTTPS
- HTTP, QUIC a WebSocket
- Reverse proxy
- Caddy
- Nginx
- Traefik
- Certifikáty a Let's Encrypt
- Vlastní certifikační autorita
Kryptografie
- Stavební kameny
- Veřejný a soukromý klíč
- Diffie-Hellman
- Hashe, HMAC a podpisy
- Náhodnost a entropie
- TLS handshake
- Postkvantová kryptografie
- Šifrování disků a souborů
Virtualizace a kontejnery
Diagnostika
Vzdálený přístup
Provoz a bezpečnost
Praxe