EN EN

Case Study: Настраиваем Port Knocking на MikroTik для усиленной безопасности

Опубликовано 16.07.2025

В мире, где кибератаки становятся всё изощрённее, защита удалённого доступа к серверам и сетевому оборудованию приобретает первостепенное значение. Стандартное открытие портов для SSH, RDP или Web-интерфейсов делает их мишенью для постоянных сканирований и брутфорса.

Сегодня мы рассмотрим мощную, но малоизвестную технику, которая значительно повышает безопасность вашего MikroTik (и не только): Port Knocking. Это не просто “закрытие портов”, а умная система, которая делает ваши сервисы невидимыми для большинства сканеров и ботов.


Что такое Port Knocking?

Port Knocking — это метод аутентификации, при котором удалённый пользователь должен “постучать” в заранее определённую последовательность закрытых портов (например, 1234 → 5678 → 9012) в нужном порядке. Только после этого ему будет открыт доступ к нужному сервису (например, SSH на 22 порту).

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


Зачем нужен Port Knocking?

  • 🔒 Невидимость сервисов — SSH, Winbox, Web-интерфейсы не будут видны при обычном сканировании.
  • 🛡 Защита от брутфорса и сканеров — большинство ботов даже не узнают, что порты существуют.
  • 🔑 Дополнительный уровень аутентификации — “секретная последовательность” нужна даже при знании пароля.
  • 🌐 Упрощённая альтернатива VPN — не заменяет VPN, но может заменить его в точечных случаях доступа.

Настройка Port Knocking на MikroTik (RouterOS)

Цель: открыть доступ к SSH (22) и Winbox (8291) только после последовательного обращения к портам 1234 → 5678 → 9012.

После правильного “стука” IP-адрес отправителя попадает в список, и нужные порты открываются на 60 секунд.


1. Подготовка

Убедитесь, что у вас есть доступ к MikroTik:

  • через Winbox (по MAC-адресу),
  • или по локальной консоли (например, через serial или внутри локальной сети).

2. Настройка Firewall: списки адресов

Создадим списки для отслеживания “стуков”:

/ip firewall address-list
add list=knock_1 address=0.0.0.0/32 disabled=yes comment="Init list for knock 1"
add list=knock_2 address=0.0.0.0/32 disabled=yes comment="Init list for knock 2"
add list=knock_open_port address=0.0.0.0/32 disabled=yes comment="Knock success list"

❗ Это фиктивные записи, чтобы списки “существовали” — MikroTik не применит правила к несуществующему списку.


3. Правила Port Knocking

/ip firewall filter

# Шаг 1: Первый стук
add chain=input protocol=tcp dst-port=1234 action=add-src-to-address-list \
    address-list=knock_1 address-list-timeout=5s comment="Knock 1"

# Шаг 2: Второй стук, если был первый
add chain=input protocol=tcp dst-port=5678 src-address-list=knock_1 \
    action=add-src-to-address-list address-list=knock_2 address-list-timeout=5s comment="Knock 2"

# Шаг 3: Третий стук, если был второй — открываем доступ
add chain=input protocol=tcp dst-port=9012 src-address-list=knock_2 \
    action=add-src-to-address-list address-list=knock_open_port address-list-timeout=1m comment="Knock 3 (grant access)"

# Drop всех попыток доступа к knock-портам
add chain=input protocol=tcp dst-port=1234,5678,9012 action=drop comment="Drop knock ports"

4. Открытие SSH и Winbox

# Разрешаем доступ, если IP в списке knock_open_port
add chain=input protocol=tcp dst-port=22,8291 src-address-list=knock_open_port action=accept comment="Allow knocked IPs"

# Блокируем доступ для всех остальных
add chain=input protocol=tcp dst-port=22,8291 action=drop comment="Block SSH/Winbox for others"

# (Опционально) Общий drop в конце input-цепочки
# add chain=input action=drop comment="Drop all other input"

🔥 Важно: порядок правил критичен — разрешающие и knock-правила должны идти выше, чем общее drop.


5. Как “стучать”?

💻 С помощью netcat:

# Knock 1
nc -nvz ВАШ_IP_MIKROTIK 1234 -w 1

# Knock 2
nc -nvz ВАШ_IP_MIKROTIK 5678 -w 1

# Knock 3
nc -nvz ВАШ_IP_MIKROTIK 9012 -w 1

-z: только SYN, без установления TCP-сессии -w 1: быстрый таймаут для ускорения стука ВАШ_IP_MIKROTIK: публичный IP-адрес MikroTik

🧪 Альтернатива для macOS (если nc не работает корректно):

nmap -Pn -p 1234,5678,9012 ВАШ_IP_MIKROTIK --data-length 0

6. Тестирование

  1. Убедитесь, что SSH и Winbox заблокированы по умолчанию.
  2. Попробуйте подключиться — будет отказ.
  3. Выполните последовательность “стуков”.
  4. Попробуйте подключиться снова — доступ будет разрешён на 60 секунд.
  5. После истечения тайм-аута снова будет отказ.

Проверить список можно:

/ip firewall address-list print

Рекомендации и Best Practices

  • TCP SYN — MikroTik добавляет IP в список по SYN-пакету, не по полной сессии.
  • Не используйте очевидные последовательности: 1, 2, 3 или 2222 → 3333 → 4444.
  • Повышайте энтропию: используйте 4-5 шагов и смешанные TCP/UDP.
  • Защитите клиента — не храните последовательность в явном виде.
  • Автоматизируйте “стук” — с помощью bash-скрипта или alias.
  • Комбинируйте с другими мерами: GeoIP, fail2ban, VPN, ограничение IP.

Ограничения Port Knocking

Port Knocking — не панацея, а дополнение:

  • 🔸 Не защищает от 0-day в SSH/Winbox
  • 🔸 Не предотвращает MITM (если нет TLS/проверки ключей)
  • 🔸 Не помогает при DDoS (адреса всё равно известны)
  • 🔸 Неудобно в условиях NAT или нестабильных сетей
  • 🔸 Ошибки в тайминге = фрустрация пользователей

Вывод

Port Knocking на MikroTik — это элегантный способ скрыть сервисы и усложнить атаку, не прибегая к сложным VPN или внешним системам авторизации.

Он не заменяет базовую безопасность, но делает вас менее заметной целью и повышает общую стойкость системы.

Используйте с умом, комбинируйте с другими практиками — и вы на голову выше большинства админов.

Похожие посты

Свяжитесь со мной

Обсудим ваш проект и найдём подходящее решение