ICQ, vkontakte.ru и odnoklassniki.ru на работе. SSH-туннель.

Ответить
Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
logo.jpg
Так уж повелось, что на работах стали запрещать доступ к таким сайтам как Одноклассники, Вконтакте, а порой даже запрещают использовать ICQ. Начальство думает, что если у сотрудника не будет доступа к данным ресурсам, то работоспособность будет выше. Однако они упускают одну мелочь — запретный плод всегда слаще. Цель данной статьи рассказать об одном из способов получения доступа ко всем ресурсам интернета без ограничения.

Способ немного своеобразные, однако рабочий на 100%. Для работы данного способа необходим компьютер, постоянно находящийся в сети либо NAS. Основное условие — на удаленной машине должна быть служба SSH*. В моем случае я использовал свой Synology DS209j*.

И так, первым делом нам нужно поднять SSH сервер на удаленной машине. Если у вас Linux или вы используете NAS как и я, то проблем с данной службой не возникнет. Для пользователей Windows я напишу отдельную статью на эту тему. Скажем так — она еще в разработке.

Для начала нам необходимо настроить sshd. Открываем файл /etc/ssh/sshd_config и устанавливаем следующие значения:

Код: Выделить всё

Port 443
PubkeyAuthentication yes
PermitEmptyPasswords no
Данные параметры необходимы для авторизации пользователя по файлу-ключу. Обращаю внимание на то, что стандартный 22, однако тут мы указываем порт 443. По данному порту работает протокол HTTPS и, как правило, на любой фирме он открыт, чтобы пользователи имели доступ к страницам вида https://site.ru/. Так же этот порт удобен тем, что через него и так проходит только шифрованная информация, а следовательно данный факт будет вызывать меньше подозрений.

После изменений в файле конфигураций перезагрузите sshd.

Код: Выделить всё

# /etc/rc.d/sshd restart
Далее создаем пользователя из под которого будем туннелить. Для моего случая

Код: Выделить всё

# useradd -g users -s /bin/sh -d /home/tunnel tunnel
Пароль создавать не нужно, чтобы у данного пользователя не было возможности войти по паролю. Теперь создаем ключи для данного пользователя. Подробно о создании ключей я рассказывал в статье Как я настраивал Subversion* (данная ссылка с моего блога, скоро, возможно перенесу сюда), поэтому тут я просто укажу команды:

Код: Выделить всё

# cd /home/tunnel
# md .ssh
# cd .ssh/
# ssh-keygen -b 1024 -t dsa -f keys
Лично я парольную фразу не указывал, данной безопасности хватит за глаза. Если же ее указать, то перед запуском туннеля нужно будет постоянно запускать pagent или ssh-agent.

Мы получили два ключа — публичный и приватный. Публичный ключ переименовываем в authorized_keys, а приватный копируем себе на локальную машину. На этом настройка серверной части подошла к концу. Осталось проверить правильно ли мы все сделали.

Так как у подавляющего большинства на работе Windows, в качестве клиентской части мы будем использовать PuTTY и Plink. Загрузите со официального сайта* программы PuTTY, Plink, PuTTYgen. Поместите все в одну папку, скажем c:\tunnel\. Так же скопируйте в нее наш ключ, полученный с сервера, допустим key.

Так как у закрытого ключа нет четкого формата, его необходимо преобразовать для PuTTY. Запускаем утилиту PuTTYgen и делаем следующее:
1.jpg
2.jpg
Так как мы не устанавливаем пароль, программа обязательно ругнется, мол вы уверены, что хотите сохранить ключ без парольной фразы. Отвечаем — да. Вы можете установить парольную фразу, однако, как я уже говорил, это скажется на автоматическом создании туннеля. Сохраняем ключ как key.ppk.

Пришло время проверить, правильно ли мы настроили сервер. Заходим в Пуск -> Выполнить. Вводим cmd и проверяем.

Код: Выделить всё

C:\tunnel> plink.exe -p 443 -l tunnel -i key.ppk 192.168.1.20
Using username "tunnel".


BusyBox v1.1.0 (2010.04.19-13:38+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

FS_AgentSIB>
В моем случае сервер 192.168.1.20 (тестирую внутри своей сети). Если вы увидели приглашение сервера с возможностью дальнейшей работы, значит мы все сделали правильно.

Теперь нам нужно все автоматизировать. Для начала сделаем PuTTY портативным, чтобы мы могли запускать его с флешки и не оставлять никаких следов в системе. Известно, что PuTTY хранит свои настройки в реестре. Значит нам нужно на время слить куда-нибудь старые настройки PuTTY, загрузить свои, указать путь к своему файлу putty.rnd (Он используется для генерации ключей и является уникальным) и только после этого запустить PuTTY. После окончания работы нам нужно вернуть старые настройки если они были.

Вот как это можно реализовать. Для начала создадим файл puttydel.reg, скопируйте в него:

Код: Выделить всё

REGEDIT4

[-HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions]

[-HKEY_CURRENT_USER\Software\SimonTatham\PuTTY]

[-HKEY_CURRENT_USER\Software\SimonTatham]

Далее создайте exec_putty.bat, откройте блокнотом и вставьте следующее:

Код: Выделить всё

@ECHO OFF
rem Меняем кодировку
chcp 1251 >nul

rem Сливаем старые настройки, если их нет, ничего не происходит.
regedit /ea old.reg HKEY_CURRENT_USER\Software\SimonTatham
rem Очищаем ветку
regedit /s puttydel.reg
rem Вливаем свои настройки, если их нет, ничего не происходит.
regedit /s putty.reg

rem Добавляем путь к файлу putty.rnd

rem Определяем реальный патч и дублируем слешы.
SET NEW_CD=%CD:\=\\%
rem Генерируем файл реестра
echo REGEDIT4 > puttyrnd.reg
echo. >> puttyrnd.reg
echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY] >> puttyrnd.reg
echo "RandSeedFile"="%NEW_CD%\\putty.rnd" >> puttyrnd.reg
rem Запускаем его
regedit /s puttyrnd.reg
rem И удаляем :)
del puttyrnd.reg

rem Запускаем PuTTY с ключем W, что позволит заморозить скрипт до завершения программы
start /w putty.exe

rem после закрытия PuTTY 

rem Сливаем наши настройки
regedit /ea putty.reg HKEY_CURRENT_USER\Software\SimonTatham
rem Чистим реестр от наших настроек
regedit /s puttydel.reg
rem Заливаем старые настройки
regedit /s old.reg
rem Удаляем мусор
del old.reg
Сохраняем и запускаем. Должен запуститься PuTTY с нулевыми настройками. Однако так же запустилось и черное окно cmd. Нам необходимо избавиться от него. Для этого качаем утилиту NirCmd*, распаковываем и загружаем в ту же папку. Создаем файл start_putty.bat и прописываем в нем:

Код: Выделить всё

nircmd.exe execmd exec_putty.bat
Теперь, когда мы запускаем start_putty.bat черное окно появляется всего на секунду.

Конфигурируем PuTTY.
Указываем сервер (пока тестовый внутри сети) и название подключения, например tunnel.
3.jpg
Идем во вкладку Connection->data и указываем имя пользователя
4.jpg
Далее важный шаг! Если на фирме для доступа используется прокси, то эту вкладку нужно заполнить согласно вашим параметрам. Однако для тестов на локальном компе я ее не заполняю.
5.jpg
Далее идем во вкладку Connection->SSH->tunnel. Ставим порт 9999, отмечаем галочкой Dynamic и нажимаем ADD. В текстовой области должна появиться строка D9999. Этого достаточно в принципе, однако у каждого свои вкусы по настройки.
6.jpg
Возвращаемся к первой вкладке Sessions и жмем Save. В списке сессий должна появиться наша сохраненная сессия.
7.jpg
Тестово подключаемся, принимаем ключ и закрываем. Входить не надо, ды у вас и не получиться, так как у пользователя нет пароля.

Теперь проверим правильность настроек сервера. Запустим PuTTY (ВНИМАНИЕ! С этого момента, когда я говорю «запустим PuTTY», это означает, что нужно запускать файл start_putty.bat, иначе настройки сохраняться не там!). Откроем cmd и выполним:

Код: Выделить всё

C:\tunnel>plink -load tunnel -i key.ppk
Using username "tunnel".


BusyBox v1.1.0 (2010.04.19-13:38+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

FS_AgentSIB>
Таким образом получилось, что все настройки Plink берет из сохраненной сессии PuTTY. На данном этапе уже можно проверить туннель. Не закрывайте консольное окно. Запустите, например, FireFox. В настройках укажите в качестве прокси SOCKS5 127.0.0.1 порт 9999. Перезагрузите браузер и попробуйте зайти на любую страницу. Если страница загрузилась, значит туннель работает. Если закрыть окно консоли, то закроется и туннель и браузер при обновлении выдаст ошибку.

И так, туннель настроен, однако это не удобно запускать каждый раз PuTTY и потом Plink. Создаем скрипт exec_link.bat со следующим содержимым.

Код: Выделить всё

@ECHO OFF
rem Меняем кодировку
chcp 1251 >nul

rem Сливаем старые настройки, если их нет, ничего не происходит.
regedit /ea old.reg HKEY_CURRENT_USER\Software\SimonTatham
rem Очищаем ветку
regedit /s puttydel.reg
rem Вливаем свои настройки, если их нет, ничего не происходит.
regedit /s putty.reg

rem Добавляем путь к файлу putty.rnd

rem Определяем реальный патч и дублируем слешы.
SET NEW_CD=%CD:\=\\%
rem Генерируем файл реестра
echo REGEDIT4 > puttyrnd.reg
echo. >> puttyrnd.reg
echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY] >> puttyrnd.reg
echo "RandSeedFile"="%NEW_CD%\\putty.rnd" >> puttyrnd.reg
rem Запускаем его
regedit /s puttyrnd.reg
rem И удаляем :)
del puttyrnd.reg

rem Запускаем plink в скрытом виде! чтобы не было видно окна!
start nircmd.exe execmd plink.exe -load tunnel -i key.ppk

rem Ждем 10 секунд, давая plink прогрузиться!!!
start /w nircmd.exe wait 10000

rem Удаляем весь мусор сразу после запуска Plink!!!

rem Сливаем наши настройки
regedit /ea putty.reg HKEY_CURRENT_USER\Software\SimonTatham
rem Чистим реестр от наших настроек
regedit /s puttydel.reg
rem Заливаем старые настройки
regedit /s old.reg
rem Удаляем мусор
del old.reg
И еще один файл, который будем запускать start_tunnel.bat:

Код: Выделить всё

nircmd.exe execmd exec_link.bat
Обратите внимание, что скрипт несколько отличается от запуска PuTTY. Основной смысл в том, чтобы загрузить наши настройки, запустить Plink и СРАЗУ ЖЕ убрать наши настройки и поставить предыдущие. Это нужно для того, чтобы сразу стереть все. Тогда можно без опасения вдернуть флешку или выключить компьютер. Ваши настройки в системе не остануться.

После запуска файла start_tunnel.bat на секунду появиться окно консоли и пропадет. В диспетчере задач вы сможете увидеть появление plink. Туннель можно тестировать. Для отключения туннеля создайте еще один файл kill_tunnel.bat:

Код: Выделить всё

nircmd.exe killprocess plink.exe
После его запуска процесс туннелирования будет прерван.

Вот и все, остальные настройки сделаны. Для работы любой программы через данный туннель используйте прокси SOCKS5 127.0.0.1 порт 9999. Остальное можно будет подконфигурировать на месте через наш PuTTY. В частности указать нужный IP или DNS-имя сервера и изменить настройки Proxy. Обращаю ваше внимание, что нельзя одновременно запускать скрипт PuTTY и Plink иначе первоначальные настройки будут затерты. В дальнейшем, возможно, я модернизирую скрипты.

Вот и все. Для самых ленивых выкладываю конечную версию файлов, однако статью все же рекомендую прочитать.

Удачи!

---
Ссылка на статью: http://citylive.ru/blog/139.html*

* - для пользователей сети Домолинк ссылка является внешней.
Вложения
tunnel.zip    525.62 КБ • 130 скачиваний
Последний раз редактировалось AgentSIB 07 сен 2010, 01:33, всего редактировалось 2 раза.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Чтобы избежать вопросов типа "Почему не ВПН" или "А прокси не легче?" выкладываю основные преимущества данного метода.

1. Портативность. Данный пакет можно носить на флешке и запускать без особых предварительных настроек.
2. Малый размер. Это позволяет хранить скрипты не только на флешке, но и на удаленке.
3. Довольно простая настройка. По сути надо указать только адреса серверов и прописать прокси.
4. Возможность работать через прокси. Бывает такое, что на фирме доступ к вебу только по проксе. В данном случае это не помеха.
5. Скрытность. Запуск программы занимает всего пару секунд, дальше все работает в теневом режиме. Так же .exe файлы можно переименовать, чтобы не вызывать подозрения в процессах.
6. Не оставляет следов. Все следы заметаются, и даже если произойдет сбой в сети, можно без опасения вытащить носитель, настроек в системе не останется.
7. Работает даже с малыми правами, не требует установки или изменения параметров системы.
8. Быстрота. Настроенный пакет запускается считанные секунды.
9. Работа по порту 443 в шифрованном режиме, что снижает подозрение у админов и обеспечивает конфиденциальность информации.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Ответить