Отностительно безопасный способ удаленного управления


Tagged , , ,

С переходом на новую работу, появилась возможность админить рабочие серверакомпы из дома. Выбирая способы относительно безопасного администрирования решил изобрести велосипед 🙂
Мои параноидальные наклонности не дают мне пользоваться закрытыми продуктами вроде TeamViewer. Да и лицензия на такие продукты в основно предусматривают домашнее использование.
Для работы мне нужен доступ к моему рабочему компьютеру, на котором установлена Win7, которая кстати мне не нравится. 🙂

Вообще я предпочитаю пользоваться только открытыми продуктами, поэтому в качестве системы удаленного администрирования выбор пал на VNC. Из соображений безопасности торчать 5900 портом наружу не хотелось, к тому же VNC в большинстве реализаций не поддерживает шифрацию трафика сессии, поэтому было решено пустить VNC траф через ssh, который открыт на рабочем интернет шлюзе. В качестве шлюза выступает FreeBSD.

Схема соединения будет примерно такая:
Домашний комп -> Интернет шлюз -> Рабочий комп

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

На шлюзе создаем не большой скрипт, который будет форвардить запросы с домашнего компа, рабочему компу. В качестве программы форвардера я использовал утилиту socat. Скрипт назовем vnc.sh, выглядет он очень просто:

socat tcp4-listen:60606,fork tcp4:192.168.123.123:5900

Можно использовать nc вместо socat, что то вроде:

nc -l -p 60606 -c "nc 192.168.123.123 5900"

(не на FreeBSD)

Далее на домашнем компьютере введя следующую команду, мы соединимся с интернет шлюзом через ssh и запустим наш vnc.sh:

$ ssh username@inetserver.ru -i .ssh/server.key -L localhost:6666:127.0.0.1:60606 "./vnc.sh"

после чего, можно запускать vncviewer и соединятся c localhost::6666.
Разьяснения по команде. Для авторизации в ssh у меня используется ключ (параметр -i .ssh/server.key), за тем идет собсвенно порт форвардинг на уровне ssh клиента(параметр -L localhost:6666:127.0.0.1:60606). При соединении ssh клиент баиндит localhost:6666 и все запросы, которые идут на этот адрес:порт автоматически передаются по зашифрованному ssh соединению на 127.0.0.1:60606 сервера, который в свою очередь прослушивает запущенный socat (параметр "./vnc.sh") и передает эти данные на 192.168.123.123:5900.

Схема проста но достаточно эффективна. Немного изменяя скрипт vnc.sh можно сделать ip адрес конечной машины как параметр команды:

$ ssh username@inetserver.ru -i .ssh/server.key -L localhost:6666:127.0.0.1:60606 "./vnc.sh 192.168.100.100:1234"

изменения в vnc.sh:

socat tcp4-listen:60606,fork tcp4:$1

А вообще как не трудно догадаться так можно перенаправлять любой трафик с локальной машины на любые компьютеры и порты, которые доступны интернет шлюзу.
Еще одним плюсом данного метода является то, что не надо трогать правила фаервола, соединение создается временно, любым пользователем.
Для удобства можно создать алиас для вашего шела, либо скриптик, чтобы каждый раз не набирать команду соединения.

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

$ ssh username@inetserver.ru -i .ssh/server.key -L localhost:6666:127.0.0.1:60606 "socat tcp4-listen:60606,fork tcp4:192.168.100.100:1234"

Для проброса Radmin’а:

$ ssh username@inetserver.ru -i .ssh/server.key -L localhost:6666:127.0.0.1:60606 "socat tcp4-listen:60606,fork tcp4:192.168.100.100:4899"

Мой блог находят по следующим фразам

Share:

No comments

RSS / trackback

Respond