Главная arrow Администрирование arrow Безопасность arrow OpenSSH - перенаправление портов через туннель Wednesday, September 20 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

OpenSSH - перенаправление портов через туннель Версия для печати
Написал microsin   
09.01.2008
Кроме защиты протоколов ftp, telnet и защищенного копирования файлов, сервер SSH предоставляет удобную возможность - перенаправление портов через защищенный туннель.

Рассмотрим эту возможность на примере удаленного подключения к RDP-порту через защищенный туннель. В этом примере предполагается, что сервер OpenSSH и сервер RDP работают на одном и том же компьютере (хотя в общем случае это и не обязательно), а туннель инициируем SSH-клиентом putty. Процесс по шагам:

1. Как устанавливается сервер SSH описано здесь. Далее удостоверяемся, что на сервере SSH включена возможность перенаправления портов. Для этого открываем конфиг сервера %ProgramFiles%\OpenSSH\etc\sshd_config, и ищем строку AllowTcpForwarding yes - она должна быть раскомментирована (коментарий начинается с символа #). Если раскомментировали (или поменяли с no на yes), то перезапускаем службу сервера OpenSSH. На сервере на этом работы завершены, все остальное делается на клиенте (putty).
2. Запускаем putty, настраиваем сессию. Все как обычно - жмем правой кнопкой на верхней плашке окна putty, выбираем "New session...", с категории Session указываем IP или имя сервера FreeBSD, протокол SSH, в окне ввода "Saved Sessions" указываем произвольное имя сессии. Переходим в категорию Connection\Data, указываем в окне вввода "Auto-login username" имя пользователя, под которым будем логиниться. Если для аутентификации используем ключи, то переходим в категорию Connection\SSH\Auth, указываем секретный ключ для аутентификации - рядом с окном "Private key file for authentication:" жмем кнопу "Browse..." и выбираем файл секретного ключа, который был сгенерирован программой puttygen.exe (как это делается, описано здесь). Переходим в раздел Connection\SSH\Tunnels, в Source port вводим 3390, в Destination вводим localhost:3389, жмем кнопку Add. Если поставить галочку "Local ports accept connections from other hosts", то туннелируемый порт (то, что ввели в Source port) будет доступен для коннекта не только на машине с putty, но и с другой машины. В итоге должно получиться нечто, показанное на картинке (в этом примере сделаны туннели для RDP 3389 -> 3390 и для radmin 4899 -> 4890):
Image
Снова переходим в категорию Session, жмем кнопку Save.
3. Запускаем сессию, нажав на кнопку Open. После прохождения аутентификации (либо по паролю, либо автоматически) запустится обычная консоль telnet - можно вводить команды интерпретатора cmd, и они будут выполняться. Но нас интересует не это - на локальной машине, где запущена сессия, должен открыться локальный порт 3390 (это мы ввели в Source port, можно использовать любой свободный на локальной машине клиента порт), который "проброшен" на сервер SSH по адресу localhost, порт 3389 (это мы задали в Destination). Теперь можно на локальной машине запустить клиента RDP mstsc.exe, указать в строке адреса localhost:3390, и подключиться к протоколу RDP на сервере SSH.

Немного пояснений. В поле Destination мы ввели localhost:3389 что означает локальный адрес по отношению к серверу SSH (то есть сам сервер), порт 3389. Туда с равным успехом можно ввести другое имя и порт, доступные для сервера SSH, и это соединение будет проброшено через SSH-туннель на машину клиента, на порт, который мы ввели в поле Source port. Подключаться можно на клиентской машине на адрес localhost, порт Source port (в этом примере localhost:3390). Можно также коннектиться с другой машины на клиентскую машину (клиентская - это где запущена ssh-сессия putty с туннелем) к порту 3390, если была поставлена галочка "Local ports accept connections from other hosts" на шаге 2.

С туннелями у putty есть глюк - если сессия с туннелями обрывается, то перезапуск сессии почему-то не восстанавливает работу туннелей. Чтобы туннели заработали снова, нужно переоткрыть putty и снова загрузить сессию с настроенными туннелями.


Ссылки по теме:
http://wl500g.info/showthread.php?t=12833&highlight=ssh-%F2%F3%ED%ED%E5%EB%FC - примеры использования putty с сервером SSH, встроенном в "аппаратный" домашний роутер WL500g компании ASUS.
http://microsin.ru/content/view/457/43/ - как поднять сервер SSH на FreeBSD.
http://microsin.ru/content/view/413/43/ - как поднять сервер SSH на Windows.
http://microsin.ru/content/view/654/43/ - pscp: как передавать файлы по протоколу ssh.
Последнее обновление ( 18.12.2008 )
 

Комментарии  

  1. #1 user
    2010-11-1909:12:25 Есть PC1 (за NAT-ом), PC2 и SERVER с демоном sshd. Подскажите, каким образом с PC2 попасть на PC1 (remote desctope) используя SERVER как промежуточный?

    microsin: если PC2 и SERVER видят друг друга через сеть по протоколу TCP/IP (например, находятся в одной локальной или в разных маршрутизируемы х подсетях), то это делается легко - именно так, как описано в этой статье (туннель настраивать надо на PC1). Если же все три компьютера (PC1, PC2, SERVER) находятся в разных локальных сетях, которые не видят друг друга, то описанный в статье способ не подойдет. Нужно строить туннель другим способом. Как это сделать с помощью сервера SSH - не знаю, вопрос не изучал. Проще всего - прокинуть порт 3389 компьютера через NAT, тогда сервер SSH вообще не потребуется (использовать SERVER нет необходимости).

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

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017