Спросите у интерфейса управления статус один раз, и он начинает выглядеть как порт статуса. Но это не так. Как только клиент допущен, он может отдавать команды управления протокола, и учётная запись, запускающая этого клиента, наследует всё, что эти команды могут сделать с демоном. Относиться к нему как к потоку только для чтения — это ошибка, превращающая интеграцию мониторинга в консоль без аутентификации.

Убеждение и его цена

Распространённое убеждение: слушатель управления равнозначен конечной точке метрик — подключить сборщик, прочитать счётчики, двигаться дальше. В действительности сборщик открывает сессию с возможностями управления, и любое другое допущение о развёртывании теперь зависит от того, насколько хорошо ведёт себя этот сборщик.

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

Что на самом деле держит допущенный клиент

Демон сообщества принимает только одного активного клиента управления одновременно. Одно место означает, что GUI, скрипт и агент мониторинга не могут подключиться все сразу; второй ждёт или завершается ошибкой, пока первый держит сессию. Если ваш проект рассчитан на одновременных читателей, он уже неверен.

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

Свой сокет, а не открытый

Сокет домена Unix удерживает путь управления вне сети, что убирает из проблемы меняющийся адрес туннеля. Но это не снимает вопрос прав. Родительский каталог должен быть доступен для записи служебной учётной записи и достижим для учётной записи контроллера, и это два отдельных разрешения:

management /run/openvpn/office-management.sock unix /etc/openvpn/management.password
management-client-user vpn-observer
management-client-group vpn-observer

Файл пароля хранит секрет управления в первой строке. Защищайте этот файл как любые другие учётные данные и держите его содержимое вне журналов и заявок в поддержку. Ограничения пользователя и группы — это проверки на другой стороне сокета Unix, а не права файловой системы, поэтому нужному процессу нужны и доступ к файлу, и соответствующая идентичность.

Сделать сокет доступным всему миру, чтобы убрать ошибку прав, — единственное исправление, которого следует избегать. Оно превращает локальный канал управления в то, чем может управлять любой процесс на хосте.

Публикация через TCP — это не тот же проект

Перенос слушателя на TCP-порт не делает его безопаснее или удобнее. Пароль управления передаётся открытым текстом, поэтому TCP-слушатель раскрывает и учётные данные, и сессию любому, кто может наблюдать путь. Доступ к нему с другого хоста требует авторизованного канала администрирования или небольшого локального агента, который показывает только нужные вам наблюдения.

Пароль поверх транспорта с открытым текстом — это аутентификация без конфиденциальности, и такое сочетание хуже, чем кажется, потому что ощущается защищённым.

Зависимости при запуске, которых вы не просили

Несколько параметров управления меняют жизненный цикл демона. Удержание запуска до подключения контроллера или завершение, когда контроллер исчезает, превращает необязательного наблюдателя в жёсткую зависимость. Тогда падающий агент мониторинга утянет за собой и туннель.

Просмотрите эти параметры, прежде чем включать что-либо помимо самого сокета. Необязательное наблюдение должно оставаться необязательным, а политику перезапуска не следует привязывать к сборщику, добавленному ради графиков.

Файл сокета, оставшийся после неудачного процесса, не доказывает, что слушатель существует. Прежде чем удалять его, определите, какой экземпляр владеет путём, и используйте собственный процесс восстановления службы, а не удаляйте файлы под работающим демоном.

Как выглядит приёмка

Проект покрывают четыре проверки: нужная идентичность контроллера подключается, процесс без этой идентичности отклоняется, демон переживает контроллер, который отключается без предупреждения, и туннель по-прежнему передаёт трафик после контролируемого перезапуска. Успешное соединение управления доказывает только плоскость управления. Оно ничего не говорит о том, работает ли трафик частных приложений, поэтому проверьте это отдельно. Запишите четыре результата там, где их найдёт следующий оператор.

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

Похожие статьи