Пожалуйста, обратите внимание на следующую информацию перед началом использования данной инструкции по настройке технологии "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)

Genaral_hod1
Genaral_hod1

На вкладке Action

В строке Action выбираем add src to address list

В строке Address List вводим название первой группы доступа (в данном случае hod1)

В строке Timeout вводим время в течении которого пользователь должен будет отправить запрос на второй порт (в данном случае 30 секунд)

Жмем ОК

Action_hod1
Action_hod1
Что происходит

Если 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)

General_hod2
General_hod2

На вкладке Action

В строке Action выбираем add src to address list

В строке Address List вводим название второй группы доступа (в данном случае hod2)

В строке Timeout вводим время в течении которого пользователь должен будет отправить запрос на третий порт (в данном случае 30 секунд)

Жмем ОК

Action_hod2
Action_hod2
Что происходит

Если 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 указываем третий порт на который пользователь будет обращаться (в данном случае

)

General_hod_end
General_hod_end

На вкладке Action

В строке Action выбираем add src to address list

В строке Address List вводим название первой группы доступа (в данном случае hod_end)

В строке Timeout вводим время, в течении которого пользователь должен будет подключиться (в данном случае 1 час)

Жмем ОК

Action_hod_end
Action_hod_end
Что происходит

Если 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)

General_NAT
General_NAT

На вкладке Action

В строке Action выбираем dst-nat

В строке To Addresses вводим локальный IP адрес компьютера (в данном случае 192.168.1.10)

В строке To Ports вводим порт, на который подключаемся (в данном случае стандартный RDP 3389)

Жмем ОК

Action_NAT
Action_NAT
Что происходит

Если 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)


  1. solver
    29.07.2023 10:27
    +4

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


    1. kemper5005 Автор
      29.07.2023 10:27

      Спасибо, полезное замечание, исправлю


  1. aik
    29.07.2023 10:27

    Обычно проблема не с серверной стороны безопасность накрутить, а с юзерской заставить эти требования соблюдать.
    Если к впн более-менее юзеров приучили, то вот стучать телнетом в порты перед тем, как через rdp логиниться...


    1. solver
      29.07.2023 10:27
      +1

      Если к впн более-менее юзеров приучили, то вот стучать телнетом в порты перед тем, как через rdp логиниться...

      Это легко автоматизируется же. Скрипт который стукнет в порты определённым образом это изи. Юзер будет запускать свой софт как обычно, ярлычком на экране. Это уже 100500 раз описано. Тема далеко не свежая)


      1. strelkan
        29.07.2023 10:27

        да, и заморочки с телнетом не нужны, можно сделать html с фетчами и стучаться прямо из браузера


      1. aik
        29.07.2023 10:27

        Несвежая, но и не взлетевшая.


        Юзер будет запускать свой софт как обычно, ярлычком на экране. Это уже 100500 раз описано.

        Вот если честно, ни разу не видел "прозрачного" решения.
        Либо "сперва откройте эту страничку в браузере, потом подключайтесь через rdp", либо "скачайте, распакуйте в одну папку, сперва запускайте это, а потом подключайтесь через rdp".
        По мне так для пользователя оба решения кривые и неудобные, как в настройке, так и в использовании. Если же рабочее место настраивает админ, то он же и vpn настроить может с тем же успехом.


        1. 0HenrY0
          29.07.2023 10:27
          -2

          Если же рабочее место настраивает админ, то он же и vpn настроить может с тем же успехом.

          Большинство админов покинуло страну, поэтому возвращаемся вот к этому.


        1. vvag
          29.07.2023 10:27

          Один cmd, bat, ps1, sh где все это сделано за юзера. И тогда юзеру просто дабл клик


          1. kemper5005 Автор
            29.07.2023 10:27

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


    1. kemper5005 Автор
      29.07.2023 10:27

      В планах написать статью о юзерских скриптах, начиная с bat файлов ну и Python по итогу к которому я пришел


  1. Busla
    29.07.2023 10:27

    Это элементарно вскрывается массовым сканированием, нужно просто на каждый порт делать несколько попыток. Классический port knocking открывается если клиент стучится только на ключевые порты и только в заданной последовательности.


    1. FruTb
      29.07.2023 10:27
      +1

      Так вроде тут и задаётся цепочка открывающихся портов для клиента. И левому чуваку который постучится на 2ой порт из цепочки отлуп дадут. Там-же добавляется src адрес в список на доступ к следующему порту.

      Или вы про то что цепочка должна сбрасываться при попытке постучать в "неправильный порт последовательности"? Хм, тогда да, интересно как оно там реализовано. Может оно сбрасывает цепочку. Подскажите кто в курсе.


      1. Busla
        29.07.2023 10:27

        Да, я про сброс цепочки.


    1. kemper5005 Автор
      29.07.2023 10:27

      интересное предположение, но если вы соблюдаете элементарные правила хорошего тона при настройке сетевого оборудования, то у вас как минимум должен быть черный список IP адресов, в который и попадает ботнет при сканировании портов, статью об этом так же постараюсь написать


  1. 0HenrY0
    29.07.2023 10:27

    Все 3 правила необходимо расположить сразу после основных правил блокировок (а я надеюсь, что они у вас есть).

    В таком случае они никогда не отработают. Основные правила блокируют все нестандартные и неиспользуемые порты.


  1. haga777
    29.07.2023 10:27
    +3

    Есть также вариант с использованием пинга и определенным размером пакета.

    Ping 1.1.1.1 - l 100 -n 1

    Кинуть пакет с размером 128 и количеством 1 раз на целевой адрес.

    Пинг идёт с n+28 байт. Если целевое значение 128 ,то пингуем с суммой 100.


    1. kemper5005 Автор
      29.07.2023 10:27

      тоже думал об этом, но руки сделать это еще не дошли))