Я думаю все знают что такое port knocking, но на всякий случай напишу. Port knocking - метод внешнего открытия портов путем обращения к маршрутизатору генерируя определенные пакеты на известные открытые порты. Играет роль именно последовательность отосланных пакетов, их размер и порт на который они обращаются. Иными словами, порт является по-умолчанию закрытым, но только до тех пор, пока на него не поступит заранее определённая последовательность пакетов данных, которая "заставит" порт открыться.
После этого вам нужно включить Web Proxy на порт 49049:
Основная цель - предотвратить злоумышленнику сканирование вашего устройства на наличие потенциально пригодных для использования уязвимостей, делая сканирование порта. И только из-за того, что злоумышленник не посылает правильную последовательность - защищенные порты остаются закрыты.
Естественно, в Mikrotik такую возможность реализовать можно, в интернете по этому поводу написано много статей. Например, официальная WiKi приводит в пример эту статью. Они предлагают для доступа на ваш маршрутизатор постучать последовательно по 9000, а потом по 6000 порту для открытия доступа к маршрутизатору. Постучать можно через nmap command, установив knockd package в linux или через браузер. В других статьях описывается открытие портов через протокол icmp, используя ICMP-пакеты (пинг) разных размеров пакета в определенной последовательности. Метод довольно защищенный, но достаточно неудобен. Вообщем, использование Port knocking сводится к настройке, пару-тройку дней тестирования, и отключения, т.к. он требует дополнительных манипуляций до подключения, времени на который, как правило нет. ICMP запросы требуют командной строки или спец-по, простукивания по разным портам - аналогично.
Задача у меня стояла такая - сделать безопасный доступ к роутеру Mikrotik с любой точки планеты, с любого компьютера, смартфона, планшета, с любого интернета, будь то HOTSPOT в аэропорту, или любая другая сеть. Для этого был выбран сервис www-ssl.
Настроены сертификаты, создано шифрованное безопасное соединение, которое прослушать не представляется возможным. Как создавать сертификаты и использовать www-ssl в Mikrotik я расскажу в другой статье.
Так же, создано ряд правил, которые включают доступ к веб-интерфейсу роутера, так как изначально порт 49 у меня закрыт. Это сделано для безопасности.
/ip firewall filter
7 ;;; add_address_list_49049
chain=input action=add-src-to-address-list protocol=tcp
address-list=49049 address-list-timeout=10s dst-port=49049 log=no
log-prefix=""
8 ;;; add_address_list_49
chain=input action=add-src-to-address-list protocol=tcp
src-address-list=49049 address-list=49 address-list-timeout=15m
dst-port=49 log=no log-prefix=""
9 ;;; accept_adr_list_49049
chain=input action=accept protocol=tcp src-address-list=49049 dst-port=49
log=no log-prefix=""
10 ;;; accept_adr_list_49
chain=input action=accept protocol=tcp src-address-list=49 dst-port=49
log=no log-prefix=""
11 ;;; drop_service_www-ssl
chain=input action=reject reject-with=icmp-network-unreachable
protocol=tcp dst-port=49 log=no log-prefix=""
Последовательность правил важна.
- Правило 7: при обращении на порт 49049 (это порт должен быть открыт в Mikrotik) создается адрес-лист с названием 49049 и туда заносится IP стучавшего на этот порт на 10 секунд;
- Правило 8: при обращении IP с адрес-листа 49049 этот адрес заносится в адрес-лист 49 на 15 минут;
- Правило 9: разрешает IP с адрес-листа 49049 обращаться к 49 порту;
- Правило 10: разрешает IP с адрес-листа 49 обращаться к 49 порту;
- Правило 11: запрещает всем IP, которые не в наших адрес-листах обращаться на порт 49.
add action=drop chain=input* будьте с ним осторожны, убедитесь, что у вас перед ним разрешены все нужные вам подключения.
После этого вам нужно включить Web Proxy на порт 49049:
Добавляем запрещающее правило в Web Proxy для всех подключений:
Сбрасываем страницу error.html через нажатие клавиши в Web Proxy Reset HTML:
И модифицируем ее до свои нужды. Эта страница будет отображаться при подключении через браузер на порт 49049 для открытия "основного" 49 порта.
В итоге мы имеем такую схему - находясь в отъезде, если нам нужно зайти на ваш роутер, с любого компьютера или смартфона в браузере набираем в адресной строке наш адрес - http://X.X.X.X:49049/, где X.X.X.X - ваш внешний IP роутера, видим, например, такую страницу (она загрузилась с нашего веб-прокси):
Модифицированная страница error.html. Доступна для скачивания тут. |
Показ этой страницы означает, что Mikrotik "увидел" нас и открыл доступ на 10 секунд к порту 49. В течении этого времени (вы можете поставить свое) мы должны вбить в браузер строку https://X.X.X.X:49/ для доступа в веб-интерфейс роутера:
После того, как мы подключились к веб-интерфейсу правило 8 записало нас в доверенный адрес-лист на 15 минут. Все. 15 минут у нас есть доступ к нашему маршрутизатору с этого IP.
Плюсы данного метода:
- возможно подключение с любого места;
- визуально понятно, что роутер тебя "понял";
- универсальность: подключение с любого устройства (даже чужого), где есть веб-браузер;
- быстрое подключение с защитой порта;
- защищенное соединение ssl.
Минусы:
- используется Web Proxy: если вы его уже используете и вам нужна страница error.html - он вам не подойдет;
- одноэтапная защита - можно добавить еще один этап, и другой порт, но "страницы-оповещателя" уже не будет;
- для параноиков не подойдет.
Что еще нужно помнить:
- сервисы вешаем на нестандартные, свободные по спецификации, порты. Список смотрим тут: Список портов TCP и UDP.
- обычно, сканеры портов работают с первого порта до последнего, т.е. по-порядку, так как у нас используется одноэтапная защита (хоть и с интервалом 10 секунд), то порт "port knocking" должен быть больше (49049) чем тот порт, который он открывает (49), и между ними должно быть значительное расстояние. Тогда вероятность, что при сканере откроется первый, а за ним в течении 10 секунд второй - минимальна.
Комментариев нет:
Отправить комментарий