Fail2Ban: Установка и настройка

Fail2Ban: Установка и настройка

Инструкция по установке и первичной настройке #Fail2Ban.

Установка

  • Установить пакеты:
1
apt update && apt install --yes fail2ban python3-systemd rsyslog

Настройка

  • Скачать файлы локальной конфигурации в /etc/fail2ban/:
1
 f=('fail2ban' 'jail'); d='/etc/fail2ban'; p='https://lib.onl/ru/2025/02/e69f2ca5-e02c-5aa2-a4ef-43b0b443b67e'; for i in "${f[@]}"; do curl -fsSLo "${d}/${i}.local" "${p}/${i}.local"; done
  • Скачать файлы локальной конфигурации в /etc/fail2ban/action.d/:
1
 f=('nftables-common'); d='/etc/fail2ban/action.d'; p='https://lib.onl/ru/2025/02/e69f2ca5-e02c-5aa2-a4ef-43b0b443b67e'; for i in "${f[@]}"; do curl -fsSLo "${d}/${i}.local" "${p}/action.${i}.local"; done

Тюрьмы

SSH

  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/sshd.local со следующим содержанием:
jail.sshd.local
1
2
3
4
5
6
7
8
9
[sshd]

enabled             = true
backend             = polling
filter              = %(__name__)s
logpath             = /var/log/auth.log

action              = nftables[type="multiport", name="%(__name__)s", port="22,8022", protocol="tcp"]
maxretry            = 5

Angie: BotSearch

  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/angie.botsearch.local со следующим содержанием:
jail.angie-botsearch.local
1
2
3
4
5
6
7
8
9
[nginx-botsearch]

enabled             = true
backend             = polling
filter              = %(__name__)s
logpath             = /var/log/angie/*access.log

action              = nftables[type="multiport", name="%(__name__)s", port="80,443", protocol="tcp"]
maxretry            = 2

Angie: LimitReq

  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/angie.limit-req.local со следующим содержанием:
jail.angie-limit-req.local
1
2
3
4
5
6
7
8
9
[nginx-limit-req]

enabled             = true
backend             = polling
filter              = %(__name__)s
logpath             = /var/log/angie/*error.log

action              = nftables[type="multiport", name="%(__name__)s", port="80,443", protocol="tcp"]
maxretry            = 5
  • В файл конфигурации Angie добавить следующие строки:
1
2
3
4
5
6
http {
  limit_req_zone $binary_remote_addr zone=main:10m rate=50r/s;
  server {
    limit_req zone=main burst=60 nodelay;
  }
}

Asterisk

  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/asterisk.local со следующим содержанием:
jail.asterisk.local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[asterisk]

enabled             = true
backend             = polling
filter              = %(__name__)s
logpath             = /var/log/%(__name__)s/messages.log

action              = nftables[type="allports", name="%(__name__)s-tcp", protocol="tcp"]
                      nftables[type="allports", name="%(__name__)s-udp", protocol="udp"]
maxretry            = 10

Recidive

Настройка тюрьмы для долгосрочной блокировки повторяющихся инцидентов.

  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/recidive.local со следующим содержанием:
jail.recidive.local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[recidive]

enabled             = true
backend             = polling
filter              = %(__name__)s
logpath             = /var/log/fail2ban.log

action              = nftables[type="allports"]
bantime             = 1w
findtime            = 1d
maxretry            = 3

Примеры

  • Заблокировать IP-адрес 192.168.1.2 на срок 1 неделю:
1
fail2ban-client set 'recidive' banip '192.168.1.2'

Manual

Настройка тюрьмы для перманентной блокировки.

  • Создать файл конфигурации фильтра /etc/fail2ban/filter.d/manual.conf со следующим содержанием:
filter.manual.conf
1
2
3
4
[Definition]

failregex =
ignoreregex =
  • Создать файл конфигурации тюрьмы /etc/fail2ban/jail.d/manual.local со следующим содержанием:
jail.manual.local
1
2
3
4
5
6
[manual]

enabled             = true

action              = nftables[type="allports"]
bantime             = -1

Примеры

  • Поместить IP-адрес 192.168.1.2 в тюрьму manual для постоянной блокировки:
1
fail2ban-client set 'manual' banip '192.168.1.2'
  • Удалить IP-адрес 192.168.1.2 из тюрьмы manual:
1
fail2ban-client set 'manual' unbanip '192.168.1.2'
  • Прочитать файл ip.blacklist.txt с IP-адресами и поместить их в тюрьму manual для постоянной блокировки:
1
grep -v '^#' 'ip.blacklist.txt' | while read IP; do fail2ban-client set 'manual' banip "${IP}"; done

Использование

  • Посмотреть статус всех тюрем:
1
fail2ban-client status
  • Посмотреть статус тюрьмы JAIL_NAME:
1
fail2ban-client status 'JAIL_NAME'
  • Посмотреть статус всех тюрем в компактном виде:
1
fail2ban-client banned
  • Заблокировать IP-адрес 192.168.1.2 в тюрьме JAIL_NAME:
1
fail2ban-client set 'JAIL_NAME' banip '192.168.1.2'
  • Разблокировать IP-адрес 192.168.1.2 в тюрьме JAIL_NAME:
1
fail2ban-client set 'JAIL_NAME' unbanip '192.168.1.2'
  • Разблокировать IP-адрес 192.168.1.2 во всех тюрьмах:
1
fail2ban-client unban '192.168.1.2'

Скрипты

  • Показать список заблокированных IP-адресов, разделённых по тюрьмам:
1
for i in $( fail2ban-client status | grep 'Jail list:' | sed 's|.*:||;s|,||g' ); do echo "Jail: ${i}"; fail2ban-client status "${i}" | grep 'Banned IP'; done