Статья по заявкам. Ранее я писал о Port Knocking на стороне клиента, как правильно делать «простукивание» портов через скрипт PowerShell. Сегодня я расскажу о реализации на стороне сервера — или, в нашем случае, на маршрутизаторе Mikrotik. В примере ниже я предлагаю обставить реализацию из 3-х шагов, однако вы можете как сократить количество шагов (но лучше не надо), так и нарастить до тех пределов, что еще можно назвать разумными.
Открываем WinBox, подключаемся к Mikrotik. Идём в раздел «IP» и открываем «Firewall», после чего создаём новое правило:
General
Chain: input
Protocol: 6 (tcp)
Dst. Port: 51753
In. Interface: ether1-isp
Action
Action: add src to address list
Address List: Stage1
Timeout: 00:00:45
Правило работает таким образом: при попытке установить TCP соединение с роутером на 51753 порту, адрес хоста-клиента будет помещен в список Stage1 на 45 секунд. В пределах этого времени нужно успеть «постучать» на следующий порт:
General
Chain: input
Src. Address List: Stage1
Protocol: 6 (tcp)
Dst. Port: 8290
In. Interface: ether1-isp
Action
Action: add src to address list
Address List: Stage2
Timeout: 00:00:30
Второе правило почти такое же, как и первое, но в нём добавился новый пункт — «стучаться» на порт может только тот хост, чей адрес уже присутствует в списке Stage1. Последнее правило будет выглядеть так:
General
Chain: input
Src. Address List: Stage2
Protocol: 6 (tcp)
Dst. Port: 37061
In. Interface: ether1-isp
Action
Action: add src to address list
Address List: StageEnd
Timeout: 09:00:00
На этом этапе адрес хоста помещается в список StageEnd сроком на 9 часов. Теперь вы можете, например, модифицировать разрешающее правило для подключения к роутеру через Winbox из WAN таким образом, что подключение будет разрешено только хосту, чей адрес есть в списке StageEnd. А еще на всех этапах кроме самого первого можно использовать порты с ловушками HoneyPot (главное — расположите правила правильно относительно друг друга и модифицируйте условия HoneyPot таким образом, чтобы в блокировку не отправлялись хосты из Stage-списков).

Теперь поговорим о безопасности, вернее, о её отсутствии. Бывает так, что клиент находится за NAT провайдера или за прокси. Или за VPN сервером. Очевидно, что доступ будет открыт всем пользователям, что находятся с вами на одном IP адресе — а это, мягко говоря, не очень хорошо. Едем дальше, кто на какие порты стучится — секретом не является, при перехвате и анализе трафика вычислить правильную последовательность портов для «стука» будет не очень сложно. Более того, чем чаще этот механизм будет использоваться, тем заметнее будет паттерн. Можно, конечно, сгладить ситуацию — использовать HoneyPot, создать несколько альтернативных вариантов правил с другими портами, «разбавить» TCP другими протоколами (например, ICMP). Сама технология, безусловно, имеет право на жизнь, но используйте её лишь при необходимости, проявляя необходимую осмотрительность.
