Настройка MikroTik “Port knocking” или “Постукивание в порт”

Автор Itworkroom

Настройка MikroTik “Port knocking” или “Постукивание в порт”

Сетевая технология “Port knocking”

Сетевая технологияPort knocking или “Постукивание в порт” используется для повышения защищенности сетевого устройства. При использовании Port knocking доступ к устройству из интернета по всем портам по умолчанию закрыт, и открывается тогда, когда это необходимо сетевому администратору. Также повышается защищенность сетевого устройства, благодаря использованию черного списока IP-адресов, с которых “постучались” не корректно, или попали на один из портов-ловушек”, которые при сканировании отображаются как открытые.

При работе сетевой технологииPort knocking”, новые соединения из интернета с MikroTik (или Port-knockingустройством не устанавливаются). При попытке установить соединение на любой порт, имееется возможность отследить: с какого IP-адреса (IP источника) была произведена попытка установить соединение, и на какой порт (порт назначения) была произведена попытка установить сетевое соединение.  Если “порт назначения” был верный, то добавляем “IP источника” в белый список. Если “порт назначения” соответствует “порту-ловушке”, то добавляем “IP источника” в черный список. Адреса в списки попадают на ограниченное время. Вследствии этого доступ к открытым портам MikroTik разрешается только с IP-адреса, который правильно “постучался”.

Данной технологией можно открывать доступ не только к MikroTik, но и к проброшенным портам (например к внутреннему веб серверу)

mikrotik

Настройка “Port knocking” в MikroTik

Алгоритм правил и логика построения правил для файервола у MikroTik — «запрещается всё, что не было разрешено ранее» и правила выполняются с ID от меньшего к большему, пока для какого-то конкретного пакета не отработает какое-то правило. Т.е. если сетевой пакет пройдёт все правила и MikroTik не найдёт соответствия, то он будет отброшен последним правилом, которое блокирует всё.
0. Разрешаем прохождение ICMP до роутера:
[adm@MK] /ip firewall filter> add chain=input action=accept protocol=icmp log=no
1. Разрешаем любой доступ к роутеру из локальной сети:
[adm@MK] /ip firewall filter> add chain=input action=accept in-interface=ether2 log=no
2. Разрешаем прохождение пакетов через UDP-порт 500 (который использует протокол IKE) только если ip-адрес источника находится в списке «white_list_ipsec»:
[adm@MK] /ip firewall filter> add chain=input action=accept protocol=udp src-address-list=white_list_ipsec in-interface=ether1 dst-port=500 log=no
3. Разрешаем прохождение пакетов через UDP-порт 4500 (который использует протокол IPsec) только если ip-адрес источника находится в списке «white_list_ipsec»:
[adm@MK] /ip firewall filter> add chain=input action=accept protocol=udp src-address-list=white_list_ipsec in-interface=ether1 dst-port=4500 log=no
4. Разрешаем прохождение пакетов через UDP-порт 1701 (который использует протокол L2TP) только если ip-адрес источника находится в списке «white_list_ipsec»:
[adm@MK] /ip firewall filter> add chain=input action=accept protocol=udp src-address-list=white_list_ipsec in-interface=ether1 dst-port=1701 log=no
5. Если входящий пакет приходит на порт 789 и ip-адрес его источника уже есть в списке «456_knock_1», то данный ip-адрес добавляется в список «white_list_ipsec» на 2 часа:
[adm@MK] /ip firewall filter> add chain=input action=add-src-to-address-list protocol=tcp src-address-list=456_knock_1 address-list=white_list_ipsec address-list-timeout=2h in-interface=ether1 dst-port=789 log=yes log-prefix=»ADD-WLIST-IPSEC:»
6. Если входящий пакет приходит на порт 456 и ip-адрес его источника уже есть в списке «123_knock_1», то данный ip-адрес добавляется в список «456_knock_1» на 2 секунды:
[adm@MK] /ip firewall filter> add chain=input action=add-src-to-address-list protocol=tcp src-address-list=123_knock_1 address-list=456_knock_1 address-list-timeout=2s in-interface=ether1 dst-port=456 log=no
7. Если входящий пакет приходит на порт 123 то ip-адрес его источника добавляется в список «123_knock_1» на 2 секунды:
[adm@MK] /ip firewall filter> add chain=input action=add-src-to-address-list protocol=tcp address-list=123_knock_1 address-list-timeout=2s in-interface=ether1 dst-port=123 log=no
8. Запрещаем всю остальную активность, которая не была разрешена ранее:
[adm@MK] /ip firewall filter> add chain=input action=drop in-interface=ether1 log=no
Проверить работоспособность механизма достаточно просто. Нужно «постучаться» любым кнокинг-клиентом и посмотреть содержимое address-list. Там должны быть отображены все этапы кнокинга:
[adm@MK] /ip firewall address-list> print
Flags: X — disabled, D — dynamic
#     LIST                       ADDRESS                       CREATION-TIME        TIMEOUT
0 D 123_knock_1         XXX.XXX.XXX.3               jan/03/2020 23:00:49  2s
1 D 456_knock_1         XXX.XXX.XXX.3               jan/03/2020 23:00:49  2s
2 D white_list_acc        XXX.XXX.XXX.3               jan/03/2020 23:00:49  2h
Клиенты:
Можно обойтись и без клиентов. Просто написать скрипт, который пингует нужный нам узел с определёнными условиями, или использует сканер портов «nmap». К примеру, для нашего случая можно создать скрипт примерно следующего содержания:
nmap -sT -p 123 XXX.XXX.XXX.1
nmap -sT -p 456 XXX.XXX.XXX.1
nmap -sT -p 789 XXX.XXX.XXX.1
можно воспользоваться готовыми приложениями. Вот несколько примеров:
*.nix – knock (из того же пакета, что и демон knockd).
Android – Port Knocker.
IOS – PortKnock или PortKnock Lite.
Windows — Port Knock.
В PuTTY русской сборки, начиная с версии 0.63-RU-15, тоже имеется возможность Port knocking в настройках подключения – это очень удобно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *