Single Packet Authorization: port knocking с криптографией

Обложка

Цикл «Не светим лишнего». Выпуск 7.

У классического knocking есть понятная проблема: секретная последовательность летит по сети открытым текстом. Кто увидел — тот может повторить.

Single Packet Authorization, или SPA, решает ту же задачу иначе. Клиент отправляет один специальный пакет, внутри которого находится криптографически защищённый запрос. Шлюз проверяет подлинность и только потом временно меняет firewall.

Что лежит в пакете

Конкретный формат зависит от реализации, но логика обычно включает:

Сервер хранит сведения о недавно принятых пакетах и не принимает тот же запрос повторно. Поэтому просто записать трафик и воспроизвести вечером уже недостаточно.

Из известных open-source реализаций есть fwknop. Он описывает SPA-пакет как зашифрованный, неповторяемый и аутентифицированный HMAC. Скрытый SSH остаётся недоступным для обычного сканирования, пока сервер не принял корректный пакет.

Чем SPA лучше knocking

Здесь нет цепочки, которую можно случайно собрать сканированием портов. Подмена содержимого ломает проверку HMAC. Временная метка и защита от повторов уменьшают риск replay. В запрос можно аккуратно вложить параметры: какой сервис требуется и на какое разумное время.

При этом сам защищаемый сервис всё ещё не выставлен постоянно.

Цена удобства

На клиентской стороне нужна утилита, ключ и конфигурация. Для системного администратора это нормально. Для случайного подрядчика, который пришёл со смартфоном, — уже нет.

Ключи надо выдавать персонально, хранить, отзывать и менять. Если один общий ключ лежит в десяти скриптах, преимущества криптографии быстро заканчиваются.

Ещё один момент: SPA-сервер должен видеть пакет до обычного firewall drop. На Linux это понятная схема с fwknop и поддерживаемым firewall. На RouterOS готовая интеграция не такая прямая; обычно нужен внешний сервис, который проверит пакет и через API обновит MikroTik, либо SPA завершается на Linux-шлюзе.

Плюсы

Минусы

Где можно больно ошибиться

Один ключ для всех. Тогда невозможно понять, кто открыл доступ, и отозвать одного клиента.

Не проверять время и повторы. Подписанный, но бесконечно повторяемый пакет превращается в вечный ключ.

Открывать порт надолго. SPA подтверждает запрос в момент отправки, но не контролирует присутствие пользователя через два часа.

Хранить ключ прямо в публичном скрипте. Автоматизация должна использовать защищённое хранилище и минимальные права.

Считать источник индивидуальным после открытия. Сам SPA-пакет может быть персональным, но обычный последующий трафик firewall снова различает прежде всего по адресу. Общий NAT никуда не делся.

Когда SPA имеет смысл

Это хороший инструмент для администраторов, автоматизации и аварийного доступа, когда установка клиента допустима. Если основное требование — открыть браузер на любом компьютере и ничего не устанавливать, удобнее captive portal или TOTP-портал. К ним и переходим.

Ранее в цикле

Документация и источники

#network