Ваши темы для Вебинаров

В Москве:

РФ (звонок бесплатный):

+7 (495) 103-99-88 +7 (800) 600-20-56

Port Knocking в Mikrotik Firewall Filter

4906


Эта схема может применятся в ситуации, когда у администратора нет статического IP адреса, но его как-то надо опознать для предоставления сервисов маршрутизатора.

Port Knocking
Port knocking — это неявная форма разрешения доступа к некоему сервису, при условии прохождения предварительно заданной последовательности соединений с различными портами целевого сервера.

Port Knocking

Идея Port Knocking заключается в том, что системный администратор для доступа к маршрутизатору выполняет предварительно заданную последовательность действий, которая будет дополнительно идентифицировать технического специалиста, и добавлять его IP адрес в разрешающие правила, для получения доступа к маршрутизатору.

Port Knocking используется для идентификации администратора без статического IP адреса для предоставления расширенных сервисов маршрутизатора.
Это может быть осуществлено с помощью “простукивания” по разным портам TCP или UDP, или же можно использовать пакеты ICMP сообщений различного размера.

К примеру, сначала технический специалист отсылает пакет TCP на порт 333, потом на порт 777, затем на порт 6666, и это происходит в течении короткого отрезка времени, после чего маршрутизатор определяет, что именно в такой последовательности за указанный промежуток времени может постучаться только системный администратор и дает доступ непосредственно к ранее назначенным службам.

Попробуем повторить это на маршрутизаторе MikroTik, вот на таком примере.

Для начала сделаем правило, которое будет запрещать доступ непосредственно к маршрутизатору по протоколу SSH, это цепочка Input, протокол TCP, порт 22 и Action – drop.

IP/Firewall/Firewall Rules/New Firewall Rule

IP/Firewall/Firewall Rules/New Firewall Rule

Вот так будет выглядеть команда cli на маршрутизаторе

/ip firewall filter add action=drop chain=input dst-port=22 protocol=tcp src-address-list=!knock

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

Далее

IP/Firewall/Firewall Rules

Так же добавляем src. Address list из которого адрес будет разрешен, назовем его к примеру — knock.

IP/Firewall/Firewall Rules/New Firewall Rule

Не забудьте установить обратное действие.

IP/Firewall/Address Lists

Проверим, что доступ по SSH к маршрутизатору закрыт этим правилом.

С удаленной консоли водим команду:

ssh 192.168.88.1

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

Давайте определим правила и последовательности действий, соблюдение которых предоставит нам доступ к маршрутизатору.

Внимание, мы организовываем Port Knocking на самом маршрутизаторе, и это всегда цепочка Input, протокол TCP, порт 333, action — add src to address list вписав дополнительный Address List – knock1, и определив временной промежуток в 180 сек.

IP/Firewall/Firewall Rules/New Firewall Rule

IP/Firewall/Firewall Rules/Firewall Rule

команда cli

/ip firewall filter add action=add-src-to-address-list address-list=knock1 address-list-timeout=3m chain=input dst-port=333 protocol=tcp

Тем самым мы получим, что IP адрес источника при отправке запроса на порт 333 по протоколу TCP, будет добавлен на 3 минуты в наш назначенный Address List – knock1.
Проверим работу правила, командой:

telnet 192.168.88.1 333

мы получим Connection refused, так как на данных портах нет и не должно быть сервисов, но несмотря на это, наш IP адрес должен попасть в Address Lists – knock1 (с флагом Dynamic и обратным отсчетом времени)

IP/Firewall/Address Lists

Добавим следующее правило.
Все так же цепочка Input, протокол TCP, порт 777, дополнительное условие наш адрес уже должен находить в Address Lists – knock1 и как action — add src to address list, адрес источника добавляется в адрес лист – knock2, на 3 минуты.

IP/Firewall/Firewall Rules/Firewall Rule

IP/Firewall/Firewall Rules/Firewall Rule

Команда cli на маршрутизаторе

/ip firewall filter add action=add-src-to-address-list address-list=knock2 address-list-timeout=3m chain=input dst-port=777 protocol=tcp

Не забудьте поднимать правила, следом за предыдущими.

IP/Firewall/Firewall Rules

Проверим работу правила, командой:

telnet 192.168.88.1 777

Наш IP адрес должен попасть в Address Lists – knock2.

Третье правило, так же в цепочке input протокол TCP порт 6666, вновь дополнительное условие наш адрес уже должен находить в Address Lists – knock2 и как action — add src to address list адрес источника добавляется в Address Lists – knock, можем так же ограничить на 3 минуты.

IP/Firewall/Firewall Rules/Firewall Rule

IP/Firewall/Firewall Rules/Firewall Rule

Команда cli

/ip firewall filter add action=add-src-to-address-list address-list=knock address-list-timeout=3m chain=input dst-port=6666 protocol=tcp

Проверим работу правила, командой:

telnet 192.168.88.1 6666

чтобы наш адрес источника попал в Address Lists – knock, и мы получили разрешение на доступ по первому правилу на время до 3 минут.

IP/Firewall/Address Lists

Посмотрим, что получилось:

ssh 192.168.88.1

получаем полноценный доступ к ssh.

На самом деле 3 минуты, это время для первого подключения, далее наше соединение перейдет в состояние established и related, и может длиться гораздо дольше. Но для новой сессии, потребуется повторить действия с самого начала и в точно той же последовательности.

Эту последовательность действий можно оформить в скрипт для упрощения использования.

Последовательность действий можно делать не только с портами, но и с размерами пакетов.

Есть и нюансы относительно действий по размерам пакетов ICMP, такого рода правила надо размещать выше правил established, так как иначе соединения будет идентифицироваться как established и наши IP адреса источника не будут попадать в необходимые Address Lists.

Еще одним из важных моментов при создании Port Knocking это разный размер пакетов (к примеру ICMP), в разных ОС, как пример устанавливая Packet Size 77 на Mikrotik, пакет из ОС Windows или Linux следует указать размером в 49 байт, так как OS добавит свои 28 байт.

49 +28 = 77, наших байт

Но существуют готовые приложения, которые позволяют не писать скрипт, а сделать последовательность действий одной командой, к примеру приложение knock.

Некоторые системные администраторы используют Port Knocking не только в реализации доступа к SSH и Winbox, но и для доступа к каким-нибудь корпоративным ресурсам, когда нет возможности использовать VPN, допустим доступ к RDP после того, как была произведена последовательность действий. Соответственно Port Knocking можно использовать в любых правилах в том числе для доступа к прочим дополнительным ресурсам, которые в обычном режиме нигде не анонсируются.

Помните, идентификация производится именно по IP адресу, и неправильное понимание этого, может открыть доступ не только вам, но и всему отелю, где вы оказались в вашей деловой поездке, пусть даже на те же 3 минуты.


  • MTCRE

    13 - 16 мая 10.00 - 18.00
  • MTCSE

    20 - 23 мая 10.00 - 18.00
  • MTCNA

    17 - 20 июня 10.00 - 18.00
  • MTCNA

    24 - 27 июня 10.00 - 18.00
  • MTCNA

    09 - 12 июля 10.00 - 18.00
  • MTCNA

    15 - 18 июля 10.00 - 18.00
  • MTCRE

    05 - 08 августа 10.00 - 18.00
  • MTCWE

    16 - 19 сентября 10.00 - 18.00

Курсы Mikrotik-Training.

Знания, которые дают результат.