Через веб-приложение, в том числе и SvelteKit-приложение, зачастую могут передаваться довольно чувствительные данные. Без защиты они становятся доступны для перехвата и могут быть использованы злоумышленниками. Такая опасность особенно актуальна для веб-проектов, установленных на VPS. Для шифрования трафика между сервером и клиентом, использующим веб-приложение, необходима настройка доступа к приложению с использованием протокола HTTPS – более защищённого по сравнению с HTTP.
В статье разберём, как защитить SvelteKit-приложение, установленное на Ubuntu или Debian, при помощи HTTPS.
Как защитить SvelteKit-приложение при помощи HTTPS
Изначально SvelteKit-приложение, установленное на Ubuntu или Debian, открыто для трафика из сети и доступно через TCP-порт 3000. В своём дефолтном состоянии такой веб-проект вообще никак не защищён. Это означает, что любая информация между клиентом и сервером передаётся в открытом виде. В такой конфигурации трафик не подвергается проверке подлинности источника и целостности содержимого. В результате веб-приложение уязвимо для атак и может быть заблокировано современными браузерами при попытке использовать небезопасное соединение. Чтобы закрыть приложение от прямого доступа, используется так называемый обратный прокси. В качестве обратного прокси может выступать веб-сервер, например, Nginx, настроенный специальным образом. Обратный прокси принимает запросы от клиентов на внешнем порту (обычно это 80 или 443), и перенаправляет их к работающему за ним приложению, которое в случае со SvelteKit слушает TCP-порт 3000.
Настройка доступа к веб-приложению по HTTPS заключается в установке в конфигурацию веб-сервера TLS-сертификата от доверенного Центра сертификации, например Let’s Encrypt. При этом если веб-сервер выполняет функцию обратного прокси, то он принимает зашифрованный трафик от клиентов, дешифрует его и передаёт запросы приложению. Веб-приложение в такой конфигурации никак не взаимодействует с клиентскими запросами напрямую.
Кроме того, для обеспечения защиты веб-приложения с помощью HTTPS необходимо настроить доступ к нему по имени домена. Установка бесплатного TLS-сертификата от Let’s Encrypt невозможна на веб-сайт, доступный только по своему IP-адресу. Настройка доступности по доменному имени заключается в привязке этого имени к IP-адресу сервера, на котором работает сайт. За направление домена на IP-адрес отвечает специальная DNS-запись – A-запись. Настройку A-записи можно произвести либо на сайте-регистраторе домена, либо в личном кабинете RUVDS через вкладку Домены
.

Установка и настройка Nginx
Для настройки обратного прокси и установки TLS-сертификата проинсталлируйте в систему следующие пакеты:
nginx
– веб-сервер Nginx, который в нашем примере будет работать в качестве обратного прокси;certbot
– клиент для взаимодействия с Центром сертификации Let’s Encrypt, который автоматически получает и обновляет TLS-сертификаты;python3-certbot-nginx
– плагин Certbot для Nginx, позволяющий автоматически настраивать конфигурацию Nginx при выпуске сертификатов.
Чтобы установить данный софт, запустите команду:
$ sudo apt install nginx certbot python3-certbot-nginx
Также необходимо настроить доступность сервера по протоколам HTTP и HTTPS. Протокол HTTPS будет использоваться для доступа непосредственно к веб-интерфейсу проекта. Доступ по протоколу HTTP, в свою очередь, потребуется при получении самого TLS-сертификата. Дело в том, что утилита Certbot, при помощи которой производится установка сертификата в конфигурацию Nginx, предоставляет Центру сертификации возможность проверить валидность домена, для которого производится настройка HTTPS. Данная проверка задействует именно TCP-порт 80, использующийся протоколом HTTP. В дальнейшем при обновлении TLS-сертификата 80-й порт также будет использован при проверке владения доменом.
Чтобы открыть доступ к серверу для протоколов HTTP и HTTPS, добавьте в брандмауэр UFW разрешающие правила для предустановленных профилей http
и https
:
$ sudo ufw allow http
$ sudo ufw allow https
Затем необходимо настроить правила обработки запросов при взаимодействии обратного прокси с SvelteKit-приложением. Данные настройки прописываются в конфигурационный файл виртуального хоста Nginx. В нашем примере файл конфигурации виртуального хоста для SvelteKit-приложения – /etc/nginx/sites-available/sveltekit.conf
. Чтобы настроить Nginx для работы в качестве реверс-прокси, откройте для редактирования данный файл:
$ sudo nano /etc/nginx/sites-available/sveltekit.conf
Скопируйте в файл следующее содержимое:
server {
listen 80;
server_name your-site-name.ru www.your-site-name.ru;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
В данном случае:
your-site-name.ru
– доменное имя, при помощи которого планируется осуществлять доступ к веб-интерфейсу приложения (вместоyour-site-name.ru
укажите имя вашего домена);3000
– порт, по которому доступно SvelteKit-приложение и через который обратный прокси будет взаимодействовать с приложением.
Закройте файл с сохранением изменений. После чего активируйте созданный виртуальный хост Nginx:
$ sudo ln -s /etc/nginx/sites-available/sveltekit.conf /etc/nginx/sites-enabled/
Затем проверьте корректность синтаксиса Nginx:
$ sudo nginx -t
Вывод команды не должен содержать сообщений об ошибках в работе веб-сервера:

Если ошибок нет, перезапустите конфигурацию Nginx:
$ sudo systemctl reload nginx
Установка TLS-сертификата
Для автоматического получения и установки TLS-сертификат от Let’s Encrypt на ваш домен запустите утилиту Certbot с плагином для Nginx. В команде укажите ваше доменное имя вместо your-site-name.ru
:
$ sudo certbot --nginx -d your-site-name.ru
В ходе выполнения своей работы утилита Certbot:
- попросит указать адрес вашей электронной почты для отправки уведомлений и для получения важных сообщений от Let’s Encrypt, связанных с безопасностью или изменениями в правилах использования;
- затем попросит согласиться с условиями пользовательского соглашения;
- после чего попросит дать разрешение на то, чтобы поделиться вашим адресом электронной почты с некоммерческой организацией Electronic Frontier Foundation, разрабатывающей Certbot.
Далее утилита запросит в Центре сертификации TLS-сертификат. При успешной валидации вашего домена Certbot добавит в конфигурацию Nginx секции с настройками SSL и укажет пути к сертификатам. В результате сайт станет доступен по протоколу HTTPS.

Чтобы убедиться в этом, откройте браузер и перейдите на https://your-site-name.ru
, где your-site-name.ru
замените на имя вашего домена.

С этого момента доступ к веб-интерфейсу SvelteKit-приложения будет защищён протоколом HTTPS. TCP-порт 3000 теперь будет использоваться только для взаимодействия реверс-прокси с веб-приложением. Исходя из чего, доступ к серверу через порт 3000 можно закрыть. Для этого удалите из брандмауэра UFW соответствующее правило:
$ sudo ufw delete allow 3000/tcp