Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
it:server:fail2ban [2022/11/19 20:24] – Petr Nosek | it:server:fail2ban [2022/11/19 22:21] (aktuální) – Petr Nosek | ||
---|---|---|---|
Řádek 9: | Řádek 9: | ||
cp jail.conf jail.local | cp jail.conf jail.local | ||
</ | </ | ||
+ | |||
+ | zdroje k nastavení fail2ban: | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
Řádek 14: | Řádek 19: | ||
- | Pro webserver jsem nastavoval, aby se zablokoval při portscanningu přístup na všechny porty, kromě 80 a 443. K tomu mi posloužil vytvoření soubor **/ | + | Pro webserver jsem nastavoval, aby se zablokoval při portscanningu přístup na všechny porty, kromě 80 a 443. K tomu mi posloužil vytvoření soubor **/ |
+ | |||
+ | V githubu je soubor ještě více předělaný, | ||
+ | https:// | ||
+ | |||
+ | Pokud bych provozoval ještě nějaké další služby, musel bych je přidat, abych do tohoto skriptu. Protože pokud někdo udělá portscan, tak se zaříznou všechny služby, kromě žádoucích 80 a 443. | ||
<code bash> | <code bash> | ||
Řádek 72: | Řádek 83: | ||
Tady je konfigurace k jednotlivým službám. Každá služba zapisuje do syslogu pokusy o přihlášení v různém formátu. Filtry skrz regulární výrazy ukazují, co hledat. Tím, si lze fail2ban rozšířit i na služby, pro které defaultně určen není. | Tady je konfigurace k jednotlivým službám. Každá služba zapisuje do syslogu pokusy o přihlášení v různém formátu. Filtry skrz regulární výrazy ukazují, co hledat. Tím, si lze fail2ban rozšířit i na služby, pro které defaultně určen není. | ||
- | Přidáme **/ | + | Přidáme **/ |
<code bash> | <code bash> | ||
Řádek 274: | Řádek 285: | ||
</ | </ | ||
+ | ===== Editace jail.local ===== | ||
+ | |||
+ | |||
+ | Nejprve je třeba v souboru jail.local nastavit banaction i na ipv6 a bannování skrz ipset. V provozu může vzniknout docela dost ip adres, které je třeba bannovat, tak bude rozumné kvůli rychlosti firewallu použít ipset místo defaultního nastavení: | ||
+ | |||
+ | < | ||
+ | banaction = iptables-ipset-proto6 | ||
+ | banaction_allports = iptables-ipset-proto6-allports | ||
+ | </ | ||
+ | |||
+ | Zkoušel jsem zvolit banaction = ufw, ale tady se zabanovala celá ip adresa a já chci blokovat pouze konkrétní službu. Zejména co se ssh týče. | ||
+ | |||
+ | Služby, na kterých má fail2ban vyset se musí zapnout pomocí enabled = true. U SSH jsem volil mód aggressive. Blokace je 10 minut pro všechny služby, pokud zkusí 3 a více pokusů za posledních 10 minut. | ||
+ | |||
+ | < | ||
+ | # " | ||
+ | bantime | ||
+ | |||
+ | # A host is banned if it has generated " | ||
+ | # seconds. | ||
+ | findtime | ||
+ | |||
+ | # " | ||
+ | maxretry = 3 | ||
+ | </ | ||
+ | |||
+ | |||
+ | Tady se odehrává zbytek nastavení fail2ban. Sepisuji zejména změny, které jsem provedl. U SSH jsem si změnil port a to je potřeba promítnout i v konfiguraci. Je tam vidět port 3333. | ||
+ | |||
+ | < | ||
+ | |||
+ | ignoreip = 127.0.0.1/8 ::1 | ||
+ | |||
+ | [sshd] | ||
+ | |||
+ | # To use more aggressive sshd modes set filter parameter " | ||
+ | # normal (default), ddos, extra or aggressive (combines all). | ||
+ | # See " | ||
+ | mode = aggressive | ||
+ | port = ssh,3333 | ||
+ | filter | ||
+ | logpath = %(sshd_log)s | ||
+ | backend = %(sshd_backend)s | ||
+ | enabled = true | ||
+ | |||
+ | [nextcloud] | ||
+ | |||
+ | enabled | ||
+ | port = http,https | ||
+ | filter | ||
+ | logpath | ||
+ | maxretry = 6 | ||
+ | |||
+ | |||
+ | #[ufwban] | ||
+ | #enabled = false | ||
+ | #port = ssh, http, https | ||
+ | #filter = ufwban | ||
+ | #logpath = / | ||
+ | #action = ufw | ||
+ | |||
+ | </ | ||
+ | |||
+ | Dále jsem přidal sshd-slow, který zabanuje ssh pro případ, že se za 1 den někdo zkusí celkem 10x přihlásit. V tomto případě zablokuje na 1week. To už je docela problematický prohřešek. | ||
+ | |||
+ | < | ||
+ | |||
+ | [sshd-slow] | ||
+ | filter | ||
+ | port = ssh, 3333 | ||
+ | maxretry = 6 | ||
+ | findtime = 1d | ||
+ | bantime | ||
+ | logpath | ||
+ | backend | ||
+ | enabled | ||
+ | |||
+ | |||
+ | [vpnserver] | ||
+ | enabled = true | ||
+ | port = 443, | ||
+ | protocol = udp | ||
+ | logpath | ||
+ | banaction = iptables-allports | ||
+ | # Uncomment the following line if you want to be notified about banned IP's | ||
+ | action= %(action_mwl)s | ||
+ | filter=vpnserver | ||
+ | |||
+ | |||
+ | [vpnserver-securenat] | ||
+ | enabled = true | ||
+ | logpath = / | ||
+ | port = all | ||
+ | protocol = all | ||
+ | banaction = iptables-allports | ||
+ | # Uncomment the following line if you want to be notified about banned IP's | ||
+ | action= %(action_mwl)s | ||
+ | filter=vpnserver | ||
+ | </ | ||
+ | |||
+ | Pozapínal jsem další smysluplné věci, jako apache, fakegoogle boty atp. | ||
+ | |||
+ | Zapnul jsem i recidive. Pokud někdo bude mít ban 3x za 12 hodin, bude celá IP adresa zablokovaná na 1 týden. Tady budu muset být opatrný a kontrolovat, | ||
+ | |||
+ | < | ||
+ | [recidive] | ||
+ | enabled = true | ||
+ | logpath | ||
+ | banaction = %(banaction_allports)s | ||
+ | bantime | ||
+ | findtime = 12h | ||
+ | </ | ||
+ | |||
+ | Poslední, co jsem aplikoval je ochrana na portscan. Tady je to opět potenciálně nebezpečná záležitost u webserveru. V praxi to prochází log, hledá jednoduchý řetězec, zda byla ip adresa zablokovaná a pokud byla zablokovaná 10x, tak proběhne ban skrz ufw. | ||
+ | |||
+ | Problémy jsou tam tyto: | ||
+ | * Nečíslovaný seznamNečíslovaný seznamufw mám na loglevel = low, takže když někdo oskenuje všechny porty, tak se neprovedou tisíce záznamů do logu, ale jenom pár. Zvyšovat hodnotu zase nemá smysl kvůli zpomalení sítě a serveru. | ||
+ | * pokud mi tam bude padat moc IP adres, tak ufw nebude dobrá volba, kvůli velkému počtu IP adres. Může pak dojít ke zpomalení. Tady je řešení vytvořit v **action.d/ | ||
+ | |||
+ | < | ||
+ | [ufw-port-scan] | ||
+ | enabled = true | ||
+ | filter | ||
+ | logpath = / | ||
+ | banaction = ufw-portscan | ||
+ | bantime | ||
+ | maxretry | ||
+ | findtime | ||
+ | </ | ||
+ | |||
+ | |||
+ | zdroje ohledně aplikace portscanu: | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
===== Vyřazení IP adresy z banlistu ===== | ===== Vyřazení IP adresy z banlistu ===== |