Технология port knocking позволяет выполнять любые действия на сервере, даже если все порты на нем закрыты. В общем случае, Вам достаточно соедениться с определенными портами, в определенной последовательности, которую знаете только Вы и на сервере выполнятся действия, описанные Вами.
Т.к. в базовом функционале микротика (без использования скриптов) не заложено никакого функционала для работы с port knicking, то будем делать все с помощью стандартного фаервола.
Возьмем базовый случай: после обращения к определенным портам в определенном порядке нам открывается 22 порт для управления микротиком по ssh. Для начала определим необходимую последовательность портов и протоколов, допустим это будет 44 порт udp, 8791 порт tcp, 62014 порт tcp, 28014 порт udp и 12761 udp. При простукивании первого порта ip будет заноситься во временный список адресов, после чего при простукивании следующего порта проверяется наличие в ip в адресном списке прошлого порта и, если он там есть, то ip заносится в следующий список и так для всех портов. Чтобы не плодить огромное кол-во списков нужно ставить время жизни для них в пределах 10-15 секунд.
add chain=input protocol=udp dst-port=44 action=add-src-to-address-list address-list=knoc_stage1 address-list-timeout=10s disabled=no
add chain=input protocol=tcp dst-port=8791 src-address-list=knock_stage1 action=add-src-to-address-list address-list=knock_stage2 disabled=no
add chain=input protocol=tcp dst-port=8791 src-address-list=knock_stage2 action=add-src-to-address-list address-list=knock_stage3 address-list-timeout=10s disabled=no
/ip firewall filter>add chain=input protocol=tcp dst-port=62014 src-address-list=knock_stage3 action=add-src-to-address-list address-list=knoc_stage4 address-list-timeout=10s disabled=no
add chain=input protocol=udp dst-port=28014 src-address-list=knock_stage4 action=add-src-to-address-list address-list=knock_stage5 address-list-timeout=10s disabled=no
add chain=input protocol=udp dst-port=12671 src-address-list=knock_stage5 action=add-src-to-address-list address-list=knock_safe address-list-timeout=15m disabled=no
В последней строке мы добавляем ip в список доверенных на 15 минут (время можно изменить исходя из потребностей).
Дальше следует добавить правило, разрешающее коннект на 22 порт для списка доверенных и запретить доступ для всех остальных.
add chain=input protocol=tcp dst-port=22 src-address-list=knock_safe action=accept disabled=no
add chain=input protocol=tcp dst-port=22 action=reject reject-with=tcp-reset disabled=no
Последним правилом мы сбрасываем все соединения на 22 порт, блокирование с reject-with=tcp-reset позволяет оградиться от стандартного сканирования портов, nmap просто не увидит этот порт, тогда как с action=drop nmap бы показал стат порта filtered.
Теперь, чтобы достучаться до сервера нужно использовать утилиту knock под windows, под linux входит в состав knockd. Для нашего случая запрос на сервер будет выглядеть так:



