SSH позволяет не только осуществлять подключение к командной строке, он также позволяет пробрасывать порты, это называется Port forwarding.

Особенности

Проброс портов поверх ssh можно использовать для:

  • передачи и редактирования файлов;
  • запуска утилит командной строки или графических приложений;
  • передачи паролей;
  • создания резервных копий;
  • и другого.

Так как ssh шифрует соединение, вы можете использовать его в небезопасных местах. Например, при подключении к общественной точке доступа wi-fi.

SSH Port Forwarding работает только в одном направлении. То есть используя ваше подключение к удалённому серверу, к вам подключиться не получится. Для решения этой проблемы можно настроить обратный ssh туннель.

Ещё одной особенностью является то что он работает только с TCP-пакетами.

Поднятие socs5

Вы можете создать linux сервер и позволить подключаться к нему из интернета, используя проброс портов. Дальше через этот сервер ( назовём его ssh-proxy) вы сможете подключаться к другим серверам из интернета. Главное чтобы в локальной сети ssh-proxy имел доступ к этим серверам.

ssh-port-forwarding-socs5

Для подключения к ssh-proxy с поднятием прокси выполним такую команду:

$ ssh -D 8080 <user>@<ip_ssh_proxy> -p <port_ssh_proxy>

Посмотрим что у нас получилось:

$ netstat -pan | grep 8080
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      8354/ssh            
tcp6       0      0 ::1:8080                :::*                    LISTEN      8354/ssh

Команда выше показывает что служба слушает только localhost, ниже я покажу как слушать любые интерфейсы.

Теперь вы можете настроить socs5 proxy для вашего браузера используя 127.0.0.1:8080. Внутренние сайты и web-админки доступные только из офиса начнут открываться.

Чтобы служба вместо localhost слушала и другие интерфейсы можно воспользоваться такой командой:

$ ssh -D 0.0.0.0:8080 <user>@<ip_ssh_proxy> -p <port_ssh_proxy>
$ netstat -pan | grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      10099/ssh           

Проброс локального порта

ssh-local-port-forwarding

Чтобы не настраивать proxy в браузере можно осуществить проброс локального порта на удалённый сервер следующей командой:

$ ssh -L <local_port>:<remote_ip>:<remote_port> <user>@<ip_ssh_proxy> -p <port_ssh_proxy>

После чего сможете подключиться к удалённому серверу используя ip-адрес 127.0.0.1 и локальный порт. Подключиться вы сможете не только по http/https, но и например по rdp и другим протоколам работающим поверх tcp.

Обратный SSH туннель

Предполагается что к удаленному компьютеру нельзя подключиться по ssh через интернет. А к локальному удалённый компьютер подключиться может, так как на роутере проброшен порт для ssh.

reverse-ssh-tunneling

Вы просите чтобы кто-нибудь на удалённом компьютере подключился к вашему серверу используя следующую команду, или выполняете её каким-то способом сами (например, подключившись по AnyDesk или TeamViewer):

$ ssh -R 9999:127.0.0.1:22 <user>@<host> -p <port>

После такого подключения к локальному серверу, он начинает слушать порт 9999 на localhost.

Дальше вы с этого сервера можете подключиться к удалённому серверу используя команду:

$ ssh <user>@localhost -p 9999

Итог

ssh -L — открывает локальный порт. Все, что вы отправляете на этот порт, проходит через ssh-соединение и уходит на сервер.

ssh -D — открывает локальный порт, но у него нет конкретной конечной точки. Вместо этого он выдает себя за прокси-сервер SOCKS.

ssh -R — на удалённом сервере запускает обратный туннель, чтобы от туда стало возможно подключаться к локальному серверу.

Сводка
SSH - Port forwarding
Имя статьи
SSH - Port forwarding
Описание
Протокол SSH позволяет не только осуществлять подключение к командной строке, он также позволяет пробрасывать порты. Рассмотрим как это работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *