Защита опубликованного RDP-сервера с помощью Mikrotik

Простой способ автоматически блокировать «брутфорсеров», пытающихся подобрать пароли к какому-либо из ваших опубликованных через Микротик сервисов.

Идея:

  • тем или иным образом отфильтровываем «новое подключение» злоумышленника. Обратите внимание! Если речь идет про DST-NAT (т.е. некий внутренний сервер, входящий порт которого опубликован снаружи), то фильтрация будет в forward-chain.
  • Заносим src-IP этого «нового подключения» в временный «список 1 уровня» с таймаутом скажем 30 минут
  • Далее делаем еще несколько уровней, куда последовательно будем заносить Src-IP из предыдущего уровня. Таким образом, если за время жизни списка некто попытается несклько раз подключиться (типовая ситуация — брутфорс логинов-паролей), то он последовательно попадет в списки 1,2,3 и т.д. уровней
  • Итоговое правило: из последнего списка занести Src-IP в постоянный бан-лист

Реализация (В качестве примера рассмотрим опубликованный RDP-сервер, TCP-3389, с внутренним IP=192.168.1.15. Служба опубликована снаружи на нестандартном порту TCP-25000, временные списки — 3 уровней, т.е. по сути дается три попытки на подключение, таймаут 30 мин на список):

  • Первым добавляем правило, блокирующее форвард на внутренний сервер для всех из постоянного банлиста:

add action=drop chain=forward comment="Drop Bad-IP address (rdp brutforce)" dst-port=3389 in-interface=ether1-WAN protocol=tcp src-address-list=BAD-IP-auto

  • Добавляем правило заносящее IP из списка 3 уровня в постоянный банлист

add action=add-src-to-address-list address-list=BAD-IP-auto address-list-timeout=none-static chain=forward dst-address=192.168.1.15 dst-port=3389 log=yes log-prefix=FW_BAN protocol=tcp src-address-list=rdp_brutforce_level3 tcp-flags=syn

  • Добавляем правило заносящее IP из временного списка 2 уровня во временный список 3 уровня

add action=add-src-to-address-list address-list=rdp_brutforce_level3 address-list-timeout=30m chain=forward dst-address=192.168.1.15 dst-port=3389 log=yes log-prefix=FW_Lev3 protocol=tcp src-address-list=rdp_brutforce_level2 tcp-flags=syn

  • Добавляем правило заносящее IP из временного списка 1 уровня во временный список 2 уровня

add action=add-src-to-address-list address-list=rdp_brutforce_level2 address-list-timeout=30m chain=forward dst-address=192.168.1.15 dst-port=3389 log=yes log-prefix=FW_Lev2 protocol=tcp src-address-list=rdp_brutforce_level1 tcp-flags=syn

  • Добавляем правило заносящее IP во временный список 1 уровня

add action=add-src-to-address-list address-list=rdp_brutforce_level1 address-list-timeout=30m chain=forward dst-address=192.168.1.15 dst-port=3389 log=yes log-prefix=FW_Lev1 protocol=tcp tcp-flags=syn

ОБРАТИТЕ ВНИМАНИЕ!:

  • В данном примере «новое подключение злоумышленника» мы отфильтровываем по параметрам
    • chain, dst-address, dst-port и ключевой параметр tcp-flags=syn. т.е. все новые попытки установить TCP-соединение на эту службу будут попадать под фильтр.
    • Для других служб — параметры могут быть иными (конкретно речь про tcp-flags=syn )
    • обязательно протестируйте работу правил НЕ СО СВОЕЙ МАШИНЫ. Например в данном примере число уровней лучше повысить до 4, т.к. как показал тест, при новом подключении с ранее не подключавшегося ноутбука стандартным MSTSC клиентом проходит аж три SYN-флага, и если оставить три уровня, то честный пользователь, забывший пароль может неожиданно для себя попасть в бан лист уже со второй попытки.
  • правила идут в обратном порядке. Если расположить их по-порядку, то проходя по цепочке firewall rules IP по очереди попадет во все временные списки и в итоговый банлист, а нам это не нужно. Мы хотим, чтобы именно каждая новая попытка подключения — заносила IP в список следующего уровня.
  • помониторьте работу правил и наполнение банлистов несколько дней. В правилах приведенных выше — есть включенный флаг логирования, вы будете видеть в логе Микротик все срабатывания.

Готово. Можно проверять.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Post Navigation

Яндекс.Метрика