Назад
Створіть тунель localhost на власному сервері за допомогою OpenSSH та nginx
SiTech AI Team2 хв читання

Створіть тунель localhost на власному сервері за допомогою OpenSSH та nginx

Конфігурація самостійного хостингу поєднує віддалене перенаправлення OpenSSH з nginx, щоб опублікувати попередній перегляд localhost, додати wildcard TLS і захистити спільні посилання терміновими, хеш-контрольованими даними доступу.

Перенаправлення локального попереднього перегляду

Попередній перегляд блогу, запущеного на localhost:8080, можна поділитися через тунель самостійного хостингу, без комерційного сервісу. Команда ssh -N -R 0:localhost:8080 web02.luffy.cx просить OpenSSH перенаправити віддалений порт на локальний сервіс. Значення 0 для віддаленого порту змушує сервер виділити вільний порт, який у прикладі є 41535.

На віддаленому сервері nginx завершує HTTPS-з'єднання та проксує запити на виділений loopback-порт. Вираз server-name отримує порт із хостнейму тунелю, що дозволяє nginx направляти трафік на правильне локальне перенаправлення. Конфігурація також потребує wildcard DNS-запис для *.ssh.luffy.cx та wildcard сертифікат Let's Encrypt.

Захист спільних URL

Без додаткового захисту виділений порт є єдиною таємницею, яка закриває вміст. Конфігурація покращує контроль доступу за допомогою ngx_http_secure_link_module, який обчислює хеш зі значень запиту та секретного ключа. Оскільки хеш, зашифрований base64, не можна вбудувати в чутливе до регістру доменне ім'я, він надсилається як частина імені користувача HTTP Basic Authentication разом із міткою часу закінчення терміну дії.

Nginx читає ім'я користувача зі змінної $remote_user. Вираз map відокремлює хеш від мітки часу закінчення терміну дії, а вираз secure link об'єднує мітку часу, отриманий порт та налаштований секретний ключ для перевірки. Неіснуючий або неправильний хеш викликає відповідь 401 із заголовком WWW-Authenticate. Прострочене посилання викликає відповідь 410. Перш ніж проксувати правильний запит, nginx видаляє заголовок Authorization і налаштований на підтримку WebSocket-з'єднань.

Генерація посилань тунелю

Хеш посилання генерується з часу закінчення терміну дії, порту та секретного ключа за допомогою операцій OpenSSL MD5 та base64, після чого результат перетворюється на URL-безпечний токен. Допоміжний скрипт використовує тривалість життя 86400 секунд. Оскільки OpenSSH не повідомляє свій виділений порт через змінну середовища, скрипт проходить по хешу батьківських процесів, щоб знайти процеси sshd-session та їхні порти прослуховування.

Після отримання портів скрипт генерує захищений URL для кожного та зберігає сесію у відкритому вигляді. Запис SSH-конфігурації з назвою http-over-ssh запускає помічника на віддаленому сервері. Отримана конфігурація покладається лише на OpenSSH та вже запущений там nginx, а окрема конфігурація NixOS доступна для керування помічником на NixOS.

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.