Fail2ban SSH aizsardzībai: konfigurācija 2026

08 May 2026 Autors: Olga Naumova

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 bash

Skripta 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.

Olga Naumova