Настройка связки 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