Fail2ban SSH aizsardzībai: konfigurācija 2026
Palaist serverī ar vienu komandu (vispirms pārbaudiet skripta saturu zemāk):
curl -sSL https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bash…vai ar wget:
wget -qO- https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bashSkripta saturs nastrojka-fail2ban.sh:
#!/usr/bin/env bash
# Fail2ban instalēšana un jail SSH aizsardzībai (Ubuntu/Debian)
set -euo pipefail
# 1. Instalēšana
sudo apt update && sudo apt install -y fail2ban
# 2. Lokālā konfigurācija (pēdiņas 'EOF' — sekcijas tiek rakstītas burtiski)
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. Pielietošana un pārbaude
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
echo "Gatavs: fail2ban aizsargā SSH no paroļu uzlaušanas."
Fail2ban aizsargā serveri no paroļu uzlaušanas: tas lasa žurnālus, atrod atkārtotus neveiksmīgus pieteikšanās mēģinājumus un bloķē IP adresi ar ugunsmūri. Konfigurēšana nozīmē pakotnes uzinstalēšanu un faila jail.local izveidi ar ieslēgtu SSH jail. Zemāk — darba konfigurācija.
Kā tas darbojas
Fail2ban uzrauga žurnāla failus (piemēram, SSH pieteikšanās mēģinājumus), salīdzina rindas ar filtriem (regex) un, pārsniedzot neveiksmju limitu, pievieno noteikumu iptables/nftables, bloķējot pārkāpēju uz noteiktu laiku.
1. solis. Instalēšana
apt update
apt install -y fail2ban
systemctl enable --now fail2ban
CentOS/AlmaLinux sistēmās: dnf install -y fail2ban.
2. solis. Lokālā konfigurācija
Nekad nerediģējiet jail.conf tieši — atjauninājumos tas tiek pārrakstīts. Atveriet /etc/fail2ban/jail.local redaktorā (sudo nano /etc/fail2ban/jail.local) un ielīmējiet saturu:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = ssh
maxretry = 4
bantime = 2h
Vai izveidojiet failu uzreiz ar vienu komandu — nokopējiet un ielīmējiet konsolē (pēdiņas 'EOF' ieraksta sekcijas burtiski):
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
Parametru skaidrojums:
maxretry— cik neveiksmju līdz bloķēšanai;findtime— laika logs, kurā neveiksmes tiek skaitītas;bantime— cik ilgi turēt bloķējumu (-1— mūžīgi);ignoreip— baltais saraksts (pievienojiet savu mājas IP, lai nenobloķētu sevi).
Ja SSH strādā uz nestandarta porta, ssh vietā norādiet tā numuru:
[sshd]
enabled = true
port = 2222
3. solis. Pielietošana
systemctl restart fail2ban
fail2ban-client status
Izvade parādīs aktīvo jail sarakstu. Detaļas par SSH:
fail2ban-client status sshd
Šeit redzams atrasto mēģinājumu skaits un pašlaik bloķētās IP adreses.
Progresīvs bloķējums par atkārtotiem uzbrukumiem
Lai neatlaidīgie pārkāpēji tiktu bloķēti arvien ilgāk, ieslēdziet rekursīvo režīmu sadaļā [DEFAULT]:
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1w
Katrs atkārtots tās pašas IP adreses bloķējums palielinās divkārt, bet ne ilgāk par nedēļu.
Bloķējumu pārvaldība
Atbloķēt konkrētu IP:
fail2ban-client set sshd unbanip 203.0.113.10
Nobloķēt manuāli:
fail2ban-client set sshd banip 203.0.113.10
Apskatīt paša fail2ban darbības žurnālu:
tail -f /var/log/fail2ban.log
Darbs ar systemd žurnāliem
Mūsdienīgos distributīvos SSH raksta uz journald, nevis /var/log/auth.log. Pārliecinieties, ka backend lasa journald — pievienojiet sadaļā [sshd]:
backend = systemd
Pārbaudiet, vai filtrs atrod ierakstus:
fail2ban-regex "systemd-journal[sshd]" /etc/fail2ban/filter.d/sshd.conf
Jail recidive: bloķējums recidīvistiem
Atsevišķs jail recidive seko līdzi pašam fail2ban žurnālam un uz ilgu laiku bloķē IP adreses, kas pieķeras atkal un atkal. Pievienojiet failā jail.local:
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5
Tagad adrese, kas diennaktī bloķēta 5 reizes, tiek bloķēta uz nedēļu.
Paziņojumi uz e-pastu
Fail2ban var sūtīt vēstuli par katru bloķējumu. Sadaļā [DEFAULT] norādiet:
destemail = [email protected]
sender = [email protected]
action = %(action_mwl)s
action_mwl nosūta vēstuli ar žurnāliem un pārkāpēja whois datiem. Lai pasts tiktu nosūtīts, uz servera jābūt konfigurētam MTA (piemēram, postfix).
Tīmekļa servera aizsardzība
Bez SSH fail2ban aizsargā arī nginx. Piemērs jail pret autentifikācijas uzlaušanu:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
Gatavi filtri atrodas mapē /etc/fail2ban/filter.d/ — tos pieslēdz tāpat caur jail.local.
Efektivitātes pārbaude
Cik adrešu kopumā bloķēts visā laikā:
grep "Ban" /var/log/fail2ban.log | wc -l
Biežāk bloķētās IP adreses:
grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head
Šāds pārskats uzskatāmi rāda, ka aizsardzība tiešām atsit uzbrukumus.
Biežāk uzdotie jautājumi
Vai es nenobloķēšu pats sevi?
Pievienojiet savu pastāvīgo IP sarakstam ignoreip. Ja bloķējums tomēr notiek, atbloķējiet sevi caur VPS konsoli (KVM), nevis pa SSH.
Vai fail2ban strādā ar nftables?
Jā, norādiet banaction = nftables-multiport sadaļā [DEFAULT], ja serveris izmanto nftables.
Vai var aizsargāt ne tikai SSH?
Jā, ir gatavi jail nginx, postfix, dovecot un citiem servisiem — tos ieslēdz tāpat failā jail.local.
Kā pārbaudīt, vai jail tiešām strādā?
Apskatiet fail2ban-client status sshd un /var/log/fail2ban.log — tur redzamas atrastās un bloķētās adreses.
Cik daudz resursu tas patērē? Minimāli — tas ir viegls Python dēmons, kas lasa žurnālus. Manāmas slodzes uz VPS nav.
Fail2ban ir jebkura servera pamata aizsardzība. Projektiem, kur drošība ir kritiska, ņemiet VPS drošībai un VPN vai VPS nomu. Konfigurēšanu uzticiet Serveru administrēšanai.