SSH Port forwarding

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 — на удалённом сервере запускает обратный туннель, чтобы от туда стало возможно подключаться к локальному серверу.



2021-03-01T13:31:28
Администрирование Linux