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:09] – 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 127: | Řádek 138: | ||
| - | Našel jsem i vlastní ssh - **/ | + | Našel jsem i vlastní ssh - **/ |
| - | < | + | <code> |
| + | ^Connection closed by < | ||
| + | </ | ||
| + | |||
| + | Tady obsah celého souboru. | ||
| + | <code> | ||
| # Fail2Ban filter for openssh | # Fail2Ban filter for openssh | ||
| # | # | ||
| Řádek 251: | Řádek 267: | ||
| </ | </ | ||
| + | |||
| + | ==== Testování regulárního výrazu vlastního filtru ==== | ||
| + | |||
| + | Tady je ukázka, jak lze otestovat vlastní filtr. | ||
| + | |||
| + | <code bash> | ||
| + | fail2ban-regex | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Editace fail2ban.conf ===== | ||
| + | |||
| + | Tady popisuji hodnoty, které jde oproti defaultnímu nastavení změnil. | ||
| + | |||
| + | < | ||
| + | dbpurgeage = 10d | ||
| + | </ | ||
| + | |||
| + | ===== 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 ===== | ||
| Řádek 257: | Řádek 426: | ||
| fail2ban-client set vpnserver unbanip 89.24.33.115 | fail2ban-client set vpnserver unbanip 89.24.33.115 | ||
| fail2ban-client unban 89.24.33.115 | fail2ban-client unban 89.24.33.115 | ||
| + | </ | ||
| + | |||
| + | ===== Vypsání všech zabanovaných adres ===== | ||
| + | |||
| + | <code bash> | ||
| + | fail2ban-client banned | ||
| </ | </ | ||