В статье разберём:
- что такое Port Knocking и как он защищает SSH;
- как установить и запустить
knockd
на VPS; - как задать последовательность портов и команду открытия;
- как протестировать доступ и устранить ошибки;
- какие меры безопасности стоит соблюдать при настройке.
Что понадобится
-
VPS с Ubuntu или Debian и доступом по SSH с правами sudo.
-
Установленные утилиты
iptables
илиufw
— они потребуются для фильтрации трафика. -
Пакет
knockd
— демон, который отслеживает обращения к портам и выполняет команды. -
Минимальные знания о сетевых портах, IP-адресах и базовых командах Linux.
Перед началом убедитесь, что на сервере открыт SSH-доступ (порт 22) и установлен фаервол. Если используется UFW, можно проверить его состояние командой:
sudo ufw status
Port Knocking не заменяет фаервол — он работает совместно с ним, добавляя дополнительный слой защиты. Все правила knockd применяются к существующим правилам iptables или UFW.
Как работает Port Knocking
Принцип работы Port Knocking прост: сервер не принимает соединения на порт SSH, пока пользователь не “постучит” по нескольким заранее заданным портам в нужном порядке. При правильной последовательности knockd выполняет команду, которая временно открывает SSH для IP-адреса, с которого поступили пакеты.
Например, вы задаёте последовательность 7000, 8000, 9000. Пока никто не обращался к этим портам в нужном порядке, SSH (22) остаётся закрытым. После правильного “стука” knockd добавляет правило iptables, разрешающее доступ с вашего IP:
/usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Это правило будет действовать до перезагрузки или пока не будет удалено вручную. Так ваш SSH остаётся невидимым для сканеров и ботов, но доступен вам после правильного набора портов.

Совет: если вы используете публичный Wi-Fi, не открывайте SSH с этого IP. Настройте последовательность только для доверенных адресов — это снизит риск компрометации.
Установка и включение knockd
Пакет knockd
доступен в стандартных репозиториях Ubuntu и Debian. Он работает как фоновый демон и отслеживает обращения к определённым портам, указанные в конфигурации.
Устанавливаем knockd
sudo apt update
sudo apt install knockd -y
После установки демон не запускается автоматически — необходимо включить его вручную.
Включаем автозапуск
sudo nano /etc/default/knockd
В открывшемся файле найдите строку:
START_KNOCKD=0
и измените её на:
START_KNOCKD=1
Сохраните изменения, затем активируйте сервис:
sudo systemctl enable knockd
sudo systemctl start knockd
sudo systemctl status knockd
Если сервис запущен корректно, статус будет “active (running)”. Теперь knockd готов принимать запросы и выполнять команды, заданные в конфигурации.

Совет: если VPS использует UFW, убедитесь, что knockd работает до применения правил UFW — это можно указать в systemd unit, чтобы избежать конфликтов при загрузке.
Настройка последовательности портов
Основной файл конфигурации /etc/knockd.conf
содержит секции с последовательностями портов и действиями. Каждая секция описывает отдельный сценарий — например, открытие SSH и его последующее закрытие.
Открываем файл для редактирования
sudo nano /etc/knockd.conf
Пример минимальной конфигурации
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Эта конфигурация открывает SSH для вашего IP после правильного «стука» на порты 7000, 8000, 9000 и закрывает его при обратной последовательности. Параметр seq_timeout
задаёт время (в секундах), в течение которого нужно успеть отправить всю комбинацию.

Совет: выбирайте порты выше 1024 и не используйте стандартные номера, чтобы затруднить подбор. Комбинация должна быть индивидуальной для каждого сервера.
Проверка работы Port Knocking
После настройки knockd
нужно убедиться, что порт SSH действительно скрыт и открывается только после правильной последовательности. Для этого проведём несколько простых тестов.
Закрываем SSH-порт вручную
Сначала полностью блокируем доступ к порту 22, чтобы убедиться, что он закрыт:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
Проверяем доступность SSH
ssh user@server_ip
Соединение не должно установиться. Это нормальное поведение — SSH скрыт.
Отправляем последовательность “стуков”
С локального компьютера используйте утилиту knock
(она есть в Linux и macOS, а также в виде пакета knockd-client
):
knock server_ip 7000 8000 9000
После правильной комбинации knockd добавит правило iptables, разрешающее доступ по SSH для вашего IP. Теперь можно подключиться:
ssh user@server_ip
Проверяем логи
sudo tail -f /var/log/knockd.log
Здесь будут отображаться все попытки “стука” — успешные и неудачные. Если последовательность неверная, запись всё равно появится, но команда не выполнится.

Совет: можно добавить в cron задачу, которая автоматически очищает правила iptables каждые несколько часов, чтобы не оставлять SSH открытым надолго.
Типичные ошибки и безопасные рекомендации
Port Knocking не срабатывает
Если после отправки последовательности SSH остаётся закрытым:
-
Убедитесь, что сервис
knockd
запущен:sudo systemctl status knockd
. -
Проверьте, не блокирует ли UFW входящие соединения на используемые порты “стука”.
-
Проверьте лог
/var/log/knockd.log
— в нём видны все принятые комбинации и ошибки.
Ошибка “Invalid argument” при выполнении команд
Такое сообщение обычно означает, что команда iptables
записана неверно или модуль не загружен. Проверьте синтаксис в /etc/knockd.conf
и попробуйте выполнить команду вручную.
Увеличение seq_timeout
Если не успеваете отправить все “стуки” вовремя, увеличьте таймаут до 15–20 секунд:
seq_timeout = 20
Безопасные рекомендации
-
Используйте уникальные последовательности портов (4–6 чисел), не повторяющиеся на других серверах.
-
Не открывайте SSH с публичных сетей. Port Knocking лучше применять вместе с ограничением по IP.
-
Добавьте двухфакторную аутентификацию (например, Google Authenticator) для дополнительной защиты.
-
Создайте резервную копию конфигурации
/etc/knockd.conf
перед обновлением системы.

Совет: если вы часто подключаетесь к серверу, настройте скрипт или алиас, автоматически выполняющий “стук” перед SSH-входом.
Итоги
-
Разобрали принцип работы технологии Port Knocking и её роль в защите SSH-доступа.
-
Установили и активировали демон
knockd
для обработки последовательностей портов. -
Настроили собственную комбинацию портов для открытия и закрытия SSH-порта на VPS.
-
Проверили работоспособность механизма, просмотрели логи и устранили возможные ошибки.
-
Изучили практические советы по повышению безопасности: увеличение таймаута, выбор нестандартных портов, резервное копирование конфигурации.
Вывод: Port Knocking — это простой, но эффективный способ скрыть SSH-порт от автоматических сканеров и атакующих. Даже если пароль или ключи защищены, скрытие самого порта значительно снижает риск несанкционированного доступа. Технология не требует сложных настроек и совместима с любыми фаерволами, делая её отличным дополнением к стандартным средствам безопасности VPS.
