fail2ban seadistamine SSH-le: kaitse jõurünnaku eest 2026
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 bashSkripti 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 (-1on 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.