port knocking mikrotik превью

Port knocking MikroTik

Port knocking — настолько простой, насколько и эффективный способ защиты вашей локальной сети от несанкционированного доступа снаружи в случаях, когда вам необходимо использовать проброс портов. В этой статье я расскажу, как реализовать этот простой алгоритм авторизации на роутере MikroTik.

О том, что использовать обычный проброс портов не является правильным, я уже упомянул вскользь в статье «Проброс портов в MikroTik«. Но порой все же возникает необходимость давать доступ к удаленным рабочим столам некоторым сотрудникам (например, бухгалтерам в период сдачи отчетности — знакомо, да?).

При этом:

  1. вам неизвестен адрес, с которого человек будет подключаться и ограничиться правилом в фаерволе у вас не получится;
  2. использование VPN не представляется возможным в силу нескольких причин, начиная с некомпетентности сотрудника и заканчивая принципиальным запретом VPN на устройствах, через которые этот самый сотрудник будет пытаться подключиться (например, какой-нибудь бесплатный Wi-Fi в отеле на острове Пасхи).

Поможет в этом случае port knocking. Суть этого метода заключается в том, что пользователь, прежде чем получить доступ к чему-то, должен представиться. В классическом решении port knocking используются проколы TCP или UDP — пользователь «простукивает» определенную последовательность портов (обычно не менее трех), после чего его IP добавляется в список адресов с определенными привилегиями: в нашем случае к пробросу порта RDP на его рабочее место. Это как «постучи в дверь три раза, потом — два, потом — пять, чтобы я понял, что это ты». Знакомо, не правда ли?

Суть алгоритма работы firewall при обработке последовательности port knocking заключается в том, что на ряду с проверкой текущего условия происходит проверка: было ли выполнено предыдущее условие.

Последовательность портов для простукивания и ее длина обусловлены только вашей фантазией. Но тут возникает небольшая проблема: если с простукиванием портов из Linux штатными средствами проблем никаких не наблюдается, то с Windows этот номер просто так не пройдет. Но у ваших бухгалтеров наверняка на ноутбуках стоит Windows, а слово Linux они вообще воспринимают, как ругательство.

Пример простукивания портов штатными средствами на Linux:

Здесь использовалась команда nc [параметры] [хост] [порт], где

  • z — говорит программе о том, что нужно просто «стукнуться», не посылая каки-либо дополнительных данных и не слушая ответ;
  • u — использование UDP вместо TCP.

К сожалению, данный пример не решает нашей задачи со штатными средствами Windows. А решение простое и лежит на поверхности: вместо UPD или TCP использовать ICMP ping. Принцип port knocking мы оставим, а последовательность портов заменим последовательностью разных размеров пакета.

Выглядеть «простукивание» из Windows будет так:

Простой ping с параметрами:

  • -4 — использовать IPv4
  • -f — запрет фрагментации пакета;
  • -n — количество запросов;
  • -l — буфер отправки (объем данных, которые мы отправляем «в нагрузку»).

Т.к. стандартный размер MTU — 1500, который к тому же может быть уменьшен всякими VLAN’ами и пр., а нам нужно, чтобы все влезло в один Ethernet фрейм, то рекомендую использовать буфер отправки в диапазоне 0-1000. Еще следует учесть, что размер самого пакета эхо-запроса ICMP «без нагрузки» (с L=0) — 28 байт, т.к. помимо данных там еще присутствует TCP-, ICMP-заголовки и .т.д. Можете погуглить, что из себя представляет ICMP-пакет. Таким образом, на роутере ловим пакеты размером равным [буфер отправки+28].

Теперь наш MikroTik должен распознать последовательность из трех пакетов с размерами 460, 549, 626. «На пальцах» алгоритм выглядит так:

  • если размер пакета 460 (432+28), добавить этот IP в список «первый уровень»;
  • если размер пакета 549 (521+28) и IP-адрес в списке «первый уровень», добавить этот IP в список «второй уровень».
  • если размер пакета 626 (598+28) и IP-адрес в списке «второй уровень», добавить этот IP в список «доступ к пробросу портов по RDP»

Реализация port knocking на MikroTik

Сначала в картинках:

port knocking mikrotik рис.1

Рис. 1 Создадим свою цепочку portKnocking и направим туда входящий ICMP

 

port knocking mikrotik рис.2

Рис.2 Создадим правило, которое в случае нужного размера пакета будет добавлять IP-адрес в список checkLevelOne

 

port knocking mikrotik-рис. 3

Рис.3 Аналогично первому создадим второе правило за тем лишь исключением, что проверим присутствие в списке прошедших первую проверку checkLevelOne. Добавлять будем в список checkLevelTwo

port knocking mikrotik рис.4

Рис.4 Аналогично второму создадим третье правило, которое уже добавит наш IP в список, которому разрешен доступ к пробросу порта. Четвертое правило в списке — возврат из цепочки обратно, если ни одно из правил не сработало.

Правила проверки port knocking в фаерволе надо разместить вверху до разрешений related/established. Иначе вы не уйдете дальше первой проверки — будут срабатывать правила related/established.

port knocking mikrotik рис.5

Рис.5 Сначала проверим, не стучится ли кто, потом разрешим related и established. В противном случае в цепочке portKnocking дальше первого правила не уйдем.

В скриптах:

Обратите внимание на параметр address-list-timeout в правилах, где IP добавляется в список адресов. Для этапов проверки я выставляю address-list-timeout=5s, т.к. считаю, что 5 секунд должно хватить для проверки следующего условия. Для завершающего правила, где адрес добавляется в разрешенные для подключения по RDP, address-list-timeout=30m — т.е. для подключения к удаленному рабочему столу человеку дается полчаса после успешного «простукивания» MikroTIk’а.

По истечении получаса адрес будет удален из списка AllowRDP, но сеанс не прервется, т.к. будут срабатывать правила allow related/established. Пользователю придется заново «представиться» в случае, если он сам прервет сеанс или за него это сделает плохая связь.

Для автоматизации процесса пишем пакетный файл (.bat или .cmd — кому как больше нравится) следующего содержания:

Теперь осталось только выслать каждому пользователю свой файл.

Как вы поняли, реализация алгоритма с простукиванием портов не только аналогична описанной выше, но даже проще — там не надо заморачиваться с размером пакета, а просто указать порт. Но для Windows нужны свои костыли…

Реклама:

Читайте также

Проброс портов в MikroTik Нередко у нас возникает необходимость дать доступ снаружи к компьютерам, которые находятся за NAT-ом в нашей локальной сети. Будь то веб-сервер или пе...
MikroTik. Смена MAC адреса. Как сменить mac-адрес интерфейса MikroTik? Вопрос совсем для новичков. Но раз вы сюда попали, то материал для вас и вы найдете здесь ответ на свой воп...
Mikrotik DHCP. Поднять за 5 минут. До чего дошел прогресс! Раньше, чтобы поднять DHCP, требовалось править кучу конфигов в текстовом редакторе. Теперь все делается в несколько кликов мы...
DNS в Mikrotik Кэширующий DNS в микротике это хорошо и просто. Настраивается быстро, используется легко и непринужденно. Опишу на примере и чуток поделюсь опытом. ...