fail2ban seadistamine SSH-le: kaitse jõurünnaku eest 2026

08 May 2026 Autor: Olga Naumova

Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):

curl -sSL https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bash

…või wgetiga:

wget -qO- https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bash

Skripti sisu nastrojka-fail2ban.sh:

#!/usr/bin/env bash
# Install fail2ban and set up the SSH jail (Ubuntu/Debian)
set -euo pipefail

# 1. Install
sudo apt update && sudo apt install -y fail2ban

# 2. Local configuration (quoted 'EOF' writes the sections verbatim)
sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 1w

[sshd]
enabled  = true
port     = ssh
backend  = systemd
maxretry = 4
bantime  = 2h
EOF

# 3. Apply and verify
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
echo "Done: fail2ban now protects SSH from brute force."

fail2ban kaitseb serverit paroolide äraarvamise eest: see loeb logisid, leiab korduvad ebaõnnestunud sisselogimised ja blokeerib IP tulemüüri kaudu. Seadistus taandub paketi paigaldamisele ja faili jail.local loomisele, kus SSH jail on sisse lülitatud. Allpool on töötav konfiguratsioon.

Kuidas see töötab

fail2ban jälgib logifaile (näiteks SSH sisselogimiskatseid), võrdleb ridu filtritega (regulaaravaldised) ja lisab ebaõnnestumiste limiidi ületamisel iptables’i või nftables’i reegli, blokeerides rikkuja määratud ajaks.

1. samm. Paigaldamine

apt update
apt install -y fail2ban
systemctl enable --now fail2ban

CentOS/AlmaLinuxis: dnf install -y fail2ban.

2. samm. Kohalik konfiguratsioon

Ärge kunagi muutke otse faili jail.conf — uuendustel kirjutatakse see üle. Avage /etc/fail2ban/jail.local redaktoris (sudo nano /etc/fail2ban/jail.local) ja lisage sisu:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled  = true
port     = ssh
maxretry = 4
bantime  = 2h

Või looge fail tervikuna ühe käsuga — kopeerige ja kleepige konsooli (jutumärgid 'EOF' kirjutavad sektsioonid sõna-sõnalt):

sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled  = true
port     = ssh
maxretry = 4
bantime  = 2h
EOF

Parameetrite tähendus:

  • maxretry — mitu ebaõnnestumist enne blokeeringut;
  • findtime — ajaaken, mille sees ebaõnnestumisi loetakse;
  • bantime — kui kaua blokeeringut hoida (-1 on igavesti);
  • ignoreip — valge nimekiri (lisage oma koduse IP, et ennast mitte välja lukustada).

Kui SSH töötab mittestandardsel pordil, märkige ssh asemel selle number:

[sshd]
enabled = true
port    = 2222

3. samm. Rakendamine

systemctl restart fail2ban
fail2ban-client status

Väljund näitab aktiivsete jail’ide nimekirja. SSH üksikasjad:

fail2ban-client status sshd

Siin on näha leitud katsete arv ja hetkel blokeeritud IP-d.

Progresseeruv blokeering korduvate rünnakute eest

Et järjekindlad rikkujad saaksid üha pikema blokeeringu, lülitage sektsioonis [DEFAULT] sisse rekursiivne režiim:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 1w

Iga sama IP korduv blokeering pikeneb kaks korda, kuid mitte üle nädala.

Blokeeringute haldamine

Konkreetse IP lahtiblokeerimine:

fail2ban-client set sshd unbanip 203.0.113.10

Käsitsi blokeerimine:

fail2ban-client set sshd banip 203.0.113.10

fail2ban enda tööpäeviku vaatamine:

tail -f /var/log/fail2ban.log

Kontroll systemd-logidel

Kaasaegsetes distributsioonides kirjutab SSH journaldi, mitte faili /var/log/auth.log. Veenduge, et taustaprogramm loeb journaldi — lisage sektsiooni [sshd]:

backend = systemd

Kontrollige, et filter leiab kirjed:

fail2ban-regex "systemd-journal[sshd]" /etc/fail2ban/filter.d/sshd.conf

Jail recidive: blokeering retsidivistidele

Eraldi jail recidive jälgib fail2bani enda logi ja blokeerib pikaks ajaks IP-d, mis jäävad ikka ja jälle vahele. Lisage faili jail.local:

[recidive]
enabled  = true
logpath  = /var/log/fail2ban.log
bantime  = 1w
findtime = 1d
maxretry = 5

Nüüd saadetakse aadress, mis on ööpäeva jooksul 5 korda blokeeritud, nädalaks blokeeringusse.

Teavitused e-postile

fail2ban võib iga blokeeringu kohta kirja saata. Sektsioonis [DEFAULT] määrake:

destemail = [email protected]
sender    = [email protected]
action    = %(action_mwl)s

action_mwl saadab kirja koos logide ja rikkuja whois-andmetega. Posti saatmiseks peab serveris olema seadistatud MTA (näiteks postfix).

Veebiserveri kaitse

Peale SSH kaitseb fail2ban ka nginxi. Näide jail’ist autentimise äraarvamise vastu:

[nginx-http-auth]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 5

Valmis filtrid asuvad kaustas /etc/fail2ban/filter.d/ — neid saab ühendada samamoodi faili jail.local kaudu.

Tõhususe kontroll

Mitu aadressi on kokku kogu aja jooksul blokeeritud:

grep "Ban" /var/log/fail2ban.log | wc -l

Enim blokeeritud IP-d:

grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head

Selline aruanne näitab selgelt, et kaitse tõrjub rünnakuid päriselt.

Korduma kippuvad küsimused

Kas ma ei blokeeri iseennast? Lisage oma püsiv IP nimekirja ignoreip. Kui blokeeringut ei õnnestunud vältida, tehke lahtiblokeerimine VPS-i konsooli (KVM) kaudu, mitte SSH-ga.

Kas fail2ban töötab nftables’iga? Jah, määrake sektsioonis [DEFAULT] banaction = nftables-multiport, kui server kasutab nftables’it.

Kas kaitsta saab ka muud peale SSH? Jah, valmis jail’id on olemas nginxi, postfixi, dovecoti ja teiste jaoks — need lülitatakse sisse samamoodi failis jail.local.

Kuidas kontrollida, kas jail päriselt töötab? Vaadake fail2ban-client status sshd ja /var/log/fail2ban.log — sealt on näha leitud ja blokeeritud aadressid.

Kui palju ressursse see kulutab? Minimaalselt — tegemist on kerge Pythoni deemoniga, mis loeb logisid. Märgatavat koormust VPS-ile ei teki.


fail2ban on iga serveri põhikaitse. Projektidele, kus turvalisus on kriitiline, võtke VPS turvalisuse ja VPN-i jaoks või VPS-i rent. Seadistuse usaldage Serverite haldusele.

Olga Naumova