Fail2ban lukee lokeja, laskee säännöllisen lausekkeen osumat ja lisää palomuurisäännön, kun laskuri saavuttaa katon. Koko hyöty on asetuksissa — asennuksen jälkeen aktiivisena on vain yksi jail, ja se koskee SSH:ta.

Mihin asetukset kuuluvat

Tiedostoon /etc/fail2ban/jail.conf ei kosketa — se ylikirjoitetaan paketin päivityksessä. Omat arvot kuuluvat tiedostoon /etc/fail2ban/jail.local, jonka tarvitsee sisältää vain se, mitä muutat.

[DEFAULT]
bantime  = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25

ignoreip on rivi, joka kirjoitetaan ensimmäisenä. Ilman sitä estät ennemmin tai myöhemmin oman osoitteesi, ja silloin sisään pääsee vain hosting-paneelin konsolin kautta.

Bantimesta

Kymmenen minuutin oletusarvo on käytännössä hyödytön: automaattinen salasanan arvaaja palaa ja jatkaa. Yksi vuorokausi on järkevä vähimmäismäärä. Vielä parempi on porrastettu kasvatus:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 30d

Silloin palaaja saa yhä pidempiä estoja, kun taas oikean käyttäjän yksittäistä epäonnistunutta kirjautumista ei rangaista ankarasti.

Jailit, jotka kannattaa ottaa käyttöön

sshd on jo käynnissä. Jos salasanakirjautuminen on kytketty kokonaan pois, jailista ei ole suurta hyötyä, mutta ei siitä haittaakaan ole.

Verkkopalvelimen todennus. Jos jokin on salasanasuojattu palvelimen kautta:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Sovelluksesi kirjautumislomake. Tähän ei ole valmista suodatinta — sivuston salasanalomake kirjoittaa sovelluksen omaan lokiin omassa muodossaan. Suodattimen kirjoitat itse hakemistoon /etc/fail2ban/filter.d/, ja juuri se jail antaa eniten, koska juuri siellä salasanoja arvataan.

Postfix ja Dovecot, jos palvelin käsittelee sähköpostia. Sähköpostiportit joutuvat vähintään yhtä paljon arvailun kohteeksi kuin SSH.

recidive — jail, joka lukee Fail2banin omaa lokia ja antaa pitkiä estoja osoitteille, jotka on jo estetty useita kertoja:

[recidive]
enabled  = true
bantime  = 4w
findtime = 1d
maxretry = 3

Tarkista, että se todella toimii

sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Viimeinen komento on tärkein ja sitä käytetään aivan liian harvoin. Se näyttää, kuinka moneen lokin riviin suodatin todella osuu. Nolla osumaa tarkoittaa, että jail on käynnissä mutta ei tee mitään — joko polku lokiin on väärä tai muoto ei täsmää.

Se on myös yleisin syy siihen, että Fail2ban näyttää toimivan estämättä ketään: Debian 12:ssa ja Ubuntu 24.04:ssä tiedostoa /var/log/auth.log ei enää ole oletuksena. Ratkaisu on joko asentaa rsyslog tai osoittaa jail journaliin:

[sshd]
backend = systemd

Itsensä vapauttaminen

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Tämä kannattaa tietää etukäteen, ei siinä hetkessä, kun seisot ulkopuolella.

Mitä Fail2ban ei osaa

Se toimii yhden ja saman osoitteen taajuudella. Hajautettu hyökkäys — tuhat osoitetta yhdellä yrityksellä kukin — menee suoraan läpi, sillä yksikään laskuri ei saavuta kattoaan. Se on periaatteellinen rajoitus, ei asetusvirhe.

Se ei myöskään pysäytä sovelluksen haavoittuvuutta. Pyyntö, joka hyödyntää laajennuksen reikää, onnistuu ensimmäisellä kerralla eikä jätä jälkeensä yhtään epäonnistunutta kirjautumista. Fail2ban poistaa taustakohinan; se ei korvaa ajallaan tehtyjä päivityksiä.

Käytännön arvo näkyy luvuissa ajan myötä: kuinka monta osoitetta on nyt estettynä, mikä jail laukeaa useimmin, onko määrä yhtäkkiä muuttunut. Jail, joka on lakannut osumasta mihinkään, on merkki siitä, että loki on siirtynyt — ja se huomataan vain, jos joku katsoo. Miltä se näyttää yhdellä sivulla, näkyy alla olevassa esittelyssä.