Так как SilverBullet установлен на виртуальном выделенном сервере, сетевой адаптер которого смотрит прямо в интернет и имеет «белый» IP-адрес, необходимо защитить передаваемые заметки, пароли и файлы от перехвата и подмены. Защита сервиса, являющегося приложением, работающим через веб-интерфейс, прежде всего подразумевает настройку доступа к нему при помощи протокола HTTPS, более безопасного по сравнению с HTTP.
Настройка защиты через подключение по HTTPS заключается в установке на веб-сервис TLS-сертификата от доверенного Центра сертификации, например, Let’s Encrypt. Поскольку сам SilverBullet слушает только локальный порт, для обмена данными со своими клиентами нужно дополнительно установить веб-сервер, который будет работать в качестве обратного прокси, то есть принимать запросы от клиентов и перенаправлять их на внутренний сервис, скрывая тем самым реальную конфигурацию. В отличие от классического прокси, который работает «от клиента к интернету», обратный прокси работает «от интернета к внутреннему серверу».
Одним из решений, реализующих подобную схему, является установка и настройка веб-сервера Caddy. Caddy будет работать для SilverBullet как внешний шлюз. Браузеры подключаются к нему по HTTPS, а веб-сервер перенаправляет запросы на SilverBullet. При этом сам SilverBullet слушает только локальный порт на сервере.
В статье разберём, как на Ubuntu и Debian настроить доступ к SilverBullet по HTTPS, используя Caddy в качестве обратного прокси.
Подготовительные работы
Чтобы установить TLS-сертификат от Let’s Encrypt, который обеспечит возможность подключения к веб-сервису по протоколу HTTPS, необходимо прежде всего настроить доступ к данному веб-ресурсу по его доменному имени. Let’s Encrypt не выдаёт сертификаты для сайтов, доступных только по своему IP-адресу, так как протокол проверки владения (ACME) завязан на доменные имена. TLS-сертификат можно получить только для домена или поддомена, который указывает на веб-сервер.
Следовательно, у вас должно быть доменное имя, которое нужно привязать к IP-адресу виртуального сервера. Такая настройка производится при помощи специальной DNS-записи – A-записи. Сделать это можно либо на сайте-регистраторе домена, либо в личном кабинете RUVDS во вкладке Домены
.

Кроме того, необходимо обеспечить доступ к серверу через TCP-порты 80 и 443. Порт 443 традиционно используется для подключения по HTTPS. В свою очередь, порт 80 нужен обратному прокси для автоматического выпуска и продления TLS-сертификатов. Чтобы валидировать домен по протоколу HTTP-01, Центр сертификации обращается к веб-ресурсу именно по порту 80. Если порт будет закрыт, проверка не сможет завершиться успешно, и выдачи сертификата не произойдёт.
Для открытия доступа к серверу через порты 80 и 443 добавьте в брандмауэр UFW разрешающие правила для предустановленных профилей http
и https
, которые обеспечат доступность VPS через данные порты:
$ sudo ufw allow http
$ sudo ufw allow https
Далее, установите две утилиты, которые будут использоваться при дальнейшей настройке:
curl
— утилита, используемая для скачивания файлов из сети;- gpg — программа для работы с системой шифрования, которая позволяет проверять цифровые подписи, шифровать и расшифровывать данные.
$ sudo apt install curl gpg
Как настроить доступ к SilverBullet по HTTPS
Переходя к настройке доступа по HTTPS, загрузите GPG-ключ репозитория Caddy, сохранив его в системном хранилище. Это позволит пакетному менеджеру APT проверять подлинность устанавливаемых пакетов:
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
При помощи следующей команды добавьте репозиторий Caddy в систему для последующей установки пакета:
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
После чего обновите списки пакетов:
$ sudo apt update
Затем установите Caddy:
$ sudo apt install caddy
В ходе инсталляции будет создана новая служба для веб-сервера Caddy. Служба должна стартовать и должна быть помещена в автозагрузку, чтобы запускаться вместе с системой. Убедиться в корректности установки можно с помощью команды, которая выведет на экран текущее состояние службы:
$ systemctl status caddy
Вывод команды должен показать, что служба работает и установлена в автозагрузку. Также вывод не должен содержать сообщений о каких-либо ошибках.

В Caddy все основные настройки можно описать в конфигурационном файле под названием Caddyfile. Поэтому, чтобы настроить Caddy для работы в качестве обратного прокси, откройте для редактирования данный файл:
$ sudo nano /etc/caddy/Caddyfile
Поскольку мы запускаем Caddy только как обратный прокси, то достаточно привести его к следующему виду:
your-site-name.ru {
reverse_proxy localhost:3000
}
В данном случае:
your-site-name.ru
— доменное имя, по которому будет доступен веб-интерфейс SilverBullet;3000
— порт, на котором будет работать SilverBullet внутри сервера.
Таким образом, Caddy теперь будет принимать запросы на имя домена your-site-name.ru
по порту 443 и пересылать их внутрь на процесс SilverBullet, слушающий порт 3000.
Сохраните файл после внесения изменений, закройте его и перезапустите службу Caddy:
$ sudo systemctl restart caddy
Затем откройте браузер и перейдите на https://your-site-name.ru
, где вместо your-site-name.ru
укажите доменное имя, предназначенное для веб-сервиса SilverBullet.

Теперь доступ к SilverBullet осуществляется с использованием протокола HTTPS, что видно в навигационной строке браузера.
И поскольку TCP-порт 3000 больше не используется для доступа к SilverBullet извне, вы можете удалить соответствующее ему правило из брандмауэра UFW:
$ sudo ufw delete allow 3000/tcp
Настройка доступа к SilverBullet по паролю
Сервис, который запускается на виртуальном сервере как открытый веб-интерфейс, доступен из интернета абсолютно всем. Это значит, что любой человек сможет без пароля подключиться к нему, чтобы просматривать или даже изменять контент. Защитить заметки и данные от посторонних можно, установив пароль на доступ к веб-странице.
Установить такую защиту позволяет тот же Caddy, и сделать это можно, внеся некоторые изменения в его конфигурационный файл:
$ sudo nano /etc/caddy/Caddyfile
Приведите Caddyfile
к следующему виду:
your-site-name.ru {
reverse_proxy localhost:3000
route {
basic_auth * {
your-silverbullet-user $2a$14$.......F9cYi
}
reverse_proxy 127.0.0.1:3000
}
}
В данном случае:
your-site-name.ru
— доменное имя веб-интерфейса SilverBullet;3000
— порт, на котором работает SilverBullet внутри сервера;basic_auth *
— секция, которая включает защиту паролем через HTTP Basic Authentication, где символ*
означает, что правило применяется ко всем запросам;your-silverbullet-user
— имя пользователя для аутентификации;$2a$14$.......F9cYi
— bcrypt-хэш пароля;reverse_proxy 127.0.0.1:3000
— параметр указывает на то, что после авторизации все запросы будут идти на сервис, доступный локально на порту 3000.
Обратите внимание на строку, содержащую bcrypt-хэш пароля. Bcrypt-хэш — это результат работы алгоритма bcrypt, который специально создан для безопасного хранения паролей. Для его генерации используется следующая команда:
$ caddy hash-password
В ходе выполнения команда попросит вас дважды ввести пароль, при помощи которого вы будете подключаться к веб-интерфейсу. После чего выведет строку вида:
$2a$14$7YypXEXfVvGL9MEkX7MCOuDgeJ3hmbbghlqssmTKtCJpCgA5F9cYi
Именно её необходимо скопировать в файл /etc/caddy/Caddyfile
.
Закройте файл с сохранением изменений и перезапустите конфигурацию службы Caddy:
$ sudo systemctl reload caddy
После чего откройте браузер и перейдите на веб-страницу SilverBullet, где авторизуйтесь при помощи пользователя, имя которого вы указали в конфигурационном файле Caddy, и пароля, который вы ввели при выполнении команды caddy hash-password
.
