Цель урока: Понять, что такое SSH-туннелирование (или "проброс портов"), и научиться использовать его для безопасного доступа к сервисам, которые не должны быть доступны всему интернету. Мы разберем самый частый и полезный сценарий - локальный проброс портов.

Часть 1: Теория. Что такое SSH-туннель и зачем он нужен?

Представьте, что на вашем сервере работает какой-то сервис. Например, база данных, которая слушает порт 3306.

  • Опасный путь: Вы можете открыть порт 3306 в файерволе (ufw allow 3306), чтобы подключаться к базе данных со своего домашнего компьютера.

    • Проблема: Теперь весь интернет видит ваш открытый порт. Любой злоумышленник может начать подбирать пароль к вашей базе данных (атака брутфорс). Это очень небезопасно.

  • Безопасный путь (SSH-туннель): Вы оставляете порт 3306 закрытым в файерволе. Он доступен только "изнутри" самого сервера. А для доступа с вашего компьютера вы строите безопасный, зашифрованный туннель прямо внутрь вашего сервера через уже открытый и защищенный 22-й порт (SSH).

Аналогия:
Представьте, что ваш сервер - это неприступный замок.

  • База данных - это сокровищница внутри замка.

  • Открывать порт 3306 - это как прорубить в стене замка дополнительную дверь прямо в сокровищницу и повесить на нее обычный замок.

  • SSH-туннель - это как использовать уже существующий, главный и надежно охраняемый вход (порт 22), чтобы провести от него секретный, невидимый снаружи коридор прямо до сокровищницы.

Локальный проброс портов работает по принципу: "Все, что приходит на порт на моем локальном компьютере, нужно безопасно перенаправить через SSH-туннель на порт на удаленном сервере".

Часть 2: Практика. Настраиваем локальный проброс портов

Давайте создадим практический сценарий. Мы установим на наш сервер веб-сервер Nginx, но настроим его так, чтобы он работал на порту 8080 и был доступен только изнутри сервера. А затем мы получим к нему доступ с нашего домашнего компьютера через SSH-туннель.

Шаг 1: Настройка сервиса на сервере
Подключитесь к вашему серверу по SSH, как обычно.

  1. Установим Nginx:

    # (Напоминаю, что мы работаем от root, sudo не нужен)
    apt update
    apt install nginx
  2. Изменим порт по умолчанию:
    Nginx по умолчанию слушает порт 80. Давайте изменим его на 8080.

    # Открываем конфигурационный файл Nginx в редакторе nano
    nano /etc/nginx/sites-available/default

    Найдите строки (используйте Ctrl+W для поиска listen):

    listen 80 default_server;
    listen [::]:80 default_server;

    И измените их, добавив 127.0.0.1: в начало и поменяв порт на 8080:

    listen 127.0.0.1:8080 default_server;
    listen [::1]:8080 default_server;
    • 127.0.0.1 - это IP-адрес localhost. Теперь Nginx будет слушать порт 8080 только на внутреннем интерфейсе. Он не будет виден из интернета, даже если порт 8080 открыт в файерволе!

  3. Сохраните файл (Ctrl+OEnter) и выйдите (Ctrl+X).

  4. Перезапустите Nginx, чтобы применить изменения:

    systemctl restart nginx
  5. Проверьте, что все работает. Используем ss (напоминаю, -tulpn показывает слушающие порты):

    ss -tulpn | grep nginx

    Вы должны увидеть, что nginx слушает именно 127.0.0.1:8080.

Шаг 2: Создание SSH-туннеля (с вашего локального компьютера)

Теперь самое интересное. Откройте новый терминал на вашем локальном компьютере. Не на сервере!

Синтаксис для создания туннеля:

ssh -L [ЛОКАЛЬНЫЙ_ПОРТ]:[ЦЕЛЕВОЙ_ХОСТ]:[ЦЕЛЕВОЙ_ПОРТ] [ПОЛЬЗОВАТЕЛЬ]@[IP_СЕРВЕРА]
  • -L: Ключ, означающий локальный проброс.

  • [ЛОКАЛЬНЫЙ_ПОРТ]: Номер порта на вашем компьютере, который вы будете "слушать". Давайте выберем 8888.

  • [ЦЕЛЕВОЙ_ХОСТ]: Хост, к которому нужно подключиться относительно сервера. Так как Nginx работает на самом сервере, мы указываем localhost или 127.0.0.1.

  • [ЦЕЛЕВОЙ_ПОРТ]: Порт, на котором работает наш сервис на сервере. В нашем случае это 8080.

  • [ПОЛЬЗОВАТЕЛЬ]@[IP_СЕРВЕРА]: Ваши обычные данные для SSH-подключения.

Наша команда:

ssh -L 8888:localhost:8080 root@ВАШ_IP_СЕРВЕРА

Выполните эту команду. Вы войдете на свой сервер по SSH, как обычно. Но это не просто сессия! Пока это окно терминала открыто, ваш SSH-туннель активен.

Шаг 3: Проверка доступа

Теперь, не закрывая окно с туннелем:

  1. Откройте веб-браузер на вашем локальном компьютере.

  2. В адресной строке введите: http://localhost:8888

Что произойдет:

  • Ваш браузер отправит запрос на порт 8888 вашего же компьютера.

  • SSH-клиент, который "слушает" этот порт, перехватит запрос.

  • Он зашифрует его и отправит по безопасному SSH-соединению на ваш сервер.

  • SSH-сервер расшифрует запрос и перенаправит его на localhost:8080, то есть, на ваш Nginx.

  • Nginx ответит, и ответ пройдет тот же путь в обратном порядке.

В результате вы увидите в своем браузере приветственную страницу Nginx "Welcome to nginx!", хотя сам веб-сервер абсолютно не доступен из интернета. Вы получили к нему безопасный доступ через туннель.

Чтобы закрыть туннель, просто закройте окно терминала, в котором вы его создали.

Часть 3: Заключение

Сегодня мы освоили мощную и элегантную технику - SSH-туннелирование. Вы научились:

  • Понимать, почему выставлять сервисы (вроде баз данных) напрямую в интернет - это плохая идея.

  • Использовать локальный проброс портов (ssh -L ...) для создания безопасного "коридора" к внутренним сервисам вашего сервера.

  • Настраивать сервисы (на примере Nginx) так, чтобы они слушали только localhost, делая их невидимыми для внешнего мира.

Этот навык абсолютно необходим для безопасной работы с базами данных, панелями управления (например, phpMyAdmin) и любыми другими сервисами, доступ к которым должен быть только у вас.

На следующем, 40-м уроке, мы перейдем к теме, которая является основой безопасности всего современного веба - SSL/TLS. Мы разберемся, как работают HTTPS и шифрование, что такое сертификаты и центры сертификации, чтобы подготовиться к защите наших будущих сайтов.

Перейти к просмотру - УРОК №40.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи считают это полезным (0 голосов)