Гид по технологиям

Защита VPN через Port Knocking на DD‑WRT

8 min read Networking Обновлено 29 Nov 2025
Защита VPN через Port Knocking на DD‑WRT
Защита VPN через Port Knocking на DD‑WRT

Быстрые ссылки

  • Предисловие
  • Обзор
  • Требования, допущения и рекомендации
  • Базовое правило «Блокировать новые VPN» на DD‑WRT
  • Что делает «волшебная» команда
  • Конфигурация knockd
  • Советы автора
  • Тестирование и отладка
  • Альтернативы и ограничения
  • Контрольный чеклист администратора

Мы показали, как запускать Wake‑On‑LAN удалённо командой Port Knocking в предыдущей статье. Здесь — как применять тот же приём, чтобы защитить VPN‑сервис от массовых атак и сократить количество нежелательных подключений.

Изображение: Aviad Raviv & bfick.

Предисловие

Если вы используете встроенный VPN DD‑WRT или у вас есть отдельный VPN‑сервер в локальной сети, вы можете скрыть точку входа VPN от сканеров, поместив её «за» последовательностью knock. Это значительно снижает количество автоматизированных попыток взлома. Однако port knocking не заменяет сильный пароль и другие меры безопасности: настойчивый злоумышленник может открыть последовательность (или выполнить повторную атаку — replay), если у него достаточно времени и ресурсов.

Также учитывайте удобство пользователей: для подключения клиентам придётся выполнить последовательность заранее. Если последовательность не выполнена — подключение не установится.

Обзор

Идея простая:

  1. Изначально блокируем входящие новые соединения к порту, который «инициирует» VPN (в нашем примере PPTP использует TCP 1723).
  2. Настраиваем knockd на обнаружение серии «стуков» (последовательности TCP/UDP пакетов к указанным портам) от одного IP‑адреса.
  3. Когда последовательность обнаружена, knockd временно вставляет в iptables правило, разрешающее доступ к VPN‑порту только с этого IP.
  4. Через заданный таймаут правило удаляется; уже установленные VPN‑сессии при этом остаются живыми.

В примере используется PPTP, но тот же подход применим к другим типам VPN: поменяйте номер порта и/или протокол (TCP/UDP) в командах.

Требования, допущения и рекомендации

  • Нужен DD‑WRT с opkg (Opkg‑enabled DD‑WRT) и поддержкой установки knockd.
  • Предполагается, что вы уже применили шаги из руководства «How To Knock Into Your Network (DD‑WRT)» (настройка knockd и базовая проверка).
  • Базовые сетевые знания и понимание iptables обязательны.
  • Рекомендуется: короткие таймауты последовательности и cmd_timeout, ведение логов для событий knock, использование защищённых паролей и MFA для аккаунтов VPN.

Приступим.

Базовое правило «Блокировать новые VPN» на DD‑WRT

Мы добавим правило iptables в скрипт «Firewall» через веб‑интерфейс DD‑WRT, чтобы правило применялось при каждой перезагрузке/обновлении файрвола.

Из Web‑GUI DD‑WRT:

  • Перейдите в “Administration” -> “Commands”. Интерфейс Administration -> Commands в DD‑WRT
  • Вставьте в текстовое поле следующий фрагмент:
inline="$( iptables -L INPUT -n | grep -n "state RELATED,ESTABLISHED"  | awk -F : {'print $1'} )"; inline=$(($inline-2+1)); iptables -I INPUT "$inline" -p tcp --dport 1723 -j DROP
  • Нажмите “Save Firewall”.
  • Готово — по умолчанию новые подключения к порту 1723 будут DROP.

Важно: этот фрагмент ориентирован на расположение правил в конкретной версии DD‑WRT, поэтому тестирование обязательно.

Что делает эта команда

Коротко:

  • Ищет номер строки в выводе iptables -L INPUT, где указано правило, разрешающее уже установленные и связанные соединения (state RELATED,ESTABLISHED).
  • Вычисляет позицию, сразу после этой строки, с учётом смещения из‑за заголовков вывода iptables, и вставляет новое правило именно туда.
  • Добавленное правило делает iptables -I INPUT <позиция> -p tcp –dport 1723 -j DROP — то есть блокирует новые соединения к 1723, но пропускает уже существующие сессии.

Почему так: при вставке правила выше правила, разрешающего ESTABLISHED, вы рискуете разорвать уже живые VPN‑сессии. Поэтому мы вставляем DROP сразу после правила, разрешающего ESTABLISHED.

Конфигурация knockd

На маршрутизаторе (или на сервере с knockd) отредактируйте файл /opt/etc/knockd.conf:

vi /opt/etc/knockd.conf

Добавьте блок (пример для PPTP/TCP 1723):

[enable-VPN]  
sequence = 02,02,02,01,01,01,2010,2010,2010  
seq_timeout = 60  
start_command = iptables -I INPUT 1 -s %IP% -p tcp --dport 1723 -j ACCEPT  
cmd_timeout = 20  
stop_command = iptables -D INPUT -s %IP% -p tcp --dport 1723 -j ACCEPT

Пояснения:

  • seq_timeout = 60 — окно на выполнение всей последовательности (секунды). Чем короче, тем лучше для безопасности.
  • Последовательность: три стука на порт 2, три на порт 1 и три на 2010 — порядок намеренно хитрый, чтобы запутать сканеры.
  • start_command вставляет правило ACCEPT в начало цепочки INPUT для исходного IP (%IP% заменяется knockd автоматом на IP, с которого пришли стуки).
  • cmd_timeout = 20 — через 20 секунд будет выполнена stop_command, удаляющая правило, тем самым закрывая доступ.
  • Уже установленные соединения продолжат работать, так как правило DROP было вставлено ниже ESTABLISHED.

Настройка для OpenVPN (пример, UDP 1194): замените port/protocol и DROP‑правило:

# Пример для OpenVPN (UDP 1194)
start_command = iptables -I INPUT 1 -s %IP% -p udp --dport 1194 -j ACCEPT
stop_command  = iptables -D INPUT -s %IP% -p udp --dport 1194 -j ACCEPT

Если ваш VPN использует отдельный сервер (не на маршрутизаторе), вы можете запустить knockd на нём. Тогда команды будут модифицироваться без учёта DD‑WRT‑специфики.

Советы автора

  • Отладка: если что‑то не работает, сначала проверьте логи knockd и вывод iptables -L -n –line‑numbers. Это даст ясность, где правило вставилось и живёт ли оно.
  • Множественные команды: в start_command/stop_command можно выполнить несколько команд через “;” или вызвать скрипт (рекомендуется). Так вы сможете логировать, отправлять уведомления по e‑mail или вести учёт сессий.
  • Мобильные клиенты: существуют приложения (например, Android knocker), которые отправляют последовательность портов с телефона. Это удобно для мгновенного доступа.
  • Метод применим для любой TCP/UDP‑службы — RDP (3389), SSH (22), HTTP(S) и др. — но учитывайте, что для некоторых сервисов SPA (single‑packet authorization) более надёжен.

Важно: чтобы отправлять e‑mail прямо с роутера, может потребоваться настроить внешние утилиты (ssmtp, sendmail и т. п.) и убедиться в доступности репозиториев пакетов.

Тестирование и отладка

Шаги проверки:

  1. Убедитесь, что при отсутствии «стуков» порт 1723 не отвечает: nc -zv 1723 (ожидается timeout/connection refused).
  2. Сымитируйте последовательность с клиента (используя клиент‑knocker или сценарий через nmap): дождитесь, пока knockd установит правило.
  3. Проверьте iptables: iptables -L INPUT -n –line‑numbers — должно быть правило ACCEPT от вашего IP.
  4. Попробуйте подключиться по VPN. Подключение должно пройти, и при успехе сессия останется живой, даже если stop_command удалит ACCEPT‑правило.
  5. Проверьте удаление правила через время cmd_timeout.

Частые проблемы и решения:

  • NAT и прокси: если клиент находится за NAT, knockd увидит публичный IP шлюза, а не внутренний адрес устройства. В этом случае последовательность нужно выполнять снаружи, или настраивать дополнительную маршрутизацию/проброс.
  • Несовпадение протокола: если вы случайно используете UDP в knock, а правило DROP/ACCEPT ожидает TCP — открытие не сработает.
  • Последовательность короткая/слишком простая: повышайте сложность и длину последовательности, но держите разумный баланс удобства.

Альтернативы и пределы метода

Когда port knocking не подходит:

  • Replay‑атаки и запись последовательности: если последовательность статична и передаётся в открытом виде, злоумышленник может её записать и воспроизвести.
  • Те, кто контролирует трафик между клиентом и роутером (ISP, корпоративный NAT), могут препятствовать отправке специфических портов.
  • Мобильные сети/Carrier NAT иногда мешают корректной работе knock — пакеты могут меняться или отбрасываться.

Альтернативы:

  • SPA (Single Packet Authorization), например fwknop: защищает от записи последовательности, использует криптографию и один зашифрованный пакет.
  • VPN с двухфакторной аутентификацией (пароль + OTP) — общий более надёжный подход.
  • Ограничение доступа по IP‑белому списку (если клиенты имеют стабильные IP).

Контрольный чеклист администратора

Для оперативного развертывания и поддержки:

  • Установлен и работает knockd на маршрутизаторе или VPN‑сервере.
  • Сохранён скрипт в “Save Firewall” DD‑WRT и протестирован при перезагрузке.
  • Настроены короткие seq_timeout и cmd_timeout (рекомендуется 20–60 с).
  • Логи knockd собираются и ротируются (важно для инцидентов).
  • Документирована последовательность и процедура восстановления/отката.
  • Рассмотрены альтернативы SPA и двухфакторная аутентификация.

Критерии приёмки

  • При отсутствии «стуков» порт VPN недоступен извне.
  • После выполнения последовательности, правило ACCEPT появляется только для IP, совершившего стуки.
  • ACCEPT удаляется по таймауту, при этом существующие VPN‑сессии остаются работоспособными.
  • Система корректно восстанавливает правило после перезагрузки маршрутизатора.

Безопасность и приватность

  • Логируйте события knock аккуратно: записи содержат IP‑адреса, которые являются персональными данными в контексте GDPR. Храните логи минимально необходимое время, применяйте псевдонимизацию/удаление, если журналы не нужны для расследований.
  • Port knocking прибавляет слой «безопасности через скрытие», но не шифрование — всегда используйте защищённые VPN‑протоколы и сильные учётные данные.

Короткий глоссарий

  • Knockd: демон, который отслеживает сетевые «стуки» (пакеты на определённых портах) и выполняет команды при совпадении последовательности.
  • Port Knocking: механизм скрытия сервиса, когда доступ открывается только после корректной последовательности запросов к портам.
  • SPA: Single Packet Authorization — современная альтернатива с криптографической защитой.

Примеры конфигураций и сниппеты (шпаргалка)

  • Блокировать новые TCP‑подключения к порту 1723 (ручная вставка):
iptables -I INPUT 5 -p tcp --dport 1723 -j DROP

(где 5 — позиция; лучше автоматизировать как в примере выше)

  • Открыть для конкретного IP (одна команда):
iptables -I INPUT 1 -s 198.51.100.23 -p tcp --dport 1723 -j ACCEPT
  • Удалить правило:
iptables -D INPUT -s 198.51.100.23 -p tcp --dport 1723 -j ACCEPT
  • Пример секции для OpenVPN (UDP 1194) в knockd.conf:
[enable-openvpn]
sequence = 1000,1001,1002
seq_timeout = 30
start_command = /usr/sbin/iptables -I INPUT 1 -s %IP% -p udp --dport 1194 -j ACCEPT
cmd_timeout = 60
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 1194 -j ACCEPT

Когда это сработает плохо — галерея краёвых случаев

  • Клиент в мобильной сети с изменяющимся публичным IP: правило может открыться для другого устройства оператора.
  • Отключение knockd или неправильная запись firewall скрипта: сервис станет недоступен даже для легитимных клиентов.
  • Атаки replay: при отсутствии криптографической защиты последовательности, её можно переиграть.

План действий при инциденте (быстрая инструкция)

  1. Если замечены подозрительные «стуки» — немедленно увеличьте логирование и проверьте, какие IP инициировали открытие.
  2. При подозрении на компрометацию VPN‑учётной записи — сбросьте пароли и откатите сессии (удалите соответствующие правилa в iptables и перезапустите службу VPN).
  3. Если правило DROP было удалено/повреждено — восстановите firewall‑скрипт и перезапустите файрвол.

Итог

Port knocking на DD‑WRT позволяет скрыть VPN‑порт и уменьшить объём автоматизированных атак, оставляя уже установленные сессии нетронутыми. Это эффективный инструмент в арсенале администратора, но не единственная и не окончательная мера безопасности: комбинируйте его с сильной аутентификацией, шифрованием и, при возможности, SPA.


Кто потревожил мой сон?

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Клонирование USB в Windows 10 — как создать и записать образ
Инструкции

Клонирование USB в Windows 10 — как создать и записать образ

AirPlay на Mac: приём и трансляция
macOS

AirPlay на Mac: приём и трансляция

Установка и удаление Google Chrome — полное руководство
Браузеры

Установка и удаление Google Chrome — полное руководство

Экранная блокировка Nintendo Switch: включение и советы
Консоли

Экранная блокировка Nintendo Switch: включение и советы

Сумма в Excel: быстрые способы и подсказки
Excel

Сумма в Excel: быстрые способы и подсказки

Как распечатать лист Excel на одной странице
Office

Как распечатать лист Excel на одной странице