Пожалуйста, обратите внимание на следующую информацию перед началом использования данной инструкции по настройке технологии "Port Knocking" на устройствах MikroTik:
Опасность нарушения безопасности: применение технологии «Port Knocking» может повысить уровень безопасности вашей сети, но также может представлять определенные риски. Неверные настройки или неправильное выполнение инструкции может привести к потере доступа к вашему маршрутизатору или серьезным нарушениям в работе сети. Пожалуйста, перед выполнением каких-либо действий убедитесь, что вы полностью понимаете, что делаете, и произведите резервное копирование текущих настроек устройства.
Подготовка и обновление устройства: Убедитесь, что ваш маршрутизатор MikroTik обновлен до последней версии прошивки. Некоторые функции могут быть доступны только в последних версиях, и обновление может исправить известные уязвимости.
Ограничения технологии "Port Knocking": Несмотря на то, что технология "Port Knocking" может повысить безопасность вашей сети, она не является единственным механизмом защиты. Рекомендуется использовать ее вместе с другими методами, такими как брандмауэр, VPN, сложные пароли и системы мониторинга.
Потеря доступа: При неправильной настройке или забытом последовательности портов для "стучания" может возникнуть ситуация, когда вы потеряете доступ к маршрутизатору. Обязательно создайте план восстановления доступа в случае возникновения проблем.
Конфиденциальность: При публикации или передаче данной инструкции другим пользователям, будьте осторожны, чтобы не разглашать конфиденциальную информацию о вашей сети или оборудовании.
Ответственность: Вы несете полную ответственность за любые последствия, возникающие в результате применения данной инструкции. Автор инструкции не несет ответственности за убытки или повреждения, возникшие в результате неправильной настройки или использования технологии "Port Knocking".
При использовании данной инструкции, вы подтверждаете, что прочитали, поняли и согласны с вышеперечисленными условиями. Если вы не согласны с этими условиями, прекратите использование инструкции.
Настоятельно рекомендуется проводить настройку и тестирование технологии "Port Knocking" в контролируемой среде перед ее внедрением в живую сеть или производственную среду.
Что такое Port Knocking
Port Knocking - это метод, который позволяет скрыть открытые порты на сервере, а также скрыть сам факт существования сервера в сети. Он основывается на использовании последовательности подключений к определенным портам, которые заранее определены администратором. Если эта последовательность верна, то система открывает доступ к нужному порту.
Таким образом, Port Knocking предоставляет более высокий уровень безопасности, так как даже если злоумышленник знает номер порта, он не сможет подключиться к нему без правильной последовательности. Это позволяет защитить сервер от прямых атак и сканирования портов.
Что необходимо для настройки
Сетевое оборудование - в моем случае MikroTik RB2011 (на других моделях не тестировалось, но должно так же работать.)
Белый IP адрес
MikroTik предварительно настроен, на нем установлено интернет соединение (обязательно сделан backup конфигурации)
Данная статья описывает возможность защищенного подключения к оборудованию в локальной сети из сети интернет без использования технологии VPN. Однако стоит отметить, что если у вас есть возможность использовать технологию VPN, это более безопасный вариант и рекомендуется предпочесть его.
Описание технологии следующее. Пользователь отправляет запросы на порты IP-адреса маршрутизатора. Если пользователь отправляет запрос на нужный порт, то маршрутизатор добавляет IP-адрес пользователя в первый список. Затем в течение времени, указанного администратором при настройке, пользователь должен отправить запрос на второй порт. Если это не происходит, его IP удаляется из первого списка. Если пользователь успевает, то его IP адрес добавляется во второй список. Этот процесс продолжается для всех портов, которые указал администратор при настройке (максимально реализовывал 7 портов, но возможно использование и большего количества, вопрос целесообразности). В результате IP-адрес пользователя попадает в список, который позволяет доступ к определенному порту и перенаправляет его на устройство, которое назначил администратор.
Пример
Есть компьютер, к которому настроен RDP доступ. Я хочу подключаться к нему через интернет без использования VPN. Для этого реализуем Port Knocking, "простукивая" 3 порта.
Добавляем правило Firewall №1
На вкладке General
В строке Chain выбираем input
В строке Protocol выбираем 6 (tcp)
В строке Dst. Port указываем первый порт на который пользователь будет обращаться (в данном случае 53469)
На вкладке Action
В строке Action выбираем add src to address list
В строке Address List вводим название первой группы доступа (в данном случае hod1)
В строке Timeout вводим время в течении которого пользователь должен будет отправить запрос на второй порт (в данном случае 30 секунд)
Жмем ОК
Что происходит
Если MikroTik получает запрос на порт 53469, то он добавляет ваш внешний IP адрес в список hod1.
/ip firewall filter add action=add-src-to-address-list address-list=hod1 address-list-timeout=30s chain=input dst-port=53469 protocol=tcp
Добавляем правило Firewall №2
На вкладке General
В строке Chain выбираем input
В строке Src. Address List выбираем hod1 (если в предыдущем правиле был указан другой порт, то используем тот, который был указан ранее)
В строке Protocol выбираем 6 (tcp)
В строке Dst. Port указываем второй порт на который пользователь будет обращаться(в данном случае 17347)
На вкладке Action
В строке Action выбираем add src to address list
В строке Address List вводим название второй группы доступа (в данном случае hod2)
В строке Timeout вводим время в течении которого пользователь должен будет отправить запрос на третий порт (в данном случае 30 секунд)
Жмем ОК
Что происходит
Если MikroTik получает запрос на порт 17347 с IP адреса который уже состоит в списке hod1, то он добавляет IP адрес в список hod2.
/ip firewall filter add action=add-src-to-address-list address-list=hod2 address-list-timeout=30s chain=input dst-port=17347 protocol=tcp src-address-list=hod1
Добавляем правило Firewall №3
На вкладке General
В строке Chain выбираем input
В строке Src. Address List выбираем hod2 (если в предыдущем правиле был указан другой порт, то используем тот, который был указан ранее)
В строке Protocol выбираем 6 (tcp)
В строке Dst. Port указываем третий порт на который пользователь будет обращаться (в данном случае
)
На вкладке Action
В строке Action выбираем add src to address list
В строке Address List вводим название первой группы доступа (в данном случае hod_end)
В строке Timeout вводим время, в течении которого пользователь должен будет подключиться (в данном случае 1 час)
Жмем ОК
Что происходит
Если MikroTik получает запрос на порт 41271 с IP адреса который уже состоит в списке hod2, то он добавляет IP адрес в список hod_end.
/ip firewall filter add action=add-src-to-address-list address-list=hod_end address-list-timeout=1h chain=input dst-port=41271 protocol=tcp src-address-list=hod2
Все 3 правила необходимо расположить сразу после основных правил блокировок (а я надеюсь, что они у вас есть)
Добавляем NAT правило
На вкладке General
В строке Chain выбираем dstnat
В строке Src. Address List выбираем hod_end (если в предыдущем правиле был указан другой порт, то используем тот, который был указан ранее)
В строке Protocol выбираем 6 (tcp)
В строке Dst. Port указываем порт, на который пользователь будет обращаться для подключению к компьютеру (в данном случае 12233)
На вкладке Action
В строке Action выбираем dst-nat
В строке To Addresses вводим локальный IP адрес компьютера (в данном случае 192.168.1.10)
В строке To Ports вводим порт, на который подключаемся (в данном случае стандартный RDP 3389)
Жмем ОК
Что происходит
Если MikroTik получает запрос на порт 12233 с IP адреса, который состоит в списке hod_end, то он перенаправляет его на компьютер с IP адресом 192.168.1.10 на стандартный RDP порт 3389.
/ip firewall nat add action=dst-nat chain=dstnat dst-port=12233 protocol=tcp src-address-list=hod_end to-addresses=192.168.1.10 to-ports=3389
Данная статья написана с целью понимания основ технологии Port Knocking на базе личного опыта и материалов из интернета, изученных перед её использованием. В ходе внедрения и обслуживания технология стала более сложной и запутанной, о чем я постараюсь рассказать в следующих публикациях.
Исходники для «простукивания» портов будут выложены в отдельной статье.
Комментарии (17)
aik
29.07.2023 10:27Обычно проблема не с серверной стороны безопасность накрутить, а с юзерской заставить эти требования соблюдать.
Если к впн более-менее юзеров приучили, то вот стучать телнетом в порты перед тем, как через rdp логиниться...solver
29.07.2023 10:27+1Если к впн более-менее юзеров приучили, то вот стучать телнетом в порты перед тем, как через rdp логиниться...
Это легко автоматизируется же. Скрипт который стукнет в порты определённым образом это изи. Юзер будет запускать свой софт как обычно, ярлычком на экране. Это уже 100500 раз описано. Тема далеко не свежая)
strelkan
29.07.2023 10:27да, и заморочки с телнетом не нужны, можно сделать html с фетчами и стучаться прямо из браузера
aik
29.07.2023 10:27Несвежая, но и не взлетевшая.
Юзер будет запускать свой софт как обычно, ярлычком на экране. Это уже 100500 раз описано.
Вот если честно, ни разу не видел "прозрачного" решения.
Либо "сперва откройте эту страничку в браузере, потом подключайтесь через rdp", либо "скачайте, распакуйте в одну папку, сперва запускайте это, а потом подключайтесь через rdp".
По мне так для пользователя оба решения кривые и неудобные, как в настройке, так и в использовании. Если же рабочее место настраивает админ, то он же и vpn настроить может с тем же успехом.0HenrY0
29.07.2023 10:27-2Если же рабочее место настраивает админ, то он же и vpn настроить может с тем же успехом.
Большинство админов покинуло страну, поэтому возвращаемся вот к этому.
vvag
29.07.2023 10:27Один cmd, bat, ps1, sh где все это сделано за юзера. И тогда юзеру просто дабл клик
kemper5005 Автор
29.07.2023 10:27допишу и выложу статью, юзер существо пугливое и запускать больше одного ярлыка для него опасно
kemper5005 Автор
29.07.2023 10:27В планах написать статью о юзерских скриптах, начиная с bat файлов ну и Python по итогу к которому я пришел
Busla
29.07.2023 10:27Это элементарно вскрывается массовым сканированием, нужно просто на каждый порт делать несколько попыток. Классический port knocking открывается если клиент стучится только на ключевые порты и только в заданной последовательности.
FruTb
29.07.2023 10:27+1Так вроде тут и задаётся цепочка открывающихся портов для клиента. И левому чуваку который постучится на 2ой порт из цепочки отлуп дадут. Там-же добавляется src адрес в список на доступ к следующему порту.
Или вы про то что цепочка должна сбрасываться при попытке постучать в "неправильный порт последовательности"? Хм, тогда да, интересно как оно там реализовано. Может оно сбрасывает цепочку. Подскажите кто в курсе.
kemper5005 Автор
29.07.2023 10:27интересное предположение, но если вы соблюдаете элементарные правила хорошего тона при настройке сетевого оборудования, то у вас как минимум должен быть черный список IP адресов, в который и попадает ботнет при сканировании портов, статью об этом так же постараюсь написать
0HenrY0
29.07.2023 10:27Все 3 правила необходимо расположить сразу после основных правил блокировок (а я надеюсь, что они у вас есть).
В таком случае они никогда не отработают. Основные правила блокируют все нестандартные и неиспользуемые порты.
haga777
29.07.2023 10:27+3Есть также вариант с использованием пинга и определенным размером пакета.
Ping 1.1.1.1 - l 100 -n 1
Кинуть пакет с размером 128 и количеством 1 раз на целевой адрес.
Пинг идёт с n+28 байт. Если целевое значение 128 ,то пингуем с суммой 100.
solver
При выкладывании настроек для микротика хорошим тоном считается прикладывать не только скриншоты интерфейса, но и команды из консоли производящие эти настройки.
С ними и понятнее что конкретно делается и удобнее для многих.
kemper5005 Автор
Спасибо, полезное замечание, исправлю