Инфраструктура

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

Поделиться:
Remote development #2 – Security and Performance

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

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

Чтобы превратить этот прототип в повседневный рабочий инструмент, нам нужно настроить обратный прокси.
Его роль проста: перехватывать защищенные соединения (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.your-domain.uk» на ваше собственное доменное имя, с выбранным вами поддоменом, указывающим на 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.uk {
    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. Сеть и брандмауэр

Теперь, когда точка доступа уникальна через HTTPS URL, настроенный выше, остальные порты, кроме 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 является легитимной точкой входа.
Этот удобный небольшой сервер разработки теперь скорее похож на крепость.

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

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

Remote development #2 – Security and Performance