760 May 29, 2022, 11:07 a.m.

Настройка связки Fail2ban (Debian) +Mikrotik

Задачи: 1. Сделать связку Fail2ban + Mikrotik 2. Настроить Fail2ban на защиту zoneminder

Настройка Debian:

ssh-keygen -t rsa

ВАЖНО! После создания связки ключей, публичный нужно скопировать на mikrotik и удалить с Debian, а приватному нужно изменить права 400 (только чтение) в противном случае беспарольная авторизация работать не будет.

nano /usr/bin/mikrotik (название файла может быть любым, в будущем при вызове в консоли этого названия будет осуществлен переход в SSH консоль роутера без пароля, с помощью сертификата)

#!/bin/bash
ssh -l USERNAME_MIKROTIK -p22 -i /root/.ssh/id_rsa IP_ADDRESS_YOURMICROTIK "$1"

ВАЖНО! Задаем права доступа 755 (делаем его исполняемым)

Настройка Mikrotik

Разрешаем доступ по SSH, если он закрыт, на определенный IP адрес. Создаем отдельного пользователя, для работы fail2ban, c правами администратора, для того чтобы он мог записывать данные в адрес-лист. Дополнительно можно ограничить пул адресов для доступа. Сертификат, который был создан на Debian привязываем к пользователю: System > Users > SSH Keys > Import SSH Key после этого пароль на пользователя перестанет работать, теперь авторизация ТОЛЬКО по ключу.

На этом этапе можно проверить связку путем ввода команды mikrotik (или то, что было создано /usr/bin/YOURNAME) после чего попросит ввести Yes\No, вводим Yes. появится приветствие Mikrotik, второй раз подтверждение делать не нужно. Если всё работает, можно приступать к следующему этапу.

Настройка Fail2ban

apt install fail2ban

Редактируем блок zoneminder, изменяя путь до лог-файла.

nano /etc/fail2ban/jail.conf
[zoneminder]
# Zoneminder HTTP/HTTPS web interface auth
# Logs auth failures to apache2 error log
port    = http,https
logpath = /var/log/apache2/YOURLOGFILE

Редактируем шаблон логгов для zoneminder.

ВАЖНО! Чтобы появлялись логи, необходимо в панели управления Console> Logging> LOG_LEVEL_WEBLOG установить WARNING

nano /etc/fail2ban/filter.d/zoneminder.conf
# Fail2Ban filter for Zoneminder login failures

[INCLUDES]
before = apache-common.conf

[Definition]

# pattern: [Wed Apr 27 23:12:07.736196 2016] [:error] [pid 2460] [client 10.1.1.1:47296] WAR [Login denied for user "test"], referer: https://zoneminderurl/index.php
# pattern: [Wed Apr 27 23:12:07.736196 2016] [php7:notice] [pid 2460] [client 10.1.1.1:47296] ERR [Login denied for user "test"], referer: https://zoneminderurl/index.php
# pattern: [Wed Apr 27 23:12:07.736196 2016] [php7:notice] [pid 2460] [client 10.1.1.1:47296] ERR [Could not retrieve user test details], referer: https://zoneminderurl/index.php
#
# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile.

#failregex = 
failregex = ^%(_apache_error_client)s WAR \[Login denied for user "[^"]*"\]
            ^\[\](?: \[php:notice\])?(?: \[pid \d+\])? \[client <HOST>:\d+\] ERR \[Login denied for user "[^"]*"\]
            ^\[\](?: \[php:notice\])?(?: \[pid \d+\])? \[client <HOST>:\d+\] ERR \[Could not retrieve user [^"]*\]

ignoreregex =

# Notes:
# Tested on Zoneminder 1.34.9
#
# Author: John Marzella
# Edited: Sagitt Cyber

Создаем алгоритм действий при обнаружении перебора паролей:

nano /etc/fail2ban/action.d/mikrotik
[Definition]
actionstart = 
actionstop = 
actioncheck = 
actionban = mikrotik ":ip firewall address-list add list=fail2ban address=<ip> comment=Autofail2Ban-<ip>"
actionunban = mikrotik ":ip firewall address-list remove [:ip firewall address-list find comment=Autofail2Ban-<ip>]"

ВАЖНО! для того чтобы снять блокировку, желательно использовать консоль Debian чтобы fail2ban «знал» о снятии блокировки. Поиск заблокированного для разблокировки осуществляется через поиск комментария в роутере. Команда: fail2ban-client set zoneminder unbanip 1.1.1.1

Активируем настройки

nano /etc/fail2ban/jail.d/defaults-debian.conf
[zoneminder]
enabled = true
action = mikrotik

Перезагружаем сервис

systemctl reload fail2ban