15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
30.10.2024
4 +1

SSH Тунелі: Налаштування та Практичні Випадки Використання

Повний посібник з перенаправлення портів SSH, SOCKS-проксі та безпечного віддаленого доступу

У сучасному взаємопов’язаному цифровому середовищі безпечний віддалений доступ — це вже не опція, а фундаментальна вимога для розробників, системних адміністраторів та IT-фахівців, які керують серверами, базами даних і розподіленими застосунками. Хоча Secure Shell (SSH) вже є золотим стандартом зашифрованої віддаленої комунікації, його можливості тунелювання відкривають зовсім інший рівень потужності та гнучкості.

SSH-тунелювання дозволяє безпечно перенаправляти мережевий трафік між системами, обходити обмежувальні брандмауери, отримувати доступ до сервісів у приватних мережах і навіть шифрувати все інтернет-з’єднання — і все це через одне зашифроване SSH-з’єднання. Незалежно від того, чи ви розробник, якому потрібно отримати доступ до заблокованої бази даних, системний адміністратор, що відкриває локальний застосунок для віддаленого тестування, або свідомий щодо безпеки користувач, який переглядає сторінки через публічний Wi-Fi, SSH-тунелі — один із найбільш універсальних і недооцінених інструментів у вашому арсеналі.

Цей вичерпний посібник охоплює все, що вам потрібно знати: як працюють SSH-тунелі, три основні методи перенаправлення, реальні сценарії використання, скорочення у файлі конфігурації та найкращі практики для запуску стабільних і безпечних тунелів у середовищі VPS Хостингу.

Що таке SSH-тунель?

SSH-тунель — це механізм передачі довільних мережевих даних через зашифроване SSH-з’єднання між двома кінцевими точками. Замість того щоб відкривати сервіси безпосередньо в інтернет — що створює значні ризики безпеки — SSH-тунелювання загортає цей трафік у зашифрований канал, роблячи його невидимим для підслуховувачів, брандмауерів і мережевих зловмисників.

В основі своїй SSH-тунель працює так:

  1. Встановлює зашифроване SSH-з’єднання між клієнтом і сервером
  2. Прив’язує локальний або віддалений порт до цього з’єднання
  3. Перенаправляє весь трафік, надісланий на цей порт, через зашифрований тунель до місця призначення

SSH-тунелі працюють у трьох основних режимах, кожен з яких призначений для різних сценаріїв використання:

Тип тунелюНапрямокОсновний сценарій використання
Локальне перенаправлення портівЛокальний → ВіддаленийДоступ до віддалених сервісів з локальної машини
Віддалене перенаправлення портівВіддалений → ЛокальнийВідкриття локальних сервісів для віддаленого сервера
Динамічне перенаправлення портівЛокальний → Будь-якийПовний SOCKS-проксі для маршрутизації всього трафіку

Розглянемо кожен метод детально, з практичними командами та реальними сценаріями.

1. Локальне перенаправлення портів (-L)

Що таке локальне перенаправлення портів?

Локальне перенаправлення портів є найбільш широко використовуваною формою SSH-тунелювання. Воно дозволяє прив’язати порт на локальній машині та перенаправляти весь трафік, надісланий на цей порт, через SSH-з’єднання до вказаного місця призначення — зазвичай сервісу, що працює на віддаленому сервері або доступного з нього.

Уявіть це як створення безпечного зашифрованого каналу з вашого ноутбука безпосередньо у віддалену мережу, що дозволяє вам взаємодіяти з сервісами так, ніби ви фізично присутні в цій мережі.

Як це працює

Коли ви ініціюєте локальний SSH-тунель:

  1. Ваш SSH-клієнт відкриває порт прослуховування на локальній машині
  2. Будь-яке з’єднання з цим локальним портом перенаправляється через зашифровану SSH-сесію на віддалений SSH-сервер
  3. Віддалений SSH-сервер потім підключається до вказаного хоста та порту призначення
  4. Дані передаються в обох напрямках через цей зашифрований канал

Синтаксис

ssh -L [local_port]:[destination_host]:[destination_port] [user]@[ssh_server]

Реальний приклад: доступ до захищеної брандмауером віддаленої бази даних

Один із найпоширеніших сценаріїв: вам потрібно підключитися до бази даних PostgreSQL, що працює на віддаленому сервері, але порт бази даних (5432) заблокований брандмауером з міркувань безпеки. Замість того щоб відкривати цей порт у публічний інтернет, ви можете тунелювати через SSH.

ssh -L 5432:localhost:5432 user@remote-server

Розбір цієї команди:

    -L 5432:localhost:5432 — Вказує SSH прослуховувати локальний порт 5432 та перенаправляти трафік на localhost:5432 з точки зору віддаленого сервера
    user@remote-server — Користувач SSH та сервер, через який ви підключаєтесь
    
    Після активації тунелю відкрийте клієнт бази даних і підключіться до localhost:5432 — тепер ви безпечно спілкуєтесь із віддаленим екземпляром PostgreSQL через зашифрований канал.
    Додаткові приклади локального перенаправлення
    Доступ до віддаленого веб-застосунку на приватному порту:
    ssh -L 8080:localhost:80 user@remote-server
    Тепер перейдіть на http://localhost:8080 на вашій локальній машині, щоб отримати доступ до веб-сервера, що працює на порту 80 віддаленого хоста.
    Доступ до внутрішнього сервісу, недоступного безпосередньо:
    ssh -L 8080:internal-service.local:80 user@remote-server
    Тут internal-service.local — це хост, доступний з віддаленого сервера, але не з вашої локальної машини. SSH-сервер виступає ретранслятором, надаючи вам доступ до сервісів у глибині приватної мережі.
    2. Віддалене перенаправлення портів (-R)
    Що таке віддалене перенаправлення портів?
    Віддалене перенаправлення портів — це по суті зворотне локальне перенаправлення портів. Замість того щоб підтягувати віддалений сервіс до вашої локальної машини, ви виштовхуєте локальний сервіс на віддалений сервер. Це безцінно, коли вам потрібно відкрити щось, що працює на вашій локальній машині — за NAT, корпоративним брандмауером або домашнім роутером — для користувачів на віддаленому сервері або в ширшому інтернеті.
    Як це працює
    
    Ваш SSH-клієнт підключається до віддаленого SSH-сервера
    Віддалений сервер відкриває порт прослуховування на своєму інтерфейсі
    Будь-яке з’єднання з цим віддаленим портом перенаправляється назад через SSH-тунель на вашу локальну машину
    Ваша локальна машина обробляє з’єднання так, ніби воно надійшло безпосередньо від локального клієнта
    
    Синтаксис
    ssh -R [remote_port]:[local_host]:[local_port] [user]@[ssh_server]
    Реальний приклад: спільний доступ до локального сервера розробки
    Ви створюєте веб-застосунок локально на порту 3000 і хочете продемонструвати його колезі або клієнту без розгортання. Використовуючи віддалене перенаправлення портів, ви можете зробити ваш локальний застосунок доступним через публічну IP-адресу віддаленого сервера.
    ssh -R 8080:localhost:3000 user@remote-server
    Розбір цієї команди:
    
    -R 8080:localhost:3000 — Вказує віддаленому серверу прослуховувати порт 8080 та перенаправляти вхідні з’єднання назад на localhost:3000 вашої локальної машини
    user@remote-server — Віддалений SSH-сервер, що виступає ретранслятором
    
    Тепер будь-хто з доступом до віддаленого сервера може відвідати http://remote-server:8080 та взаємодіяти з вашим локальним застосунком розробки в реальному часі.
    > Важлива примітка: Щоб віддалене перенаправлення портів прив’язувалось до всіх інтерфейсів (а не лише до localhost на віддаленому сервері), вам може знадобитися увімкнути GatewayPorts yes у файлі /etc/ssh/sshd_config віддаленого сервера.
    Додатковий приклад віддаленого перенаправлення
    Відкриття локального сервера розробки для перегляду командою:
    ssh -R 4000:localhost:3000 user@remote-server
    Колеги, що звертаються до http://remote-server:4000, отримуватимуть ваш локальний застосунок, що працює на порту 3000 — без розгортання, без змін DNS, без правил брандмауера.
    3. Динамічне перенаправлення портів (-D)
    Що таке динамічне перенаправлення портів?
    Динамічне перенаправлення портів перетворює ваш SSH-клієнт на повнофункціональний SOCKS-проксі сервер. На відміну від локального та віддаленого перенаправлення — які тунелюють трафік до єдиного заздалегідь визначеного місця призначення — динамічне перенаправлення дозволяє маршрутизувати трафік до будь-якого місця призначення через SSH-сервер. Це робить його надзвичайно потужним для шифрування всього інтернет-трафіку, обходу геообмежень та захисту з’єднань у ненадійних мережах.
    Як це працює
    
    Ваш SSH-клієнт відкриває SOCKS-проксі слухач на локальному порту
    Будь-який застосунок, налаштований на використання цього SOCKS-проксі, надсилає свій трафік через SSH-тунель
    Віддалений SSH-сервер перенаправляє цей трафік до кінцевого місця призначення від вашого імені
    З точки зору зовнішніх серверів, весь трафік виглядає так, ніби він походить з IP-адреси SSH-сервера
    
    Синтаксис
    ssh -D [local_socks_port] [user]@[ssh_server]
    Реальний приклад: обхід мережевих обмежень у публічному Wi-Fi
    Ви знаходитесь у кав’ярні або готелі, підключені до публічної Wi-Fi мережі з обмеженим або відстежуваним трафіком. Маршрутизуючи ваш браузер через динамічний SSH-тунель до вашого сервера VPS Хостингу, весь трафік стає зашифрованим і необмеженим.
    ssh -D 8080 user@remote-server
    Розбір цієї команди:
    
    -D 8080 — Відкриває SOCKS5-проксі на вашій локальній машині на порту 8080
  • user@remote-server — SSH-сервер, який ретранслюватиме ваш трафік
  • Налаштування браузера для використання SOCKS-проксі:

    • Firefox: Налаштування → Параметри мережі → Ручне налаштування проксі → SOCKS-хост: 127.0.0.1, Порт: 8080, SOCKS v5
    • Chrome (через командний рядок):
    google-chrome --proxy-server="socks5://127.0.0.1:8080"

    Після налаштування весь трафік браузера шифрується та маршрутизується через ваш SSH-сервер — невидимий для локального мережевого моніторингу та обмежень брандмауера.

    Додатковий приклад динамічного перенаправлення

    Маршрутизація всього трафіку через безпечний SOCKS-проксі на порту 9090:

    ssh -D 9090 user@ssh-server

    Налаштуйте будь-який SOCKS5-сумісний застосунок — браузери, торент-клієнти, месенджери — на використання localhost:9090 як проксі, і весь трафік буде безпечно тунельований через ваш SSH-сервер.

    Підтримка SSH-тунелів активними: основні прапорці

    За замовчуванням SSH-тунелі можуть розриватися через неактивність або мережеві перебої. Використовуйте ці прапорці для створення більш стабільних і постійних тунелів:

    ssh -L 5432:localhost:5432 -N -f -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@remote-server
    ПрапорецьПризначення
    -NНе виконувати віддалену команду — лише перенаправляти порти
    -fЗапустити SSH у фоновому режимі після автентифікації
    -o ServerAliveInterval=60Надсилати пакет keepalive кожні 60 секунд
    -o ServerAliveCountMax=3Відключитися після 3 пропущених відповідей keepalive
    -CУвімкнути стиснення (корисно для повільних з’єднань)

    Спрощення SSH-тунелів за допомогою файлу конфігурації

    Якщо ви регулярно використовуєте SSH-тунелі, введення довгих команд щоразу стає виснажливим і схильним до помилок. Файл конфігурації SSH (~/.ssh/config) дозволяє визначати іменовані профілі з’єднань з усіма попередньо налаштованими параметрами перенаправлення.

    Створення файлу конфігурації SSH

    Відкрийте або створіть ~/.ssh/config та додайте конфігурації тунелів:

    Host remote-db
        HostName remote-server.example.com
        User your-username
        IdentityFile ~/.ssh/id_rsa
        LocalForward 5432 localhost:5432
        ServerAliveInterval 60
        ServerAliveCountMax 3
    
    Host dev-proxy
        HostName ssh-server.example.com
        User your-username
        DynamicForward 9090
        ServerAliveInterval 60
    
    Host expose-local
        HostName remote-server.example.com
        User your-username
        RemoteForward 8080 localhost:3000

    Використання налаштованих тунелів

    Маючи файл конфігурації, встановлення тунелю так само просто, як:

    # Connect to remote database via local port forwarding
    ssh remote-db
    
    # Start SOCKS proxy for secure browsing
    ssh dev-proxy
    
    # Expose local development server remotely
    ssh expose-local

    Більше не потрібно запам’ятовувати складні рядки команд — ваші конфігурації тунелів збережені та готові до повторного використання.

    Практичні сценарії використання SSH-тунелювання

    Сценарій 1: безпечний доступ до віддаленої бази даних

    Ваша виробнича база даних ніколи не повинна бути відкрита в публічний інтернет. Використовуйте локальне перенаправлення портів для безпечного доступу через SSH:

    ssh -L 5432:localhost:5432 -N -f user@remote-server

    Підключіть ваш клієнт бази даних (pgAdmin, DBeaver, MySQL Workbench) до localhost:5432 — тепер ви безпечно підключені до віддаленої бази даних без публічного відкриття будь-яких портів.

    Цей підхід бездоганно працює на Виділених серверах, де у вас є повний контроль над правилами брандмауера та конфігурацією SSH.

    Сценарій 2: доступ до внутрішніх сервісів у приватній мережі

    Ваш віддалений сервер має доступ до внутрішніх сервісів (панелі моніторингу, адміністративні панелі, внутрішні API), які не є публічно доступними. Отримайте до них доступ з вашої локальної машини:

    ssh -L 8080:internal-monitoring:80 user@remote-server

    Перейдіть на http://localhost:8080 для доступу до внутрішньої панелі моніторингу через безпечний тунель.

    Сценарій 3: спільний доступ до локального середовища розробки

    Ви створюєте веб-застосунок локально і вам потрібен відгук зацікавлених сторін перед розгортанням. Використовуйте віддалене перенаправлення портів для миттєвого спільного доступу:

    ssh -R 4000:localhost:3000 user@remote-server

    Поділіться URL http://remote-server:4000 зі своєю командою — вони можуть отримати доступ до вашого локального сервера розробки в реальному часі без будь-яких витрат на розгортання.

    Сценарій 4: зашифрований перегляд у ненадійних мережах

    На конференції, в аеропорту або готелі? Захистіть свій трафік від підглядання за допомогою динамічного SOCKS-проксі:

    ssh -D 9090 -N -f user@your-vps

    Налаштуйте ваш браузер на використання localhost:9090 як SOCKS5-проксі. Весь трафік тепер зашифрований і маршрутизується через ваш надійний сервер.

    Сценарій 5: обхід обмежень корпоративного брандмауера

    Якщо ваше робоче місце блокує доступ до певних інструментів розробки, репозиторіїв або сервісів, динамічне перенаправлення портів через зовнішній SSH-сервер може відновити доступ:

    ssh -D 8080 -N -f user@external-server

    Маршрутизуйте ваш трафік через SOCKS-проксі для обходу обмежувальних правил корпоративного брандмауера.

    Найкращі практики безпеки SSH-тунелювання

    SSH-тунелі є потужними, але їх необхідно ретельно налаштовувати, щоб уникнути введення нових ризиків безпеки:

    1. Використовуйте автентифікацію за SSH-ключем

    Вимкніть автентифікацію за паролем і використовуйте пари SSH-ключів для всіх тунельних з’єднань:

    # Generate a strong SSH key pair
    ssh-keygen -t ed25519 -C "tunnel-key"
    
    # Copy public key to remote server
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-server

    Потім вимкніть автентифікацію за паролем у /etc/ssh/sshd_config:

    PasswordAuthentication no
    PubkeyAuthentication yes

    2. Обмежте доступ SSH за IP-адресою

    У /etc/ssh/sshd_config обмежте, які IP-адреси можуть встановлювати SSH-з’єднання:

    AllowUsers user@192.168.1.0/24

    3. Використовуйте нестандартні SSH-порти

    Зміна стандартного SSH-порту з 22 зменшує автоматизовані атаки методом перебору:

    Port 2222

    4. Обмежте дозволи тунелю

    Якщо користувач повинен мати можливість лише створювати тунелі (але не виконувати команди), обмежте його доступ до оболонки:

    Match User tunnel-user
        AllowTcpForwarding yes
        X11Forwarding no
        PermitTTY no
        ForceCommand /bin/false

    5. Відстежуйте активні тунелі

    Регулярно перевіряйте активні SSH-з’єднання та перенаправлені порти:

    # List active SSH connections
    ss -tnp | grep ssh
    
    # Check who is connected
    who
    last

    6. Поєднуйте SSH-тунелі з SSL-сертифікатами

    Для веб-сервісів, відкритих через SSH-тунелі, завжди використовуйте SSL-сертифікати, щоб додати додатковий рівень шифрування та встановити довіру з кінцевими користувачами.

    Автоматизація SSH-тунелів за допомогою systemd

    Для виробничих середовищ, де тунелі повинні бути постійними та автоматично перезапускатися після збоїв, використовуйте systemd для керування ними як сервісами.

    Створення сервісу systemd для SSH-тунелю

    Створіть /etc/systemd/system/ssh-tunnel-db.service:

    [Unit]
    Description=SSH Tunnel to Remote Database
    After=network.target
    
    [Service]
    User=your-username
    ExecStart=/usr/bin/ssh -N -L 5432:localhost:5432 
        -o ServerAliveInterval=60 
        -o ServerAliveCountMax=3 
        -o ExitOnForwardFailure=yes 
        -i /home/your-username/.ssh/id_ed25519 
        user@remote-server
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target

    Увімкніть та запустіть сервіс:

    sudo systemctl daemon-reload
    sudo systemctl enable ssh-tunnel-db
    sudo systemctl start ssh-tunnel-db
    sudo systemctl status ssh-tunnel-db

    Ваш SSH-тунель тепер автоматично запускатиметься при завантаженні та негайно перезапускатиметься у разі розриву.

    SSH-тунелювання на інфраструктурі AlexHost

    Запуск SSH-тунелів на надійному, високопродуктивному сервері є критично важливим для стабільності та безпеки. Інфраструктура AlexHost спеціально створена саме для такого роду навантажень:

    • Сховище NVMe SSD — Надмала затримка для тунельних з’єднань та перенаправлення даних
    • Повний root-доступ — Повний контроль над конфігурацією SSH, правилами брандмауера та системними налаштуваннями
    • Захист від DDoS — Кінцеві точки вашого тунелю залишаються захищеними від об’ємних атак
    • SLA з гарантією доступності 99,9% — Постійні тунелі залишаються підключеними без несподіваних перебоїв
    • Юрисдикція з пріоритетом конфіденційності — AlexHost працює відповідно до законів Молдови, що сприяють захисту конфіденційності

    Незалежно від того, чи потрібен вам легкий план VPS Хостингу для особистого тунелювання, VPS з cPanel для керованих середовищ або рішення Виділених серверів для тунельної інфраструктури корпоративного рівня, AlexHost має відповідний план для ваших потреб.

    Для команд, що керують кількома сервісами та доменами, поєднання SSH-тунелів з Реєстрацією доменів та Хостингом електронної пошти на тій самій інфраструктурі спрощує весь ваш стек, зберігаючи все безпечним під одним дахом.

    Усунення поширених проблем SSH-тунелів

    Тунель часто розривається

    Причина: Тайм-аути мережевої неактивності або закінчення сесії NAT.

    Вирішення: Додайте налаштування keepalive до вашої конфігурації SSH або команди:

    ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=5 -L 5432:localhost:5432 user@remote-server

    Помилка «Bind: Address Already in Use»

    Причина: Локальний порт, який ви намагаєтесь прив’язати, вже зайнятий.

    Вирішення: Знайдіть і завершіть процес, що використовує порт:

    lsof -ti:5432 | xargs kill -9

    Або виберіть інший локальний порт для вашого тунелю.

    Віддалене перенаправлення портів прив’язується лише до localhost

    Причина: Стандартна поведінка SSH обмежує віддалене перенаправлення до 127.0.0.1 на сервері.

    Вирішення: Додайте GatewayPorts yes до /etc/ssh/sshd_config на віддаленому сервері та перезапустіть SSH:

    sudo systemctl restart sshd

    «Connection Refused» при підключенні через тунель

    Причина: Цільовий сервіс не запущений, або порт/ім’я хоста у вашій команді тунелю вказані неправильно.

    Вирішення: Перевірте, чи запущений сервіс на віддаленому хості:

    ssh user@remote-server "ss -tnlp | grep 5432"

    SSH-тунель не запускається у фоновому режимі (прапорець -f)

    Причина: Помилка автентифікації або неправильна конфігурація хоста.

    Вирішення: Спочатку перевірте з’єднання в інтерактивному режимі (без -f та -N), вирішіть будь-які проблеми з автентифікацією, а потім додайте фонові прапорці.

    Підсумок: типи SSH-тунелів у короткому огляді

    ФункціяЛокальний (`-L`)Віддалений (`-R`)Динамічний (`-D`)
    НапрямокЛокальний → ВіддаленийВіддалений → ЛокальнийЛокальний → Будь-який
    Сценарій використанняДоступ до віддалених сервісів локальноВідкриття локальних сервісів віддаленоПовний SOCKS-проксі
    Місце призначенняФіксований host:portФіксований host:portБудь-яке місце призначення
    Тип проксіПеренаправлення TCP-портуПеренаправлення TCP-портуSOCKS4/5
    Найкраще дляДоступ до баз даних, внутрішні інструментиСпільний доступ для розробки, обхід NATБезпечний перегляд, обхід обмежень

    Висновок: опануйте SSH-тунелювання для безпечного та гнучкого віддаленого доступу

    SSH-тунелювання — одна з найпотужніших і недооцінених функцій протоколу SSH. Однією командою ви можете:

    • Безпечно отримувати доступ до віддалених баз даних та внутрішніх сервісів без відкриття портів в інтернет
    • Миттєво ділитися локальними середовищами розробки з віддаленими колегами
    • Шифрувати весь інтернет-трафік через надійний SOCKS-проксі
    • Обходити обмежувальні брандмауери у корпоративних або публічних мережах
    • Створювати постійні, автоматизовані тунельні сервіси за допомогою systemd

    Ключем до надійного SSH-тунелювання є стабільний, високопродуктивний сервер для закріплення ваших з’єднань. Плани VPS Хостингу AlexHost забезпечують повний root-доступ, продуктивність NVMe, захист від DDoS та гарантії доступності, яких вимагають інтенсивні тунельні навантаження — за конкурентними цінами з інфраструктурою, що ставить конфіденційність на перше місце.

    Починайте впроваджувати SSH-тунелі сьогодні та трансформуйте спосіб керування безпечним віддаленим доступом у всій вашій інфраструктурі.

    *Маєте запитання щодо налаштування SSH-тунелів на серверах AlexHost? Наша команда технічної підтримки доступна 24/7, щоб допомогти вам налаштувати все необхідне.*

    15%

    Збережіть 15% на всі хостинг-послуги

    Перевірте свої навички і отримайте Знижку на будь-який план хостингу

    Використовуй код:

    Skills
    Почати