Удалённое администрирование с помощью ssh socks tunnel, socks proxifier и ssh port forwarding

Этот пост не имеет прямого отношения к тематике ISP и сетям в целом, однако, современные реалии таковы, что чаще всего оборудование, которое вам нужно администрировать недоступно напрямую с рабочей машины или с одного терминального сервера и требуется зайти на 1-2-3 сервера, прежде чем залогиниться на целевой хост. Для начала, рассмотрим наиболее простой случай, когда целевые хосты доступны с терминального сервера, а сам терминальный сервер доступен с рабочего места:

ssh-socks-proxy

Целевыми хостами здесь являются Router1(управление по протоколам telnet/ssh), Windows Server rdesktop1(управление по протоколу RDP) и Application Server webserv1(управление по протоколам http/https). Предполагается, что на терминальном сервере запущен ssh-сервер OpenSSH, а рабочее место это PC, работающий на Windows, OS X или Linux. Кроме того, предполагается, что терминальный сервер доступен только по протоколу ssh с рабочего места, поэтому прочие способы добраться до целевых хостов недоступны (например, запуск vnc- или прокси-сервера на терминальном сервере)

Способ 1. SSH X11 forwarding

Для того, чтобы подключиться к хосту rdesktop1 и webserv1 с рабочей машины, как один из возможных вариантов, использовать ssh X11 forwarding (должно быть разрешено в sshd_config на сервере) и запустить клиентское приложение на терминальном сервере, в нашем случае это будет rdesktop и какой-нибудь веб-браузер, например chromium. На рабочей станции для ОС на базе Linux требуется наличие X11-совместимого окружения, для OS X (Mac) нужно установить XQuartz, после чего выполнить следующие действия:

workstation:~ sergey$ ssh -Y -C login@termserv1
login@termserv1's password: 
...
login@termsrv1:~$ chromium-browser 

На рабочем месте появится окно chromium’а, который запущен на сервере termsrv1, с которого можно зайти на http://webserv1/

Аналогичным образом можно попасть на хост rdesktop1, просто вместо chromium-browser нужно выполнить команду “rdesktop -g 800×600 rdesktop1”.

Для рабочего места на ОС Windows потребуется установка ПО Xming X Server (версия 6.9.0.31 от 2007 года до сих пор работает на актуальных на сегодняшний день версиях Windows) и ssh-клиент putty. Всё, что требуется – это установить Xming, запустить его, установить галочку “Enable X11 forwarding” в настройках putty(Connection-SSH-X11), подключиться к termserv1 и запустить на нём chromium-browser или rdesktop. Подробная инструкция в картинках здесь (архив)

Недостатки

1. Медленно работает. Даже при наличии компрессии(опция -C или соответствующая галочка в putty), X11 forwarding работает более-менее без тормозов либо по локальной сети, либо через высокоскоростной интернет с маленькой задержкой.
2. Требуется установка необходимо ПО на сервере(клиентов), в нашем случае это chromium-browser и rdesktop. К браузеру может потребоваться flash, java и прочее. Множество ПО не работает нативно под UNIX-подобными ОС, следовательно потребуется установка wine, но даже с вайном, возможно, нужный вам клиент не запустится. Если на терминальном сервере используется какой-нибудь очень древний freebsd, на котором порты уже не устанавливаются, а методом “./configure && make && make install” современное ПО не собирается, то такой способ может и вовсе не подойти. И мало того, на терминальном сервере может быть просто мало место на диске, чтобы скомпилировать нужное ПО.

Способ 2. SSH socks proxy и socks proxifier

OpenSSH-клиент и putty позволяют поднять локальный socks-proxy (т.е. непосредственно на рабочем месте), при этом точкой выхода будет терминальный сервер. В случае с openssh-клиентом (Mac, Linux и прочие ОС, на которых он работает):

workstation:~ sergey$ ssh -D 9990 login@termserv1
login@termserv1's password: 
... 

На рабочем месте появляется локальный socks-proxy (tcp4 127.0.0.1:9990, tcp6 ::1:9990). Для того, чтобы воспользоваться этим proxy из веб-браузера, проще всего использовать Firefox (т.к. в нём можно настроить socks-proxy, не затрагивая системные настройки ОС, в отличии от других популярных браузеров). Делается это через Preferences->Advanced->Network->Settings (в версии 34.0.5):
firefox-socks-proxy
Теперь локально запущенный Firefox использует termserv1 как точку выхода в сеть.

В случае с Windows, аналог ssh -D опять же putty. Для поднятия локального socks-proxy нужно в свойствах соединения в Connections->SSH->Tunnels установить Dynamic и указать source port 9990. Инструкция в картинках здесь (архив).

Socks proxifier

Для тех приложений, которые самостоятельно не умеют пользоваться socks proxy (тот же rdesktop, например), нужно завернуть трафик на локальный socks-proxy. Для UNIX-подобных ОС это делается, например, с помощью утилиты tsocks.
Установка в Ubuntu Linux (13.04):

sergey@workstation ~ $ sudo apt-get install tsocks 

Конфигурация (/etc/tsocks.conf) для версии 1.8beta5-9.2 (просмотр версии командой “apt-cache show tsocks”):

server = 127.0.0.1
server_type = 5
server_port = 9990

Установка в Mac OS X (предварительно нужно установить MacPorts):

workstation:~ sergey$ sudo port install tsocks 

Конфигурация (/opt/local/etc/tsocks.conf) для версии 1.8.4_2 (просмотр версии командой “port info tsocks”):

server = 127.0.0.1
server_port = 9990
server_type = 5
tordns_enable = false

Использование tsocks
Чтобы завернуть tcp-трафик приложения на socks-прокси:

workstation:~ sergey$ tsocks rdesktop -g 800x600 rdesktop1
...
workstation:~ sergey$ tsocks telnet router1

Чтобы запускать все приложения из текущего терминала c перенаправлением tcp-трафика через tsocks нужно выполнить:

workstation:~ sergey$ . tsocks on
workstation:~ sergey$ rdesktop -g 800x600 rdesktop1
workstation:~ sergey$ telnet router1

Подробнее см. “man tsocks”. Кроме того, в конфигурации tsocks.conf можно направлять трафик на разные IP через разные socks-прокси и пропускать трафик прозрачно для определённых IP (подробнее см. “man tsocks.conf”)

Для пользователей Windows существует множество альтернатив tsocks (архив). Заведомо рабочая – tun2socks, но неудобство(или, наоборот, удобство?) в том, что заворачивается на socks-прокси трафик не от конкретного приложения, а для конкретных сетей, т.е. требуется внесение изменения в таблицу маршрутизации на рабочем мест. Подробнее см. здесь (архив). Возможно, некоторые проксификаторы из списка выше являются прямыми аналогами tsocks и даже запускаются на актульных версиях Windows, но это не проверялось на момент написании статьи.

Недостатки

Единственным недостатком ssh socks proxy является то, что требуется либо поддержка socks proxy в приложениях, либо необходимо использование проксификатора.

Способ 3. SSH Local port forwarding

В отличии от ssh socks proxy, с помощью которого можно использовать сервер как точку выхода для любого tcp-трафика, local port forwarding позволяет проксировать конкретный tcp ip:port, например:

workstation:~ sergey$ ssh -L 9991:rdesktop1:3389 login@termserv1
...

После ввода пароля на login@termserv1, на workstation появится tcp-сокет 127.0.0.1:9991, при подключении к которому, трафик будет перенаправлен на rdesktop1:3389 через termserv. Проще говоря, подключившись rdesktop-ом к 127.0.0.1:9991 мы попадём на rdesktop1:

workstation:~ sergey$ rdesktop -g 800x600 127.0.0.1:9991
...

Аналогично для telnet и прочих приложений.

В Windows local port forwarding делается через putty:
putty-local-port-forwarding

После чего, подключаемся по rdp к 127.0.0.1:9991 и попадаем на rdesktop1:
mstsc-rdesktop-over-tunnel

Недостатки

1. Для каждого соединения(различные host:port) на целевые хосты требуется делать local port forwarding.
2. Неудобно для web-приложений, т.к. http/https очень часто настроены с учётом hostname из url, т.е. набирая http://127.0.0.1:9991 мы конечно попадём на webserv1:80 (если сделаем соответствующий port forwarding), но самому веб-серверу(веб-приложению) такой url может не понравится и придётся в /etc/hosts делать запись типа 127.0.0.1 webserv1 и обращаться локальным браузером по адресу http://webserv1:9991/. В некоторых случаях, возможно, веб-приложению не понравится наличие порта в url, тогда нужно будет пробрасывать на локальный 80/443-ий порт, что требует наличие соответствующих привилегий на рабочем месте (как и для правки /etc/hosts). Для web-браузера всё же проще использовать socks proxy.

Администрирование через несколько терминальных серверов

ssh-socks-proxy-2-terminal-servers
Немного усложним задачу. С workstation есть доступ только на termserv1, с termserv1 только до termserv2, с termserv2 есть доступ до целевых хостов. На termserv1 и termserv2 запущены ssh-серверы. Т.е. для workstation нужно сделать termserv2 выходной точкой для трафика.

Чтобы использовать termserv2 в качестве socks-proxy на workstation, нужно сделать tcp-тунель от workstation до termserv1, а на termserv1 поднять локальную socks-proxy через termserv2:

workstation:~ sergey$ ssh -L 9992:127.0.0.1:9993 login@termserv1
Password:
...
[login@termserv1 ~]$ ssh -D 9993 login@termserv2
Password:
....
[login@termserv2 ~]$

На workstation появляется сокс-прокси на tcp-сокете 127.0.0.1:9992, прописываем это в браузер или в tsocks.conf.

В случае workstation с Windows, ситуация ничем не отличается от local port forwarding, описанного выше.

Если терминальных серверов становится более 2, то с workstation на termserv1, с termserv1 на termserv2 и т.д пробрасывается порт через local port forwarding(ssh -L), а с предпоследнего на последний делается socks proxy(ssh -D)

Для тунелирования tcp-соединения на конкретный целевой хост:порт без socks-прокси делаем так:

workstation:~ sergey$ ssh -L 9993:127.0.0.1:9994 login@termserv1
Password:
...
[login@termserv1 ~]$ ssh -L 9994:rdesktop1:3389 login@termserv2
Password:
....
[login@termserv2 ~]$

Запустив “rdesktop -g 800×600 127.0.0.1:9994” на workstation, мы попадём на rdesktop1:3389. Обобщение на 3 и более терминальных сервера очевидно.

Advertisements

One thought on “Удалённое администрирование с помощью ssh socks tunnel, socks proxifier и ssh port forwarding

  1. MonaxGT

    Proxifier – советую, строит правила на основе приложения, сетей и даже портов. Умеет работать с нексолькими проксями и удобно настраивать “кому куда идти”.

    На тему множественных подключений, есть варинты Royal TS, Pac manager, Secure CRT, которые позволяют систематизировать записи и не вспомнинать ip-адреса сервисов. К примеру бесплатная Remoteng (нынешняя платная Royal TS) позволяет делать закладками даже http/s. Связка Менеджера подключений + проксифаера – структурирует схему сети с точки зрения быстрых подключений.

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s