Для того, чтобы все данные между браузером и сервером, на котором установлен MeshCentral, передавались в зашифрованном виде и не могли быть перехвачены третьими лицами, необходимо настроить доступ к веб-интерфейсу MeshCentral с использованием протокола HTTPS. При подключении к MeshCentral через него проходит большое количество довольно чувствительной информации − логины, пароли, токены, команды управления компьютерами и даже удалённые сессии. Без HTTPS всё это передаётся в открытом виде, что очень небезопасно. Некоторые функции в MeshCentral, такие как автоматическое обновление клиентов и использование WebRTC для удалённого управления, могут работать только при наличии защищённого соединения. Если на веб-сайте MeshCentral не настроен HTTPS, браузер может просто отказаться открывать его. Либо покажет предупреждение о небезопасном подключении, особенно если включён HSTS.
Дефолтным менеджером HTTPS-сертификатов в MeshCentral является Let’s Encrypt. С его использованием MeshCentral может получать и продлевать SSL-сертификаты.
В настоящей статье разберём, как настроить HTTPS-доступ к веб-сайту MeshCentral.
Предварительная настройка
Настройка доступа по протоколу HTTPS к сайту MeshCentral возможна при соблюдении некоторых условий.
Настройка доменного имени для сайта MeshCentral
Во-первых, к виртуальному серверу должно быть привязано имя домена, при помощи которого будет открываться веб-сайт. Такая привязка осуществляется с использованием специальной DNS-записи, а именно A-записи. На сайте RUVDS данная возможность реализована в разделе Домены, где можно добавить домен и привязать его к уже существующему серверу.

В определённых случаях осуществить связывание доменного имени с конкретным IP-адресом можно на сайте регистратора домена. Проверить соответствие имени домена и IP-адреса вы можете, запустив ICMP-запросы в адрес конкретного доменного имени при помощи команды ping:
ping your-site-name.ruПредварительная настройка системы
Во-вторых, необходимо открыть доступ к виртуальной машине для TCP-порта 80. 80-й порт используется при получении SSL-сертификата от Let’s Encrypt для прохождения HTTP-валидации домена. MeshCentral временно запускает HTTP-сервер на порту 80. Это необходимо для того, чтобы Let’s Encrypt мог подключиться и запросить специальный файл. Таким образом происходит подтверждение того, что вы действительно контролируете данный домен.
Чтобы открыть доступ к порту 80, добавьте в брандмауэр UFW соответствующее разрешающее правило:
$ sudo ufw allow 80В Linux-системах такие порты, как 80 и 443, по умолчанию доступны только суперпользователю. Это сделано для того, чтобы предотвратить возможное злоупотребление, например, запуск фальшивых сервисов. Но в случае с MeshCentral это ограничение мешает запуску HTTPS и HTTP на стандартных портах. Вместо того чтобы запускать весь сервер с root-доступом, что не является безопасной практикой,  необходимо точечно дать Node.js право слушать нужные порты. Такой подход − это компромисс между безопасностью и функциональностью. Вместо запуска всего процесса с полными правами нужно добавить строго необходимое исключение. Следующая команда даёт исполняемому файлу Node.js специальное разрешение на использование привилегированных портов, таких как 80 и 443, без необходимости запускать его от имени учётной записи root:
$ sudo setcap 'cap_net_bind_service=+ep' $(which node)Кроме того, чтобы MeshCentral сам смог получить и в дальнейшем продлить HTTPS-сертификат от Let’s Encrypt без вмешательства администратора, необходимо установить в систему библиотеку acme-client. Данная библиотека позволяет выполнять ACME-запросы, получая автоматическую настройку протокола HTTPS для конкретного домена. MeshCentral для работы с Let’s Encrypt требует наличие библиотеки acme-client именно версии 4.2.5. Данная версия является проверенной и совместимой с текущей реализацией кода внутри MeshCentral. Исходя из чего, перейдите в каталог, в котором установлен MeshCentral, и при помощи Node Package Manager проинсталлируйте библиотеку acme-client версии 4.2.5:
$ cd /opt/meshcentral
$ sudo npm install --no-audit --no-optional --omit=optional acme-client@4.2.5Как настроить HTTPS-доступ к MeshCentral
Для настройки HTTPS-доступа к веб-интерфейсу MeshCentral необходимо отредактировать его конфигурационный файл:
$ sudo nano /opt/meshcentral/meshcentral-data/config.jsonВ файле конфигурации активируйте, удалив перед их названиями знак подчёркивания (_), добавьте и приведите в соответствие параметры, выделенные в тексте ниже:
  "settings": {
    "cert": "your-site-name.ru",
    "WANonly": true,
    "_LANonly": true,
    "sessionKey": "MyReallySecretPassword1",
    "port": 443,
    "_aliasPort": 443,
    "redirPort": 80,
    "_redirAliasPort": 80,
    "redirToHttps": true
  },
  "domains": {
    "": {
      "_title": "MyServer",
      "_title2": "Servername",
      "_minify": true,
      "_newAccounts": true,
      "_userNameIsEmail": true
    }
  },
  "letsencrypt": {
    "__comment__": "Requires NodeJS 8.x or better, Go to https://letsdebug.net/ first before trying Let's Encrypt.",
    "email": "admin@your-site-name.ru",
    "names": "your-site-name.ru",
    "skipChallengeVerification": false,
    "production": true
  }В частности:
- "cert"− имя домена, для которого будет запрашиваться сертификат Let’s Encrypt;
- "WANonly"− запускает MeshCentral в режиме “только для доступа из интернета”, что отключает специфические LAN-функции, такие как обнаружение устройств в локальной сети;
- "sessionKey"− ключ для подписи и шифрования пользовательских сессий, используемый для генерации токенов доступа и защиты от подделки сессий;
- "port"− указывает порт, через который будет работать веб-сайт MeshCentral, в нашем случае это 443;
- "redirPort"− указывает на порт, на котором запускается HTTP-сервер с последующим перенаправлением на порт 443;
- "redirToHttps"− включает автоматическое перенаправление всех HTTP-запросов на HTTPS;
- "letsencrypt"− название секции, отвечающей за взаимодействие с Let’s Encrypt;
- "email"− адрес электронной почты, которую Let’s Encrypt будет использовать для уведомлений о сертификатах;
- "names"− доменное имя, для которого будет получен сертификат;
- "skipChallengeVerification"− значение- falseуказывает на то, что Let’s Encrypt должен проверить домен через HTTP-валидацию перед тем, как выдать сертификат;
- "production"− значение- trueуказывает на то, что сертификат будет запрошен у боевого сервера Let’s Encrypt, а не будет использоваться в качестве теста.
Значение параметра "sessionKey" представляет собой секретный ключ, который используется для шифрования и подписи пользовательских сессий. От данного параметра зависит безопасность всех сессий. Он должен быть случайным, секретным и стабильным в рамках одной установки MeshCentral. Сгенерировать значение параметра "sessionKey" можно при помощи команды:
$ openssl rand -base64 32По завершении редактирования закройте файл с сохранением внесённых изменений.
После чего перезапустите сервис MeshCentral:
$ sudo systemctl restart meshcentralИ наконец, откройте браузер и перейдите на https://your-site-name.ru, где your-site-name.ru замените на доменное имя вашего сайта MeshCentral.

Обратите внимание на значок замка в строке навигации. Сообщение вида Подключение защищено говорит о том, что подключение к веб-интерфейсу MeshCentral осуществляется с использованием протокола HTTPS.
