Проблема
Если у вас есть VPN-сервер с открытым портом наружу — боты найдут его в течение нескольких минут. Логи будут завалены попытками подбора паролей, нагрузка на роутер вырастет, а риск взлома станет реальным.
Я видел это на десятках объектов: открытый 1194/UDP или 500/UDP — и тысячи попыток в сутки.
Что такое Port Knocking
Port Knocking — механизм скрытия порта. Суть простая:
- Порт закрыт для всех по умолчанию
- Клиент отправляет секретную последовательность запросов на другие порты
- Роутер «узнаёт» последовательность и временно открывает нужный порт для этого IP
- Через 30 секунд — снова закрыт
Для сканеров и ботов порт просто не существует.
Реальный конфиг для MikroTik
Трёхэтапный стук: порты 7000 → 8000 → 9000, после чего открывается VPN на 1194/UDP на 30 секунд.
Создаём address-list для отслеживания
# Первый стук — порт 7000
/ip firewall filter add chain=input protocol=tcp dst-port=7000 \
action=add-src-to-address-list \
address-list=knock_stage1 \
address-list-timeout=10s \
comment="Port Knock - Stage 1"
# Второй стук — порт 8000
/ip firewall filter add chain=input protocol=tcp dst-port=8000 \
src-address-list=knock_stage1 \
action=add-src-to-address-list \
address-list=knock_stage2 \
address-list-timeout=10s \
comment="Port Knock - Stage 2"
# Третий стук — порт 9000
/ip firewall filter add chain=input protocol=tcp dst-port=9000 \
src-address-list=knock_stage2 \
action=add-src-to-address-list \
address-list=knock_allowed \
address-list-timeout=30s \
comment="Port Knock - Stage 3 → Allowed"
Разрешаем VPN для «достучавшихся»
/ip firewall filter add chain=input protocol=udp dst-port=1194 \
src-address-list=knock_allowed \
action=accept \
comment="VPN - Port Knock Allowed"
/ip firewall filter add chain=input protocol=udp dst-port=1194 \
action=drop \
comment="VPN - Block All Others"
Важно: правила должны стоять до общего drop-правила в цепочке input.
Скрипт для клиента (Linux/Mac)
#!/bin/bash
HOST="ваш.ip.адрес"
nmap -Pn --host-timeout 100 --max-retries 0 -p 7000 $HOST
nmap -Pn --host-timeout 100 --max-retries 0 -p 8000 $HOST
nmap -Pn --host-timeout 100 --max-retries 0 -p 9000 $HOST
sleep 1
echo "Готово — подключайтесь к VPN"
Результат
На одном из объектов до внедрения в логах было 400–600 попыток подключения к VPN в сутки. После — ноль. Порт стал невидимым.
Совет: меняйте порты стука на нестандартные. Не используйте 7000/8000/9000 из этой статьи — подберите свои.
Если нужна настройка под ключ — напишите мне.