
Цель урока: Понять, что такое SSH-туннелирование (или "проброс портов"), и научиться использовать его для безопасного доступа к сервисам, которые не должны быть доступны всему интернету. Мы разберем самый частый и полезный сценарий - локальный проброс портов.
Часть 1: Теория. Что такое SSH-туннель и зачем он нужен?
Представьте, что на вашем сервере работает какой-то сервис. Например, база данных, которая слушает порт 3306.
-
Опасный путь: Вы можете открыть порт 3306 в файерволе (ufw allow 3306), чтобы подключаться к базе данных со своего домашнего компьютера.
-
Проблема: Теперь весь интернет видит ваш открытый порт. Любой злоумышленник может начать подбирать пароль к вашей базе данных (атака брутфорс). Это очень небезопасно.
-
-
Безопасный путь (SSH-туннель): Вы оставляете порт 3306 закрытым в файерволе. Он доступен только "изнутри" самого сервера. А для доступа с вашего компьютера вы строите безопасный, зашифрованный туннель прямо внутрь вашего сервера через уже открытый и защищенный 22-й порт (SSH).
Аналогия:
Представьте, что ваш сервер - это неприступный замок.
-
База данных - это сокровищница внутри замка.
-
Открывать порт 3306 - это как прорубить в стене замка дополнительную дверь прямо в сокровищницу и повесить на нее обычный замок.
-
SSH-туннель - это как использовать уже существующий, главный и надежно охраняемый вход (порт 22), чтобы провести от него секретный, невидимый снаружи коридор прямо до сокровищницы.
Локальный проброс портов работает по принципу: "Все, что приходит на порт на моем локальном компьютере, нужно безопасно перенаправить через SSH-туннель на порт на удаленном сервере".
Часть 2: Практика. Настраиваем локальный проброс портов
Давайте создадим практический сценарий. Мы установим на наш сервер веб-сервер Nginx, но настроим его так, чтобы он работал на порту 8080 и был доступен только изнутри сервера. А затем мы получим к нему доступ с нашего домашнего компьютера через SSH-туннель.
Шаг 1: Настройка сервиса на сервере
Подключитесь к вашему серверу по SSH, как обычно.
-
Установим Nginx:
# (Напоминаю, что мы работаем от root, sudo не нужен) apt update apt install nginx -
Изменим порт по умолчанию:
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 открыт в файерволе!
-
-
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
-
Перезапустите Nginx, чтобы применить изменения:
systemctl restart nginx -
Проверьте, что все работает. Используем 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: Проверка доступа
Теперь, не закрывая окно с туннелем:
-
Откройте веб-браузер на вашем локальном компьютере.
-
В адресной строке введите: 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

