SSH обычно используют для удалённого входа на сервер. Но у этого протокола есть ещё одна важная возможность: проброс портов. С его помощью можно безопасно подключаться к сервисам, которые не доступны напрямую из интернета, или защищать нешифрованный трафик.
В этой статье разберёмся, что такое SSH-перенаправление портов, какие бывают его виды и как использовать его на практике.
Что такое проброс портов через SSH
Проброс портов через SSH позволяет перенаправлять сетевой трафик через защищённое SSH-соединение. Проще говоря, вы создаёте зашифрованный туннель между двумя машинами и передаёте через него данные к нужному сервису.
Это удобно в трёх основных случаях:
нужно получить доступ к внутреннему сервису, который не открыт наружу;
требуется защитить небезопасный протокол шифрованием;
необходимо организовать промежуточный доступ через удалённый сервер.
Существует три типа SSH-перенаправления:
локальное;
удалённое;
динамическое.
Разберём каждый вариант отдельно.
Локальный проброс портов
Локальный проброс используют чаще всего. Он позволяет подключаться к сервису на удалённой машине так, будто он работает у вас локально.
Как это работает
Вы подключаетесь к удалённому серверу по SSH и создаёте туннель. Любой трафик, который вы отправляете на определённый порт на своей машине, будет автоматически перенаправлен на нужный порт удалённого сервера.
Синтаксис команды:
ssh -L локальный_порт:удалённый_хост:удалённый_порт пользователь@ssh_сервер
Пример: доступ к удалённой базе данных
Предположим, база данных MySQL работает на сервере и слушает порт 3306, но доступна только изнутри сети. Вы можете создать туннель:
ssh -L 3307:localhost:3306 user@remote_server
Что происходит:
на вашей машине открывается порт 3307;
всё, что отправляется на localhost:3307, идёт через SSH;
сервер перенаправляет трафик на localhost:3306.
Теперь можно подключиться к базе так:
mysql -h 127.0.0.1 -P 3307 -u dbuser -pС точки зрения клиента база работает локально, но фактически соединение проходит через защищённый туннель.
Пример: доступ к веб-приложению
Если на сервере запущено веб-приложение на порту 8000:
ssh -L 8080:localhost:8000 user@remote_serverПосле подключения вы сможете открыть в браузере:
http://localhost:8080И увидеть удалённое приложение.
Удалённый проброс портов
Удалённый проброс работает в обратную сторону. Он позволяет открыть доступ к локальному сервису через удалённый сервер.
Синтаксис:
ssh -R удалённый_порт:локальный_хост:локальный_порт пользователь@ssh_серверПример: публикация локального веб-сервера
Допустим, у вас на компьютере запущен сервер на порту 3000. Нужно временно дать к нему доступ через удалённый VPS.
Команда:
ssh -R 9000:localhost:3000 user@remote_serverТеперь любой, кто подключится к remote_server:9000, попадёт на ваш локальный порт 3000.
Это удобно для демонстрации проектов, тестирования webhook-уведомлений или отладки интеграций.
Важно учитывать настройки SSH-сервера. Параметр GatewayPorts может ограничивать доступ к проброшенным портам.
Динамический проброс портов
Динамический проброс превращает SSH в SOCKS-прокси. Вместо привязки к конкретному сервису вы создаёте универсальный туннель.
Команда:
ssh -D 1080 user@remote_serverПосле этого на вашей машине появится SOCKS-прокси на порту 1080.
В настройках браузера можно указать:
тип прокси: SOCKS5
адрес: 127.0.0.1
порт: 1080
Весь трафик браузера будет идти через SSH-сервер.
Это полезно:
для безопасного доступа к интернету из небезопасной сети;
для обхода сетевых ограничений;
для тестирования приложений из другой географии.
Дополнительные параметры
Запуск в фоновом режиме
Чтобы не держать терминал открытым:
ssh -f -N -L 8080:localhost:8000 user@remote_serverОпции означают:
-N не выполнять удалённые команды;
-f отправить процесс в фон.
Проверка занятых портов
Перед созданием туннеля стоит убедиться, что порт свободен:
lsof -i :8080или
netstat -tulnp | grep 8080Безопасность и ограничения
Хотя SSH-туннели шифруют трафик, важно помнить:
доступ к серверу должен быть защищён ключами, а не паролем;
стоит ограничить права пользователей;
желательно отключить ненужные типы проброса в конфигурации sshd.
Также нужно понимать, что туннель существует только пока активно SSH-соединение. Если оно разорвётся, доступ пропадёт.
Когда стоит использовать SSH-туннелирование
Проброс портов через SSH особенно полезен:
при администрировании серверов;
при работе с базами данных;
для временного доступа к внутренним сервисам;
при разработке и тестировании интеграций.
Это простой и надёжный инструмент, который часто заменяет более сложные решения вроде VPN, если задача локальная и временная.