VM200 — это точка входа Web для самостоятельно размещённой инфраструктуры. Она публикует приложения, установленные на других машинах, не открывая напрямую их внутренние порты в Интернет. Она принимает HTTPS-соединения, предъявляет публичный сертификат, выбирает нужный сервис и перенаправляет запрос на нужную машину локальной сети.
✅ Развёрнутое состояние
  • Выделенная Linux ВМ на основе шаблона Ubuntu Server
  • Nginx в роли обратного прокси
  • Сертификаты Let's Encrypt, управляемые через Certbot
  • Активный локальный файрвол
  • Fail2ban активен и проверен для администрирования по SSH
  • Проверены перенаправление HTTP → HTTPS и обновление сертификата
  • Проверены потоковые ответы и соединения WebSocket
  • Перезапуск VM200 проверен без потери конфигурации
🌐 Статус публикаций
СервисПубличный статус
OpenWebUI · VM210🟢 опубликовано и проверено по HTTPS
n8n · VM300🟢 опубликовано и проверено по HTTPS
Nextcloud · VM205🟢 опубликовано и проверено по HTTPS
прочие внутренние сервисы⚪ не опубликованы / отложены
🧭 От доменного имени к другой машине
путь публичного запроса
1. Navigateur Internet
        ↓ demande gpt.stephanemuraro.fr
2. DNS public
        ↓ renvoie l'adresse Internet de la connexion
3. Routeur
        ↓ transfère uniquement le trafic Web vers VM200
4. VM200 / Nginx
        ↓ choisit le virtual host correspondant au nom
5. VM210 / OpenWebUI
        ↓ produit la réponse applicative
6. VM200 / Nginx
        ↓ renvoie la réponse dans la session HTTPS
7. Navigateur

DNS связывает только публичное имя с интернет-адресом — он не знает, какая ВМ обслуживает приложение. Маршрутизатор тоже не выбирает сервис: он передаёт Web-соединения на VM200. Именно Nginx выполняет маршрутизацию на уровне приложений: имя, запрошенное во время TLS-согласования и в HTTP-запросе, выбирает блок конфигурации (virtual host), указывающий целевую внутреннюю машину и сервис.

несколько публичных имён, одно интернет-соединение
gpt.stephanemuraro.fr         ─┐
n8n.stephanemuraro.fr         ─┼─> même adresse publique ─> VM200
nextcloud.stephanemuraro.fr   ─┘                           ├─> VM IA
                                                           ├─> VM automatisation
                                                           └─> VM fichiers
Наличие записи DNS не доказывает, что сервис опубликован: также нужны virtual host, действительный сертификат, разрешённый backend и тест из внешней сети.
🧱 Роль компонентов
КомпонентОтветственностьОграничение
Публичный DNSсвязывает имя с интернет-адресомне выбирает внутреннюю ВМ
Маршрутизаторпередаёт Web-трафик на VM200не понимает приложения
Файрвол VM200отклоняет непредусмотренные входящие соединенияне заменяет аутентификацию
Nginxзавершает HTTPS, выбирает virtual host, перенаправляетне хранит бизнес-данные
Certbotполучает/обновляет сертификаты Let's Encryptне публикует приложение самостоятельно
Fail2banблокирует некоторые повторяющиеся атаки по журналамне заменяет ни файрвол, ни надёжные пароли
Backendпредоставляет приложение, контролирует своих пользователейне должен быть открыт напрямую
🔐 Терминация TLS

Публичное шифрование завершается на VM200. Сертификат и его закрытый ключ остаются централизованными на обратном прокси, что избавляет от необходимости управлять отдельным публичным сертификатом на каждом backend.

Client Internet  ═════ HTTPS chiffré ═════>  VM200
VM200            ───── flux LAN contrôlé ──>  backend

Nginx передаёт backend запрошенное имя, внешний протокол и информацию, необходимую для трассировки. Для интерактивных приложений он поддерживает WebSocket, потоковые ответы и тайм-ауты, подходящие для длительных обработок.

🛡️ Эшелонированная защита
  • маршрутизатор передаёт на VM200 только необходимый Web-трафик
  • локальный файрвол отклоняет прочие входящие соединения
  • администрирование ограничено внутренней сетью
  • Nginx перенаправляет только настроенные имена и сервисы
  • TLS шифрует и аутентифицирует публичное соединение
  • Fail2ban снижает число некоторых наблюдаемых повторяющихся попыток
  • каждый backend сохраняет собственную аутентификацию и фильтрацию
  • базы данных и технические API остаются недоступны из WAN

Fail2ban проверен для SSH; это не защищает автоматически формы входа приложений — каждая защита требует пригодного для анализа журнала и проверенного фильтра.

➕ Публикация нового сервиса
  • проверить сервис в локальной сети
  • определить его потребности в HTTPS, WebSocket, размере запроса и тайм-аутах
  • определить его публичное имя и модель аутентификации
  • настроить приложение под его публичный источник
  • создать отдельный virtual host на VM200
  • проверить синтаксис Nginx перед перезагрузкой
  • получить и протестировать сертификат
  • протестировать из действительно внешней сети
  • проверить журналы и отсутствие прямой открытости
  • задокументировать откат
↩️ Откат — три уровня:

Формальный тест полного отката путём снятия перенаправления WAN остаётся последней открытой проверкой первого этапа.

🎯 Продемонстрированные компетенции
  • Проектирование общего обратного прокси
  • DNS, NAT, SNI, virtual hosts и заголовки прокси
  • Автоматизация жизненного цикла сертификатов
  • Поддержка WebSocket и потоковой передачи
  • Разделение между интернет-границей и backend'ами
  • Эшелонированная защита и стратегия отката
  • Публикация сервиса, размещённого на другой машине

Связанные страницы

Ссылки и источники

КатегорияРесурсURL
Официальная документацияNginx — Documentationnginx.org/en/docs
Официальная документацияCertbot / Let's Encrypteff-certbot.readthedocs.io
Официальная документацияFail2bangithub.com/fail2ban/fail2ban
Проверенные публикацииOpenWebUI (VM210) · n8n (VM300) · Nextcloud (VM205) — HTTPS testé depuis un réseau extérieur, 2026-08-15—
ЛицензияNginx — BSD-2-Clause · Certbot — Apache-2.0 · Fail2ban — GPLv2nginx.org/LICENSE
Содержимое этой страницыПубликуется под CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0