SSH туннелирование в Unix Windows

SSH туннелирование в Unix <-> Windows SSH туннелирование пригодится для обхода неких ограничений установленных брандмауэром или же просто для создания безопасного туннеля передачи данных. Кроме прямого SSH туннелирования можно также сделать проброс данных с локального порта через SSH туннель на некий порт некой удалённой машины или наоборот.

Как в случае прямого SSH туннелирования так и с пробросом порта, на одной из сторон всегда должен быть установлен рабочий SSH сервер! SSH туннелирование даёт возможность бродить по сети от имени того компьютера, к которому был организован SSH туннель. Например если у нас имеется доступ к SSH где-то в Зимбабве, то при помощи SSH туннеля мы можем лазить по сети от имени Зимбабве:)

SSH туннелирование

Прямое SSH туннелирование

Что имеется ввиду под "Прямое SSH туннелирование"? Прямое SSH туннелирование это когда SSH клиент запускается в режиме sock-proxy (опция -D) и соединившись с удалённой машиной по SSH протоколу передает через неё (удалённую машину) TCP трафик, например сессия прямого SSH туннеля с удалённой машиной через консольный SSH клиент (OpenSSH) в Windows:

C:\OpenSSH\bin>ssh -D 4444 -p 28666 user@remotehost.com
The authenticity of host 'remotehost.com (96.172.128.114)' cant be establishe
d.
RSA key fingerprint is 5e:ea:62:5f:fc:3b:b2:38:d6:ba:6b:aa:65:3f:d4:35.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'remotehost.com,96.172.128.114' (RSA) to the list o
f known hosts.
user@remotehost.com password:
Last login: Thu Feb 7 03:34:45 2013 from 108.95.46.202
[user@remotehost ~]$

Запуская SSH клиент с опцией -D 4444 мы повелеваем ему после запуска прослушивать локальный порт 4444 и после подключения к удалённому хосту remotehost.com, на удалённый порт -p 28666 и с именем пользователя user, отправлять наш TCP трафик к месту назначения от своего имени - т.е. от имени remotehost.com с ИП 96.172.128.114.

Проброс порта через SSH туннель на порт удалённой машины

В этом случае, после подключения по SSH протоколу с удалённой машиной user@remotehost.com, данные с локального порта через SSH туннель удаленной машины будут переданы будут переданы дальше на некий порт некой удалённой машины, например прокси-серверу. Выглядит это примерно так:

ssh -L [bind_address:]port:host:hostport -p 28666 user@remotehost.com

Аналогично предыдущему примеру с той лишь разницей, что конечной точкой пересылающей/принимающей наш TCP трафик будет не user@remotehost.com, а некий host:hostport

Есть также вариант проброса TCP трафик с удалённого порта удалённой машины user@remotehost.com на локальный порт локальной машины или ещё куда-нибудь.

ssh -R [bind_address:]port:host:hostport -p 28666 user@remotehost.com

В консольных ssh клиентах для Unix подобных ОС есть ещё одна полезная опция -C (Requests compression of all data) для сжатия данных, которая отсутствует в ssh клиенте (OpenSSH) для Windows, но есть в PLINK.EXE от PuTTY.

В качестве SSHD для Windows можно предложить WinSSHD, а в качестве консольного SSH клиента под Windows OpenSSH соответственно или на худой конец PLINK.EXE от PuTTY.

SSH тунель в PuTTY

Для использования в PuTTY SSH туннелирования в настройках "Сonnection -> SSH -> Tunnels" введите:

Source port: 4444
Destination: localhost:4444

Отметьте пункт "Dynamic" и нажмите "Add". В "Session" укажите нужное "Host Name" имя хоста, укажите SSH протокол и сохраните настройки выбрав в "Saved Sessions" подходящее имя, ну, например, "HostName aka ssh tunnel on 4444" и сохраните "Save", после чего двойным кликом на этом имени установите соединение.

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

Вложенные SSH туннели

Допускаются вложенные SSH туннели, например:

ssh -L [bind_address:]port:host:hostport -p 28666 user@remotehost1.com \
    ssh -L [bind_address:]port:host:hostport -p 28666 user@remotehost2.com
ssh -L 192.168.0.2:8080:127.1:9999 user@8.8.8.8 \
    ssh -L 127.1:9999:127.1:80 user2@10.1.1.2

В этом примере (рисунок ниже) мы бросаем данные с порта 8080 компьютера "А" (192.168.0.2), на локальный хост и порт 9999 компьютера "Б" (8.8.8.8), а сразу после подключения к компьютеру "Б" (8.8.8.8) запускаем на нём ssh клиент, принимаем данные (127.1:9999) и бросаем их дальше на локальный хост 127.1:80 компьютера внутренней сети 10.1.1.2.

Реверс сокс-прокси. По идее офицеры службы безопасности, которые озабочены запретом Интернета на машине 10.1.1.2, должны повыдёргивать на попе все волосы, ибо приведённая ниже команда должна организовать доступ к сети Интернет для машины 10.1.1.2 через сокс-прокси, который запущен на машине «А».

ssh -D 8080 -R 127.1:8080:127.1:8080 user@8.8.8.8 \
    ssh -R 127.1:8080:127.1:8080 user@10.1.1.2

Конфигурация SSHD

Для гарантированного обхода ограничений фаервола можно в конфигурации SSHD демона /etc/ssh/sshd_config открыть сразу несколько портов, т.е. SSHD будет принимать запросы сразу по нескольким портам, например:

Port 22
Port 80
Port 67
Port 443

При таком раскладе можно будет спокойно юзать откуда душеньке угодно, с работы или комп. клуба, любые проги, играть в онлайн игры и т.д., а если SSHD поднят на домашнем ПК с динамическим ИП - так не беда, можно же вырулить через "Динамический ДНС" !:)

Итоги

SSH туннель с удалённым сервером также может быть полезен для проверки пропускной способности Интернет канала на удалённом сервере, а также очень рекомендуется при использовании точек Wi-Fi доступа в различных клубах, кафе и т.д. имхо трафик на таких общественных точках Wi-Fi доступа может запросто снифитца и вы рискуете попрощаться с доступом к своим акаунтам, электронным кошелькам и т.д.!

В сети можно нарыть бесплатные SSH аккаунты (Free Shell Accounts), но обычно для их получения нужно нырять в IRC сети и там вести переговоры с властелином SSH аккаунтов. Места выделяют маловато 200-500 МБ но, зато фрии.

Надеюсь статья была полезной и доступной для понимания.

Ссылки по теме

Олег Головский


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


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

2 megabytes