Инструкция по установке и первичной настройке #Fail2Ban.
Установка
1
| apt update && apt install --yes fail2ban python3-systemd rsyslog
|
Настройка
- Скачать файлы локальной конфигурации в
/etc/fail2ban/:
1
| f=('fail2ban' 'jail'); d='/etc/fail2ban'; s='https://libsys.ru/ru/2025/02/e69f2ca5-e02c-5aa2-a4ef-43b0b443b67e'; for i in "${f[@]}"; do curl -fsSLo "${d}/${i}.local" "${s}/${i}.local"; done
|
- Скачать файлы локальной конфигурации в
/etc/fail2ban/action.d/:
1
| f=('nftables-common'); d='/etc/fail2ban/action.d'; s='https://libsys.ru/ru/2025/02/e69f2ca5-e02c-5aa2-a4ef-43b0b443b67e'; for i in "${f[@]}"; do curl -fsSLo "${d}/${i}.local" "${s}/action.${i}.local"; done
|
Тюрьмы
SSH
- Создать файл конфигурации тюрьмы
/etc/fail2ban/jail.d/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 со следующим содержанием:
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 со следующим содержанием:
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 со следующим содержанием:
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 со следующим содержанием:
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 со следующим содержанием:
1
2
3
4
| [Definition]
failregex =
ignoreregex =
|
- Создать файл конфигурации тюрьмы
/etc/fail2ban/jail.d/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
|
Использование
- Посмотреть статус всех тюрем:
- Посмотреть статус тюрьмы
JAIL_NAME:
1
| fail2ban-client status 'JAIL_NAME'
|
- Посмотреть статус всех тюрем в компактном виде:
- Заблокировать 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
|