15:49 [NET] Port knocking MikroTik | |
Port knocking – настолько простой, насколько и эффективный способ защиты вашей локальной сети от несанкционированного доступа снаружи в случаях, когда вам необходимо использовать проброс портов. В этой статье я расскажу, как реализовать этот простой алгоритм авторизации на роутере MikroTik. О том, что использовать обычный проброс портов не является правильным, я уже упомянул вскользь в статье “Проброс портов в MikroTik“. Но порой все же возникает необходимость давать доступ к удаленным рабочим столам некоторым сотрудникам (например, бухгалтерам в период сдачи отчетности – знакомо, да?). При этом:
Поможет в этом случае port knocking. Суть этого метода заключается в том, что пользователь, прежде чем получить доступ к чему-то, должен представиться. В классическом решении port knocking используются проколы TCP или UDP – пользователь “простукивает” определенную последовательность портов (обычно не менее трех), после чего его IP добавляется в список адресов с определенными привилегиями: в нашем случае к пробросу порта RDP на его рабочее место. Это как “постучи в дверь три раза, потом – два, потом – пять, чтобы я понял, что это ты”. Знакомо, не правда ли? Суть алгоритма работы firewall при обработке последовательности port knocking заключается в том, что на ряду с проверкой текущего условия происходит проверка: было ли выполнено предыдущее условие. Последовательность портов для простукивания и ее длина обусловлены только вашей фантазией. Но тут возникает небольшая проблема: если с простукиванием портов из Linux штатными средствами проблем никаких не наблюдается, то с Windows этот номер просто так не пройдет. Но у ваших бухгалтеров наверняка на ноутбуках стоит Windows, а слово Linux они вообще воспринимают, как ругательство. Пример простукивания портов штатными средствами на Linux: Здесь использовалась команда
К сожалению, данный пример не решает нашей задачи со штатными средствами Windows. А решение простое и лежит на поверхности: вместо UPD или TCP использовать ICMP ping. Принцип port knocking мы оставим, а последовательность портов заменим последовательностью разных размеров пакета. Выглядеть “простукивание” из Windows будет так: Простой ping с параметрами:
Т.к. стандартный размер MTU – 1500, который к тому же может быть уменьшен всякими VLAN’ами и пр., а нам нужно, чтобы все влезло в один Ethernet фрейм, то рекомендую использовать буфер отправки в диапазоне 0-1000. Еще следует учесть, что размер самого пакета эхо-запроса ICMP “без нагрузки” (с L=0) – 28 байт, т.к. помимо данных там еще присутствует TCP-, ICMP-заголовки и .т.д. Можете погуглить, что из себя представляет ICMP-пакет. Таким образом, на роутере ловим пакеты размером равным [буфер отправки+28]. Теперь наш MikroTik должен распознать последовательность из трех пакетов с размерами 460, 549, 626. “На пальцах” алгоритм выглядит так:
Реализация port knocking на MikroTikСначала в картинках:
![]() Рис.2 Создадим правило, которое в случае нужного размера пакета будет добавлять IP-адрес в список checkLevelOne
![]() Рис.3 Аналогично первому создадим второе правило за тем лишь исключением, что проверим присутствие в списке прошедших первую проверку checkLevelOne. Добавлять будем в список checkLevelTwo ![]() Рис.4 Аналогично второму создадим третье правило, которое уже добавит наш IP в список, которому разрешен доступ к пробросу порта. Четвертое правило в списке – возврат из цепочки обратно, если ни одно из правил не сработало. Правила проверки port knocking в фаерволе надо разместить вверху до разрешений related/established. Иначе вы не уйдете дальше первой проверки – будут срабатывать правила related/established. ![]() Рис.5 Сначала проверим, не стучится ли кто, потом разрешим related и established. В противном случае в цепочке portKnocking дальше первого правила не уйдем. В скриптах: Обратите внимание на параметр По истечении получаса адрес будет удален из списка AllowRDP, но сеанс не прервется, т.к. будут срабатывать правила allow related/established. Пользователю придется заново “представиться” в случае, если он сам прервет сеанс или за него это сделает плохая связь. Для автоматизации процесса пишем пакетный файл (.bat или .cmd – кому как больше нравится) следующего содержания: Теперь осталось только выслать каждому пользователю свой файл. Как вы поняли, реализация алгоритма с простукиванием портов не только аналогична описанной выше, но даже проще – там не надо заморачиваться с размером пакета, а просто указать порт. Но для Windows нужны свои костыли… | |
|
Всего комментариев: 0 | |