Новости и обновления

Удаленная разработка #2: Как защитить сервер и ускорить работу — полное руководство

Поделиться:
Удаленная разработка #2: Как защитить сервер и ускорить работу — полное руководство

В предыдущей главе мы запустили сервер VSCode на удаленном инстансе.

Это победа. Но в текущем виде ваша установка уязвима или, по крайней мере, недостаточно безопасна. Трафик передается в открытом виде (HTTP), а порт 8080 доступен любому, кто сканирует наш IP-адрес.

Чтобы превратить этот прототип в полноценный рабочий инструмент, необходимо настроить Reverse Proxy.

Его задача проста: перехватывать защищенные соединения (HTTPS) на стандартном порту 443 и перенаправлять их локально на наш сервис.

1. Предварительные требования: заблокируйте сетевую часть

Прежде всего необходимо попросить code-server больше не слушать входящие соединения извне, а только те, что поступают с самой машины (от прокси).

Отредактируйте файл конфигурации: nano ~/.config/code-server/config.yaml

Измените строку «bind-addr» следующим образом:

bind-addr: 127.0.0.1:8080

Затем перезапустите сервис.

ubuntu@vscode-server:~$ sudo systemctl restart code-server@$USER

Это даст гарантию, что vscode-server будет «слушать» только локально и не сможет быть напрямую доступен извне.

2. Реализуем обратный прокси

Здесь у вас есть два варианта:

  • nginx — это стандартный выбор на протяжении многих лет;
  • Caddy — более простой (но полноценный) и современный подход.

Для этой статьи мы выбрали Caddy в качестве примера, чтобы познакомиться с ним, если вы ещё не знакомы!

Caddy изначально умеет управлять продлением SSL-сертификатов. И всё это с OVHcloud!

Установка (Debian/Ubuntu)

Более подробную документацию для других систем или методов установки можно найти в официальной документации: https://caddyserver.com/docs/install.

ubuntu@vscode-server:~$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
ubuntu@vscode-server:~$ curl -1sLf ‘https://dl.cloudsmith.io/public/caddy/stable/gpg.key’| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
ubuntu@vscode-server:~$ curl -1sLf ‘https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt’| sudo tee /etc/apt/sources.list.d/caddy-stable.list
ubuntu@vscode-server:~$ sudo apt update && sudo apt install caddy -y

Конфигурация: отредактируйте файл /etc/caddy/Caddyfile (очистите его и замените на следующее):

Замените «dev.votre-domaine.fr» на ваше собственное доменное имя с выбранным поддоменом, указывающим на IP инстанса.

  • Простая конфигурация только на HTTP (80)
dev.your-domain.uk {    reverse_proxy 127.0.0.1:8080}
  • Рекомендуемая конфигурация на HTTPS (443), с использованием домена, размещённого у OVHcloud.

Для создания токенов API OVHcloud обратитесь к этой странице: https://eu.api.ovh.com/createToken/.

dev.your-domain.fr {
    tls {
        dns ovh {
            endpoint "ovh-eu"
            application_key {$OVH_APPLICATION_KEY}
            application_secret {$OVH_APPLICATION_SECRET}
            consumer_key {$OVH_CONSUMER_KEY}
        }
    }
    reverse_proxy 127.0.0.1:8080
}

Более подробно об управлении SSL-сертификатами можно узнать в официальной документации Caddy.
Применение
:

ubuntu@vscode-server:~$ sudo systemctl reload caddy

Теперь, если вы выбрали рекомендуемую конфигурацию на HTTPS, ваше окружение защищено надёжным SSL-шифрованием.

Вы больше не рискуете, что ваш пароль будет перехвачен в общедоступном Wi-Fi, что является важным шагом вперёд к нашей цели.

3. Сеть и брандмауэр

Теперь, когда точка доступа уникальна через URL в HTTPS, остальные порты, кроме SSH, можно закрыть.

Реализуйте базовые правила в брандмауэре. В Ubuntu стандартным инструментом является UFW (Uncomplicated Firewall).

Начните с открытия портов для работающих сервисов.

ubuntu@vscode-server:~$ sudo ufw allow ssh
ubuntu@vscode-server:~$ sudo ufw allow http
ubuntu@vscode-server:~$ sudo ufw allow https

Включите брандмауэр:

ubuntu@vscode-server:~$ sudo ufw enable

Проверка применения правил.

ubuntu@vscode-server:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
45876                      ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
45876 (v6)                 ALLOW       Anywhere (v6)

Вы также можете добавить более строгие правила, чтобы явно отклонять всё, что не разрешено на вход, и оставить выход глобально разрешённым.

ubuntu@vscode-server:~$ sudo ufw default deny incoming
ubuntu@vscode-server:~$ sudo ufw default allow outgoing

Теперь, если кто-то попытается обратиться к IP на порту 8080, соединение будет просто отклонено.

Только доменное имя в HTTPS является легитимной точкой входа.
Этот полезный небольшой сервер разработки теперь больше напоминает крепость. 

Но что произойдёт, если вы решите удалить этот инстанс, чтобы взять более мощный, или остановить его на неопределённый срок, так как ваш проект приостановлен?

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

Удаленная разработка #2: Как защитить сервер и ускорить работу — полное руководство