Туннелирование SSH (также называемое перенаправлением портов SSH) - это простая маршрутизация трафика локальной сети через SSH на удаленные узлы. Это подразумевает, что все ваши соединения защищены с помощью шифрования. Это обеспечивает простой способ настройки базовой VPN (виртуальной частной сети), полезной для подключения к частным сетям через небезопасные публичные сети, такие как Интернет.
Также может использоваться для вывода локальных серверов за NAT и брандмауэрами в Интернет через защищенные туннели, как это реализовано в ngrok.
Как создать ssh туннель в Putty и использовать его в качестве socks-прокси
Сессии SSH по умолчанию позволяют туннелировать сетевые соединения, и существует три типа проброса портов SSH: локальный, удаленный и динамический проброс портов.
В этой статье мы покажем, как быстро и легко настроить туннелирование SSH или различные типы проброса портов в Linux.
Локальная переадресация портов SSH
Этот тип перенаправления портов позволяет вам подключаться с локального компьютера к удаленному серверу. Предположим, что вы находитесь за ограничительным брандмауэром или заблокированы исходящим брандмауэром от доступа к приложению, работающему на порту 3000 на удаленном сервере.
Вы можете перенаправить локальный порт (например, 8080), который затем можно использовать для локального доступа к приложению следующим образом. Флаг -L определяет порт, перенаправляемый на удаленный хост и удаленный порт.
1 | ssh admin@server1.example.com -L 8080:server1.example.com:3000 |
Добавление флага -N означает не выполнять удаленную команду, в этом случае вы не получите оболочку.
1 | ssh -N admin@server1.example.com -L 8080:server1.example.com:3000 |
Переключатель -f указывает ssh работать в фоновом режиме.
1 | ssh -f -N admin@server1.example.com -L 8080:server1.example.com:3000 |
Теперь на локальной машине откройте браузер, вместо доступа к удаленному приложению, используя адрес server1.example.com:3000, вы можете просто использовать localhost:8080 или [IP]:8080.
Удаленная переадресация портов SSH
Удаленная переадресация портов позволяет вам подключаться с удаленной машины к локальному компьютеру. По умолчанию SSH не разрешает удаленную переадресацию портов. Вы можете разрешить это с помощью директивы GatewayPorts в главном конфигурационном файле SSHD /etc/ssh/sshd_config на удаленном хосте.
Откройте файл для редактирования с помощью вашего любимого редактора командной строки.
1 | sudo nano /etc/ssh/sshd_config |
Найдите необходимую директиву, раскомментируйте ее и установите значение yes.
1 | GatewayPorts yes |
Сохраните изменения и выйдите. Далее необходимо перезапустить sshd, чтобы применить последние изменения, которые вы сделали.
1 | sudo systemctl restart sshd |
ИЛИ
1 | sudo service sshd restart |
Далее выполните следующую команду, чтобы перенаправить порт 5000 на удаленной машине на порт 3000 на локальной машине.
1 | ssh -f -N admin@server1.example.com -R 5000:localhost:3000 |
Как только вы поймете этот метод туннелирования, вы сможете легко и безопасно открыть локальный сервер разработки, особенно за NAT и брандмауэрами, для выхода в Интернет через безопасные туннели. Такие туннели, как Ngrok, pagekite, localtunnel и многие другие, работают аналогичным образом.
Динамическая переадресация портов SSH
Это третий тип перенаправления портов. В отличие от локальной и удаленной переадресации портов, которая позволяет взаимодействовать с одним портом, она делает возможным полный спектр TCP-коммуникаций через ряд портов. Динамическая проброска портов устанавливает ваш компьютер в качестве прокси-сервера SOCKS, который по умолчанию прослушивает порт 1080.
Для начала, SOCKS - это интернет-протокол, который определяет, как клиент может подключиться к серверу через прокси-сервер (в данном случае SSH). Вы можете включить динамическое перенаправление портов с помощью опции -D.
Следующая команда запустит SOCKS-прокси на порту 1080, что позволит вам подключиться к удаленному хосту.
1 | ssh -f -N -D 1080 admin@server1.example.com |
Теперь вы можете заставить приложения на вашей машине использовать этот SSH прокси-сервер, отредактировав их настройки и настроив их на его использование для подключения к вашему удаленному серверу. Обратите внимание, что SOCKS-прокси-сервер перестанет работать после того, как вы закроете сеанс SSH.
Заключение
В этой статье мы объяснили различные типы проброса портов с одной машины на другую для туннелирования трафика через защищенное SSH-соединение. Это одно из очень многих применений SSH. Вы можете добавить свой голос к этому руководству через форму обратной связи ниже.
Проброс портов SSH имеет ряд существенных недостатков, им можно злоупотреблять: его можно использовать для обхода программ сетевого мониторинга и фильтрации трафика (или брандмауэров). Злоумышленники могут использовать его для вредоносных действий. В нашей следующей статье мы расскажем, как отключить проброс локальных портов SSH. Оставайтесь на связи!