Как настроить туннелирование SSH (переадресация портов) в Linux

12 set 2022 5 min di lettura
Как настроить туннелирование SSH (переадресация портов) в Linux
Indice dei contenuti

Введение

Туннелирование SSH или перенаправление портов SSH — это метод создания зашифрованного соединения SSH между клиентом и сервером, через которое можно перенаправлять служебные порты.

Пересылка SSH полезна для передачи сетевых данных служб, которые используют незашифрованный протокол, такой как VNC или FTP, получают доступ к содержимому с географическим ограничением или обходят промежуточные брандмауэры. По сути, вы можете перенаправлять любой порт TCP и туннелировать трафик через безопасное соединение SSH.

Существует три типа перенаправления портов SSH:

  • Локальная переадресация портов (локальная). - Перенаправляет соединение с хоста клиента на хост сервера SSH, а затем на порт хоста назначения.
  • Удаленная переадресация портов (удаленная). - Перенаправляет порт с хоста сервера на хост клиента, а затем на порт целевого хоста.
  • Динамическая переадресация портов (динамическая). - Создайте прокси-сервер SOCKS, который позволяет обмениваться данными через ряд портов.

В этой статье мы поговорим о том, как настроить локальные, удаленные и динамически зашифрованные SSH-туннели.

Переадресация локального порта

Переадресация локального порта позволяет перенаправить порт на локальном компьютере (ssh-клиент) на порт на удаленном компьютере (ssh-сервер), который затем перенаправляется на порт на целевом компьютере.

В этом типе переадресации клиент SSH прослушивает заданный порт и туннелирует любое соединение с этим портом через указанный порт на удаленном сервере SSH, который затем подключается к порту на целевом компьютере. Целевой машиной может быть удаленный сервер SSH или любая другая машина.

Переадресация локального порта в основном используется для подключения к удаленной службе во внутренней сети, такой как база данных или сервер VNC.

В Linux, macOS и других системах Unix для создания локальной переадресации портов используйте параметр -L для клиента ssh:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Используемые варианты следующие:

  • [LOCAL_IP:]LOCAL_PORT — IP-адрес локальной машины и номер порта. Когда LOCAL_IP опущен, клиент ssh подключается к локальному хосту.
  • DESTINATION:DESTINATION_PORT — IP-адрес или имя хоста и порт целевой машины.
  • [USER@]SERVER_IP — удаленный пользователь SSH и IP-адрес сервера.

Любой номер порта больше 1024 может использоваться как LOCAL_PORT. Порты с номером меньше 1024 являются привилегированными портами и могут использоваться только пользователем root. Если сервер SSH прослушивает порт, отличный от 22 (по умолчанию), используйте параметр -p [PORT_NUMBER].

Целевое имя хоста должно разрешаться сервером SSH.

Допустим, у вас есть сервер базы данных MySQL, работающий на компьютере db001.host во внутренней (частной) сети, на порту 3306, который доступен с компьютера pub001.host, и вы хотите подключиться с помощью клиента mysql локального компьютера к серверу базы данных.. Для этого вы можете перенаправить соединение следующим образом:

ssh -L 3336:db001.host:3306 [email protected]

После выполнения команды вам будет предложено ввести пароль удаленного пользователя SSH. После его ввода будет осуществлен доступ к удаленному серверу и будет установлен SSH-туннель. Рекомендуется настроить аутентификацию на основе ключей SSH и подключаться к серверу без ввода пароля.

Теперь, если вы укажете на клиент базы данных локальной машины 127.0.0.1:3336, соединение будет перенаправлено на сервер MySQL db001.host:3306 через машину pub001.host, которая будет действовать как промежуточный сервер.

Несколько портов можно перенаправить на несколько пунктов назначения с помощью одной команды ssh. Например, у вас есть еще один сервер базы данных MySQL, работающий на машине db002.host, и вы хотите подключиться к обоим серверам с вашего локального клиента, который вы бы запустили:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]

Для подключения ко второму серверу мы будем использовать 127.0.0.1:3337.

Когда целевой хост равен SSH-серверу, вместо указания IP-адреса хоста или имени целевого хоста вы можете использовать localhost.

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

ssh -L 5901:127.0.0.1:5901 -N -f [email protected]

Опция -f указывает команде ssh выполняться в фоновом режиме, а -N не запускать удаленную команду. Мы используем localhost, потому что VNC и SSH-сервер работают на одном хосте.

Если у вас возникли проблемы с настройкой туннелирования, проверьте конфигурацию удаленного SSH-сервера и убедитесь, что AllowTcpForwarding не присвоено значение no. По умолчанию переадресация разрешена.

Переадресация удаленного порта

Переадресация удаленного порта противоположна переадресации локального порта. Позволяет перенаправить порт на удаленном компьютере (ssh-сервере) на порт на локальном компьютере (ssh-клиент), который затем перенаправляется на порт на целевом компьютере.

В этом типе переадресации сервер SSH прослушивает заданный порт и туннелирует любое соединение с этим портом через указанный порт на локальном клиенте SSH, который затем подключается к порту на целевом компьютере. Целевой машиной может быть локальная машина или любая другая машина.

В Linux, macOS и других системах Unix используйте параметр -R с командой ssh для создания переадресации портов:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Используемые варианты следующие:

  • [REMOTE:]REMOTE_PORT — IP-адрес и номер порта на удаленном сервере SSH. REMOTE указывает, что удаленный сервер SSH будет подключаться ко всем интерфейсам.
  • DESTINATION:DESTINATION_PORT — IP-адрес или имя хоста и порт целевой машины.
  • [USER@]SERVER_IP — удаленный пользователь SSH и IP-адрес сервера.

Перенаправление локальных портов в основном используется для предоставления кому-то извне доступа к внутренней службе.

Допустим, вы разрабатываете веб-приложение на своем локальном компьютере и хотите показать предварительный просмотр своим коллегам-разработчикам. У вас нет общедоступного IP-адреса, поэтому другой разработчик не может получить доступ к приложению через Интернет.

Если у вас есть доступ к удаленному SSH-серверу, вы можете настроить переадресацию удаленного порта следующим образом:

ssh -L 8080:127.0.0.1:3000 -N -f [email protected]

Приведенная выше команда заставит ssh-сервер прослушивать порт 8080 и туннелировать весь трафик с этого порта на ваш локальный компьютер через порт 3000.

Теперь ваши коллеги-разработчики могут ввести the_ssh_server_ip:8080 в свой браузер и просмотреть ваше приложение.

Если у вас возникли проблемы с настройкой перенаправления удаленных портов, убедитесь, что GatewayPorts установлено значение yes в конфигурации удаленного SSH-сервера.

Динамическая переадресация портов

Динамическая переадресация портов позволяет создать сокет на локальном компьютере (клиент ssh), который действует как прокси-сервер SOCKS. Когда клиент подключается к этому порту, соединение перенаправляется на удаленный компьютер (ssh-сервер), который затем перенаправляется на динамический порт на целевом компьютере.

Таким образом, все приложения, использующие прокси-сервер SOCKS, будут подключаться к серверу SSH, и сервер будет перенаправлять весь трафик в его фактическое место назначения.

В Linux, macOS и других системах Unix для создания динамической переадресации портов (SOCKS) передайте параметр -D клиенту ssh:

ssh -R [LOCAL_IP:]LOCAL_PORT [USER@]SSH_SERVER

Используемые варианты следующие:

  • [LOCAL_IP:]LOCAL_PORT — IP-адрес локальной машины и номер порта. Когда LOCAL_IP опущен, клиент ssh подключается к локальному хосту.
  • [USER@]SERVER_IP — удаленный пользователь SSH и IP-адрес сервера.

Типичным примером динамической переадресации портов является туннелирование трафика веб-браузера через SSH-сервер.

Следующая команда создаст туннель SOCKS на порту 9090:

ssh -D 9090 -N -f [email protected]

После того, как туннелирование установлено, вы можете настроить приложение для его использования.

Переадресация портов должна быть настроена отдельно для каждого приложения, чей трафик вы хотите туннелировать.

Настройка туннелирования SSH в Windows

Пользователи Windows могут создавать туннели SSH с помощью клиента PuTTY SSH. Скачать PuTTY можно здесь.

Запустите Putty и введите IP-адрес SSH-сервера в поле Host name (or IP address).

В меню Connection разверните SSH и выберите Tunnels. Установите переключатель « Local, чтобы настроить локальный, « Remote » для удаленного и « Dynamic » для динамической переадресации портов.

  • Если вы настроили локальную переадресацию, введите локальный порт переадресации в поле « Source Port » и введите IP-адрес узла и назначения в поле « Destination », например, localhost:5901.
  • Для переадресации удаленного порта введите порт переадресации удаленного SSH-сервера в поле « Source Port », а в поле « Destination » введите хост и IP-адрес назначения, например, localhost:3000.
  • Если вы настроили динамическую переадресацию, введите только локальный порт SOCKS в поле Source Port.

Нажмите кнопку « Add ».

Вернитесь на страницу Session, чтобы сохранить настройки и не вводить их каждый раз. Введите имя сеанса в поле « Saved Session » и нажмите кнопку « Save ».

Выберите сохраненный сеанс и войдите на удаленный сервер, нажав кнопку « Open ».

Появится новое окно с запросом вашего имени пользователя и пароля. После ввода имени пользователя и пароля вы войдете на сервер и запустите SSH-туннель.

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

Вывод

Мы показали вам, как настроить туннели SSH и перенаправить трафик через безопасное соединение SSH.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.