Настройка Fail2Ban в Mikrotik

Mikrotik

 

Fail2Ban — давно зарекомендовавшее себя решение для Linux систем, позволяющее эффективно выявлять и блокировать вредоносную активность, такую как подбор паролей или поиск уязвимостей. Но как быть, если защищаемые узлы находятся внутри сетевого периметра, а на внешнем контуре находится роутер Mikrotik? Ведь хотелось бы управлять блокировками на уровне всей сети, а не отдельного узла. Нет ничего сложного, в этой статье мы расскажем как быстро и просто обеспечить совместную работу этих двух популярных продуктов.

Часто встречающийся сценарий: Linux хосты находятся внутри сетевого периметра и общаются с внешним миром только через проброс портов или обратный прокси. Выход в сеть обеспечивает роутер Mikrotik. В данном случае остро встает вопрос защиты конечных узлов от вредоносной активности. Часть атак можно выявить и блокировать на сетевом уровне, но это будет лишь малая доля. Гораздо эффективнее с этой задачей справляется Fail2Ban на основе анализа логов приложений.

Можно, конечно, закрыть с помощью Fail2Ban каждый отдельный узел, но это не является эффективным решением так как злоумышленника нужно блокировать не только на уровне отдельного внутреннего узла, но и на уровне внешнего периметра сети, за который отвечает Mikrotik. Поэтому самое время заняться интеграцией двух систем, благо сделать это абсолютно не сложно.

Создание RSA-ключа для аутентификации в RouterOS

Для того, чтобы ваш Linux-сервер безопасно подключался к роутеру Mikrotik создадим отдельный SSH-ключ, RouterOS поддерживает только устаревшие алгоритмы шифрования DSA и RSA, поэтому использование такого ключа следует ограничить только работой с Mikrotik. Данный ключ должен быть создан для пользователя root, поэтому сначала повысим права командой:

sudo -s 

Или, если пакет sudo не установлен:

su -

А затем выполним генерацию ключа:

ssh-keygen -t rsa

В процессе вас явно спросят о расположении ключа:

Enter file in which to save the key (/root/.ssh/id_rsa):

введем полный путь:

/root/.ssh/id_rsa_routeros

В нашем случае ключ будет иметь имя id_rsa_routeros, вместе с ним в указанном расположении будет создан файл публичного ключа id_rsa_routeros.pub. От установки пароля на ключ отказываемся.

Теперь нам нужно любым доступным образом скопировать файл публичного ключа id_rsa_routeros.pub и передать его на роутер Mikrotik.

Не перепутайте! Файл id_rsa_routeros — это закрытый ключ, он является секретным и никогда не должен покидать пределы устройства. Копировать можно только публичные ключи с расширением .pub!

В RouterOS перейдите в System — Users — SSH Keys и добавьте ключ нажав на кнопку Import SSH Key, при импорте укажите пользователя, которому импортируете ключ, это должен быть пользователь с полными правами.

Fail2ban-Mikrotik-Firewall-001.pngЧтобы проверить, что все сделано правильно попробуем подключиться из нашей Linux-системы к Mikrotik с использованием ключа, для этого выполним команду:

 ssh -i /root/.ssh/id_rsa_routeros admin@192.168.72.1

Где /root/.ssh/id_rsa_routeros — полный путь к закрытому ключу, admin — пользователь RouterOS для которого мы импортировали ключ, 192.168.72.1 — адрес нашего роутера. Если все сделано правильно, то вы увидите в терминале приглашение Mikrotik.

Fail2ban-Mikrotik-Firewall-002.pngНа этом настройка доступа по ключу к роутеру Mikrotik закончена, переходим к следующему этапу.

Настройка Fail2Ban для совместной работы с брандмауэром Mikrotik

Современный Fail2Ban — сложная система, поэтому разработчики крайне не рекомендуют вносить настройки в существующие файлы конфигурации, а переопределять их через специальные файлы расширения. Для этого предназначены три специальные директории:

/etc/fail2ban/action.d
/etc/fail2ban/filter.d
/etc/fail2ban/jail.d

Первая, как понятно из наименования содержит описания действий, определяющая порядок блокировки/разблокировки. Вторая — фильтры, т.е. правила анализа системных журналов для выявления нежелательной активности. Ну а последняя связывает в себе фильтры и действия, указывая как именно реагировать на проявление нежелательной активности.

Файлы конфигурации могут иметь два расширения .conf и .local. По принятому соглашению файлы .conf устанавливаются самой службой и могут быть перезаписаны при обновлении, файлы .local — локальные изменения конфигурации и внесенные в них значения имеют наивысший приоритет, т.е. переопределяют значения из файлов .conf.

Сначала создадим файл с нужными действиями, для этого используем редактор nano, если же вам больше нравится редактор Midnight Commander, то замените в команде nano на mcedit:

nano /etc/fail2ban/action.d/mikrotik.local

И внесем в него следующее содержимое, в параметрах подключения используем значения которые мы разобрали ранее:

[Definition]
actionstart = ssh -i /root/.ssh/id_rsa_routeros admin@192.168.72.1 "/ip firewall address-list remove [find list=Fail2Ban]"
actionstop = ssh -i /root/.ssh/id_rsa_routeros admin@192.168.72.1 "/ip firewall address-list remove [find list=Fail2Ban]"

actionban = ssh -i /root/.ssh/id_rsa_routeros admin@192.168.72.1 "/ip firewall address-list add list=Fail2Ban address=<ip> comment=<time>"
actionunban = ssh -i /root/.ssh/id_rsa_routeros admin@192.168.72.1 "/ip firewall address-list remove [find address=<ip> list=Fail2Ban]"

Действия будут сводиться к добавлению в специальный адресный лист Fail2Ban адресов при блокировке и удалении при разблокировке, за это отвечают действия actionban и actionunban. Также логика Fail2Ban подразумевает очистку правил при остановке службы с повторным добавлением узлов, срок бана которых еще не истек при ее старте. Для этого у нас предусмотрено два дополнительных действия actionstart и actionstop, которые будут очищать адресный список на Mikrotik при запуске и остановке службы.

Теперь научим Fail2Ban работать с нашим роутером. По умолчанию в основанных на Debian системах включена только защита SSH, для чего jail sshd подключается с параметрами по умолчанию в файле /etc/fail2ban/jail.d/defaults-debian.conf:

[sshd]
enabled = true

Не будем трогать этот файл, а переопределим нужные параметры в собственном файле .local:

nano /etc/fail2ban/jail.d/sshd-mikrotik.local

Куда внесем следующий текст:

[sshd]
enabled = true
action = mikrotik
maxretry = 3
bantime = 24h

Напоминаем, что нам не нужно прописывать все параметры, а только те, что мы хотим переопределить. В нашем случае главное, это action = mikrotik, т.е. действие описанное в конфигурационном файле действий с именем mikrotik. Также мы переопределили порог ложных срабатываний, до трех и срок бана до суток.

Сохраняем изменения и перезапускаем службу:

systemctl restart fail2ban

Проверяем что нет ошибок и служба успешно перезапустилась:

systemctl status fail2ban

Теперь проверим работу наших настроек, попробуем кого-нибудь забанить:

fail2ban-client set sshd banip 1.2.3.4

Теперь в списках на Mikrotik должен появиться указанный нами адрес в составе списка Fail2Ban.

Fail2ban-Mikrotik-Firewall-003.pngТеперь остановим службу:

systemctl stop fail2ban

Все адреса из списка должны пропасть.

Снова запустим:

systemctl start fail2ban

Список адресов снова наполнится.

Проверим разблокировку:

fail2ban-client set sshd unbanip 1.2.3.4

Указанный адрес будет удален из списка.

Теперь осталось добавить последний штрих — блокировку указанных в списке адресов брандмауэром Mikrotik, для этого будем использовать таблицу RAW, перейдем в IP — Firewall — RAW и добавим новое правило: Chain — prerouting, Src. Address List — Fail2Ban (если данного листа пока не существует, то просто укажите его название как в конфигурации action Fail2Ban), на закладке Action добавляем действие drop.

Fail2ban-Mikrotik-Firewall-004.png

Или в терминале:

/ip firewall raw
add action=drop chain=prerouting src-address-list=Fail2Ban

На этом настройка совместной работы Fail2Ban и брандмауэра Mikrotik завершена, теперь вы можете использовать сильные стороны каждой из указанных систем. В завершение хотим сказать, что если вы хотите интегрировать с Mikrotik сразу несколько Linux-систем с Fail2Ban, то используйте для каждой из них отдельный адресный лист.

interface31.ru

Материал распространяется по лицензии CC-BY-SA

Оцените статью
IT-Привет!
Добавить комментарий