0 Голосов
Редактировал(а) Сергей Коршунов 2023/02/08 12:22

Скрыть последних авторов
Сергей Коршунов 1.1 1 Небольшая заметка на тему использования известной технологии для защиты уязвимого сервиса при сохранении удаленного доступа к нему. Речь пойдет о настройке Port knocking в Mikrotik для защиты подключения к Winbox с сохранением доступа откуда угодно. Покажу работу технологии на простом и более сложном примере.
2
3
4 **Содержание**
5
6 Что такое port knocking
7
8 Простая настройка port knocking из одного правила
9
10 Более сложная проверка из трех правил
11
12
13 == Что такое port knocking ==
14
15 **Port knocking** - защитный режим обслуживания сети, действие которого основано на следующем принципе. Сетевой порт является закрытым до тех пор, пока не будут выполнены определенные условия. В данном случае условием является определенная последовательность пакетов данных, направленная на целевое устройство, которое защищается с помощью port knocking.
16
17 В моем примере мы будет защищать порт 8291, который используется в mikrotik для подключения управляющей программы winbox. Для того, чтобы с ее помощью можно было подключиться к устройству, нужно будет отправить определенную последовательность пакетов по протоколу icmp.
18
19 == Простая настройка port knocking из одного правила ==
20
21 Для того, чтобы не погружаться в теорию работы и настройки firewall в mikrotik, я буду считать, что вы настраивали его по моей статье на эту тему. Так как мое текущее повествование на достаточно узкую тему, сфокусируюсь только на ней. Если вы не очень знакомы с описываемым роутером, то читайте мою статью на тему базовой настройки mikrotik.
22
23 Допустим, вы ограничили доступ к порту 8291, который использует winbox для подключения, фиксированным списком ip адресов. Название списка **winbox_remote**. Сейчас я покажу, как сделать так, чтобы в этот список временно попал тот ip адрес, который вам нужен, и который отсутствует в этом списке. Причем доступа к микротику у вас не будет. Тут нам как раз поможет технология **port knocking**.
24
25 Создаем следующее правило в фаерволе микротика.
26
27 {{{add action=add-src-to-address-list address-list=winbox_remote address-list-timeout=30m chain=input comment="icmp port knocking" in-interface=ether2-wan packet-size=144 protocol=icmp}}}
28
29 [[~[~[image:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-01.png~|~|alt="Микротик port knocking" height="323" width="707"~]~]>>url:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-01.png]]
30
31 [[~[~[image:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-03.png~|~|alt="Выбор размера пакета" height="331" width="707"~]~]>>url:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-03.png]]
32
33 [[~[~[image:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-02.png~|~|alt="Добавить автоматически в белый список" height="272" width="707"~]~]>>url:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-02.png]]
34
35 Рассказываю, что мы тут настроили. При пинге с какого-то ip адреса размером пакета 116 байт, на микротик придет пакет размером 144 байта (28 байт заголовок) и адрес отправителя будет добавлен в список winbox_remote на 30 минут. Для проверки работы достаточно выполнить пинг с любого компьютера, примерно вот так:
36
37 {{{ping 1.2.3.4 -l 116 -n 1}}}
38
39 После этого адрес отправителя отправится в указанный список роутера. Там будет создана динамическая запись.
40
41 [[~[~[image:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-04.png~|~|alt="Динамический список ip адресов в микротике" height="224" width="659"~]~]>>url:https://serveradmin.ru/wp-content/uploads/2020/03/mikrotik-port-knocking-04.png]]
42
43 Чтобы правило сработало, оно должно быть правильно расположено в списке правил. Правило с port knocking обязательно должно быть выше правила, разрешающего все icmp пакеты. Если этого не сделать, то первое разрешающее правило обработает все входящие icmp пакеты и до созданного нами в этой статье правила они просто не дойдут.
44
45 == Более сложная проверка из трех правил ==
46
47
48
49 Теперь рассмотрим вариант немного посложнее. В список разрешенных ip адресов можно будет попасть, отправив не менее трех пакетов нужно длины. Для этого создаем 3 правила в firewall.
50
51 {{{add action=add-src-to-address-list address-list=winbox_remote address-list-timeout=30m chain=input comment="icmp port knocking" in-interface=ether2-wan log=yes packet-size=144 protocol=icmp src-address-list=stage2
52 add action=add-src-to-address-list address-list=stage2 address-list-timeout=1m chain=input in-interface=ether2-wan log=yes packet-size=144 protocol=icmp src-address-list=stage1
53 add action=add-src-to-address-list address-list=stage1 address-list-timeout=1m chain=input in-interface=ether2-wan log=yes packet-size=144 protocol=icmp}}}
54
55 Обращаю внимание на порядок правил. Он должен быть именно такой. Первый пакет попадает на третье правило и адрес отправителя записывается в список stage1. Следующий пакет будет иметь адрес отправителя из stage1 (src-address-list=stage1), поэтому его заносим в список stage2. Третий пакет будет иметь адрес отправителя из stage2, поэтому добавляем его в winbox_remote.
56
57 Тут есть один важный нюанс. Чаще всего у вас первым правилом в списке firewall на mikrotik будет разрешение на уже установленные соединения. Примерно такое:
58
59 {{{add action=accept chain=input comment="accept establish & related" connection-state=established,related}}}
60
61 Оно будет захватывать второй и последующие пакеты icmp, поэтому они не попадут на 3 наших правила выше. Чтобы этого избежать, нужно правила с port knocking в mikrotik ставить либо выше этого правила, либо в этом правиле сделать исключение для протокола icmp, примерно так:
62
63 {{{add action=accept chain=input comment="accept establish & related" connection-state=established,related protocol=!icmp}}}
64
65 После этого все должно работать нормально. На время отладки рекомендую включить логирование целевых правил. Так будет проще разобраться в проблемах, если будут возникать.
66
67 Таким способом можно наполнять разные списки и использовать их для доступа к различным сервисам. Как говорится, просто и сердито. Настроить не сложно, обойти такую защиту в очень хлопотно, особенно если время жизни записей в списке оставить 1 минуту. Для подключения к сервису этого вполне хватит, а дальше соединение получит статус established и будет оставаться активным, пока не закроется.