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

SSH-туннелирование / переадресация портов SSH

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

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

Существует три типа переадресации портов SSH:

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

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

Локальная переадресация портов

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

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

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

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

 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 — IP-адрес удаленного пользователя SSH и сервера.

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

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

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

 ssh -L 3336:db001.host:3306 user@pub001.host

После выполнения команды вам будет предложено ввести пароль пользователя удалённого 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 user@pub001.host

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

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

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

 ssh -L 5901:127.0.0.1:5901 -N -f user@remote.host

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

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

Удаленная переадресация портов

Удалённая переадресация портов — это противоположность локальной переадресации портов. Она позволяет перенаправить порт на удалённой машине (SSH-сервер) на порт на локальной машине (SSH-клиент), который затем перенаправляется на порт на целевой машине.

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

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

 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 — IP-адрес удаленного пользователя SSH и сервера.

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

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

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

 ssh -R 8080:127.0.0.1:3000 -N -f user@remote.host

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

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

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

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

Динамическая переадресация портов позволяет создать сокет на локальной машине (SSH-клиенте), который будет выполнять функции SOCKS-прокси-сервера. При подключении клиента к этому порту соединение перенаправляется на удалённую машину (SSH-сервер), которая затем перенаправляется на динамический порт на машине назначения.

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

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

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

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

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

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

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

 ssh -D 9090 -N -f user@remote.host

После настройки туннелирования вы можете настроить приложение для его использования. В этой статье объясняется, как настроить браузеры Firefox и Google Chrome для использования SOCKS-прокси.

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

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

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

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

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

    • При настройке локальной пересылки введите локальный порт пересылки в поле Source Port , а в Destination введите хост и IP-адрес назначения, например, localhost:5901 .
    • Для удаленной переадресации портов введите порт переадресации удаленного сервера SSH в поле Source Port , а в Destination введите хост назначения и IP-адрес, например, localhost:3000 .
    • При настройке динамической пересылки введите в поле Source Port только локальный порт SOCKS.
    Настроить Tunnel Putty
  3. Нажмите кнопку Add , как показано на рисунке ниже.

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

    Сохранить сеанс Putty
  5. Выберите сохраненный сеанс и войдите на удаленный сервер, нажав кнопку Open .

    Открытый сеанс Putty

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

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

Заключение

Мы показали вам, как настроить SSH-туннели и перенаправить трафик через защищённое SSH-соединение. Для удобства вы можете определить SSH-туннель в файле конфигурации SSH или создать псевдоним Bash , который будет настраивать SSH-туннель.

Если у вас возникла проблема или вы хотите оставить отзыв, оставьте комментарий ниже.

безопасность SSH

Связанные руководства

Источник

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

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