Moduuli 5 · 5.3
fail2ban arvausyrityksiä vastaan
Moduuli 5: Verkon suojaaminen · Lukuaika: 10 minuuttia
Tavoite: Tämän oppitunnin jälkeen osaat asettaa fail2banin SSH:lle, lukea sen tilan ja lokin, vapauttaa osoitteen uudelleen ja selittää, mitä fail2ban suojaa ja mitä ei.
Keskeiset käsitteet: brute force, jail, suodatin (filter), toiminto (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local ja jail.d, fail2ban-client, recidive
Internetin ovenkahvojen kokeilijat
Katso SSH:n lokia päivä asennuksen jälkeen, niin näet sen: satoja kirjautumisyrityksiä nimillä kuten root, admin, test, ubuntu ja oracle, osoitteista ympäri maailmaa.
anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560(Ubuntussa palvelun nimi on ssh, AlmaLinuxissa ja Rockyssa sshd. Prosessin nimi voi olla sshd tai sshd-session OpenSSH-version mukaan.) Tämä on brute force -hyökkäys: botit kokeilevat yksinkertaisesti kaikkia yleisiä nimiä ja salasanoja. Kun kirjaudut avaimilla ja salasanakirjautuminen on pois päältä (oppitunti 2.2), ne eivät pääse koskaan sisään, vaikka yrittäisivät kuinka monta kertaa. Ne kuitenkin täyttävät lokisi, vievät hieman laskentatehoa, ja palveluissa, joissa salasanaa tarvitaan (webmail, hallintapaneeli), ne voivat olla todella vaarallisia.
fail2ban lukee lokeja, tunnistaa epäonnistuneet yritykset ja lukitsee liian usein epäonnistuvan osoitteen palomuurissa joksikin aikaa.
Miten fail2ban ajattelee: jailit
fail2ban toimii jaileilla (selleillä). Jail yhdistää kolme asiaa:
- suodatin: säännölliset lausekkeet, jotka tunnistavat lokista epäonnistuneet yritykset (esimerkiksi rivin "Invalid user ... from <adres>");
- toiminto: mitä tapahtuu liian monen yrityksen jälkeen, yleensä palomuurisääntö, joka estää osoitteen (
banaction, Debian 13:ssa oletuksena nftablesin kautta); - raja-arvot: kuinka monta epäonnistunutta yritystä (
maxretry) missä ajassa (findtime) johtaa kuinka pitkään estoon (bantime).
Tiedoston jail.conf oletusarvot ovat: maxretry = 5, findtime = 10m, bantime = 10m. Siis: viisi epäonnistunutta yritystä kymmenen minuutin sisällä johtaa kymmenen minuutin estoon.
Asennus ja Debian 12:n sudenkuoppa
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banDebianissa ja Ubuntussa SSH:n jail ([sshd]) on asennuksen jälkeen jo päällä tiedoston /etc/fail2ban/jail.d/defaults-debian.conf kautta.
Tunnettu sudenkuoppa on yksi. fail2banin täytyy tietää, missä loki on. Ennen se oli tekstitiedosto /var/log/auth.log. Debian 12:sta lähtien rsyslogia ei enää asenneta oletuksena, ja ilmoitukset ovat vain systemd:n journalissa (oppitunti 6.2). Debian 12:n fail2ban-paketti etsi yhä tiedostoa /var/log/auth.log, ei löytänyt sitä eikä käynnistynyt. Debian 13 on korjannut tämän asettamalla tiedostossa defaults-debian.conf SSH:lle backend = systemd. Debian 12:ssa korjaat asian itse (katso alla) tekemällä saman. Ubuntussa rsyslog on yhä oletuksena, mutta backend = systemd toimii sielläkin.
Omat asetuksesi: jail.local
Älä koskaan muokkaa tiedostoa jail.conf: se korvataan päivityksen yhteydessä. Laita omat asetuksesi tiedostoon /etc/fail2ban/jail.local tai hakemistoon /etc/fail2ban/jail.d/ tiedostoon, jonka pääte on .local:
# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
[sshd]
enabled = true
backend = systemdMitä rivit tekevät:
bantime = 1h: tunnin esto kymmenen minuutin sijaan.bantime.increment = true: kuka palaa eston jälkeen, saa joka kerta pidemmän eston.ignoreip: osoitteet, joita ei koskaan estetä. Laita tähän toimistosi kiinteä IP-osoite, jos sinulla on sellainen. Älä laita tähän suuria osoitealueita "varmuuden vuoksi".backend = systemd: lue journalia tekstitiedoston sijaan (pakollinen Debian 12:ssa, suositeltava kaikkialla). Tätä varten paketinpython3-systemdtäytyy olla asennettuna; yleensä se on jo asennettu riippuvuutena.
Lataa uudelleen ja tarkista:
anna@web1:~$ sudo fail2ban-client -t # testaa asetukset
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdTilan lukeminen, estäminen ja vapauttaminen
anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 1288
| `- Journal matches: _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
|- Currently banned: 2
|- Total banned: 117
`- Banned IP list: 203.0.113.77 198.51.100.140"Currently failed" tarkoittaa osoitteita, jotka ovat jo yrittäneet mutta eivät vielä ylitä raja-arvoa. "Currently banned" tarkoittaa osoitteita, jotka ovat nyt estettyinä.
Jos olet estänyt itsesi (esimerkiksi yrittämällä muutaman kerran väärällä avaimella tai käyttäjänimellä), kirjaudu toisen verkon tai konsolin kautta ja vapauta osoitteesi:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20fail2banin oma loki on tiedostossa /var/log/fail2ban.log, ja siitä näkyy, milloin mikin osoite estettiin ja vapautettiin:
2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE [sshd] Unban 203.0.113.77Toistuvat yrittäjät: recidive
Osa boteista palaa jokaisen eston jälkeen. Niitä varten on kaksi keinoa. bantime.increment (yllä) pidentää estoa joka kerta. Lisäksi on jail recidive: se lukee fail2banin omaa lokia ja estää osoitteen, joka on vuorokauden aikana estetty usein, viikoksi kaikista porteista. Ota se käyttöön .local-tiedostossasi:
[recidive]
enabled = trueMitä fail2ban tekee ja mitä ei
fail2ban on hyödyllinen, mutta se ei ole oven lukko. Lukko on kirjautuminen avaimella, salasanat pois päältä (oppitunti 2.2). Tiedä siksi myös, mihin fail2ban ei pysty:
- Hajautettu hyökkäys tuhansista osoitteista, joista kustakin yksi tai kaksi yritystä, ei koskaan ylitä arvoa
maxretry. - Heikko salasana pysyy heikkona. fail2ban hidastaa arvaamista, ei muuta.
- Vain se, mikä on lokissa: palvelua, joka ei kirjaa epäonnistuneita yrityksiä, tai lokia, jota fail2ban ei lue, se ei näe.
- Docker: tavallisen palomuuriketjun estot eivät koske julkaistuja konttiportteja (oppitunti 9.3). Konteissa ajettaville palveluille tarvitaan erillinen asetus (toiminto ketjussa
DOCKER-USER).
Missä fail2ban on hyvä: se pitää lokin rauhallisena, vähentää bottien kuormaa ja suojaa palveluita, joissa käytät (vielä) salasanoja, kuten webmailia tai hallintapaneelia. Tällaisille palveluille on suodattimet nginxille, Postfixille, Dovecotille ja monelle muulle.
AlmaLinuxissa ja Rocky Linuxissa
fail2ban tulee siellä EPEListä: dnf install epel-release ja sitten dnf install fail2ban. Paketti fail2ban asentaa myös firewalld-kytkennän. SSH-palvelun nimi on sshd. Ota jail itse käyttöön .local-tiedostossa; toisin kuin Debianissa, se ei ole automaattisesti päällä.
Yhteenveto
- Botit yrittävät kirjautua koko päivän; avaimilla ja salasanakirjautuminen pois päältä ne eivät pääse sisään, ja fail2ban pitää ne lisäksi loitolla.
- Jail on suodatin + toiminto + raja-arvot (
maxretry,findtime,bantime); oletuksena 5 yritystä 10 minuutissa, 10 minuutin esto. - Omat asetukset tiedostoon
jail.localtaijail.d/*.local, ei koskaan tiedostoonjail.conf; käytä asetustabackend = systemd(pakollinen Debian 12:ssa). fail2ban-client status sshdnäyttää estetyt osoitteet,set sshd unbanipvapauttaa; recidive jabantime.incrementhoitavat toistuvat yrittäjät.- fail2ban ei pysäytä hajautettuja hyökkäyksiä tai heikkoja salasanoja eikä näe Docker-portteja itsestään.
Tietovisa (quiz)
Tehtävä
Tehtävä Z5.3: Murtautumislokin lukeminen. Esimerkkitiedostossa ssh-journal-1.txt on ote fail2bania käyttävän SSH-palvelimen journalista sekä komennon fail2ban-client status sshd tuloste. Vastaa: mikä osoite kokeili eniten käyttäjänimiä, mikä osoite onnistui kirjautumaan avaimella ja minä käyttäjänä, mikä osoite on estetty ja mihin aikaan, ja olisiko tämä osoite estetty myös oletusasetuksilla (maxretry = 5, findtime = 10m)? Ohjelma vertaa vastauksiasi kiinteään vastausavaimeen. Jos sinulla on oma palvelin, jossa on fail2ban, katso siellä myös fail2ban-client status sshd.
Lue lisää
- VPS:n suojaaminen: ensimmäiset viisi minuuttia
- Onko minut estetty? IP-osoitteesi ja palomuurimme
- fail2ban, oletuskonfiguraatio
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Käyttöohje
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
