понедельник, 12 апреля 2010 г.

SSH за проксей

Этот пост является переводом статьи «SSH Over Proxy» Даниэля Стенберга (Daniel Stenberg), выполненный для welinux.ru по просьбе пользователя |xed|
Переведена редакция статьи, датированная 24-м ноября 2009-го года, 23:53 (Центральная Европа, Стокгольм, Швеция).

SSH через или за прокси

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

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

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

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

Что вам нужно

Вам нужен софт, установленный и работающий «снаружи» по отношению к тому месту, где вы находитесь. В этом документе я называю такое место «домом».

Место, из которого вы хотите получить доступ, будет называться «работой». На работе вы находитесь за злым прокси-сервером.

Дома

Вам нужен работающий HTTP-прокси, принимающий соединения с localhost'а. У многих людей есть уже работающий Apache, а подгрузить и сконфигурировать mod_proxy очень легко. Конечно же, вы можете использовать любой другой прокси, например, squid. В этом примере будет подразумеваться, что прокси работает на 80-м порту — том же, что и обычный апач.

Вы можете включить HTTPS и FTP, а также любой другой протокол в конфиге прокси.

Вам также понадобится sshd, работающий на 443-м порту. Почти у каждого уже есть работающий sshd, вам просто нужно сделать так, чтобы он также слушал порт 443. 443-й часто используется для HTTPS, потому-то мы его и используем — большинство проксей позволяют к нему подключаться, так как компании разрешают своим работникам использовать банки и другие HTTPS сервисы в вебе.

Наверное, этого можно и не говорить, но вы должны убедиться, что ваш Apache или другой httpd не использует 443-й порт для HTTPS.

На работе

Вам нужен SSH клиент, способный посылать CONNECT-запросы через ваш корпоративный HTTP прокси. Под Windows можно использовать Putty — в нём есть встроенная поддержка для туннелирования через HTTP прокси. Под unix/linux (или cygwin), вы можете использовать openssh и corkscrew для того, чтобы через прокси попасть на 443-й порт своего домашнего компьютера.

Если вы используете openssh, добавьте в свой ~/.ssh/config такую строку:
ProxyCommand /usr/local/bin/corkscrew proxy.work.com 80 %h %p

Теперь вы должны указать вашему ssh клиенту пробросить локальный порт, скажем, 8080-й, на удалённый localhost:80. После этого вы получаете шифрованный канал к вашему домашнему компьютеру. Естественно, у вас также будет обыкновенный SSH, так что вы можете запускать X-приложения так, чтобы они появлялись на экране вашего рабочего компьютера, а также многое другое.

Команда openssh для подключения и проброса порта через прокси выглядит примерно так:
ssh -L 8080:localhost:80 user@server.at.home -p 443

Сконфигурируйте ваш браузер на работе так, чтобы для всех протоколов, которые вы включили на прокси-сервере дома, использовался прокси по адресу localhost:8080.

Теперь все запросы браузера будут посылаться через SSH-соединение через прокси на ssh сервер дома, а потом — прокси-серверу и в мир.

Без CONNECT

В случае, если подключение к 443-у порту запрещены, вы можете попробовать другой (если CONNECT разрешен хоть где-то); вам может понадобится перенести ваш прокси/веб сервер с 80-го порта, если это единственный приемлемый путь.

Если не можете найти подходящий порт или CONNECT запрещены насовсем, вы должны создать туннель с помощью обыкновенного HTTP, используя, например, httptunel. httptunel — это клиент-серверное приложение; вам нужен сервер («hts»), работающий на домашнем компьютере и слушающий 80-й порт, и клиент («htc»), запущенный на вашем рабочем компьютере и создающий тунель.

Дома принимайте входящие соединения на 80-й порт и перенаправляйте их на 22-й (ssh):
hts -F localhost:22 80

На работе подключайтесь к дому через корпоративный прокси и пробрасывайте локальный порт (8022-й, например) на SSH дома:
htc -P proxy.corp.com:80 -F 8022 server.at.home:80


Дополнительные комментарии

С другими протоколами для начала надо просто пробросить больше портов с работы домой. Дальше всё зависит от протокола. Например, если вы хотите настроить работу IRC, вам понадобится «боунсер» (например muh), работающий на вашей домашней машине, так как в противном случае IRC не будет работать правильно.

В случае, если на работе вас на самом деле не прячут за прокси, вы все равно можете использовать описанные методы (хотя вы можете пропустить часть, описывающую выполнение CONNECT, а также не обязаны привязывать ssh к 443-му порту) для того, чтобы не дать админам шпионить за вашим сетевым траффиком.


Прим. перводчика: спасибо mrak018 за советы и подсказки!

Копируете статью — поставьте ссылку!

4 комментария:

virens комментирует...

В наших степях сие актуально, так что спасибо за пост (только что увидел). А о работе scp за проксёй чего добавишь? А то мануалы читать не охота :-)

Minoru комментирует...

Гм, а при чём здесь scp? Суть статьи в том, чтобы весь твой траффик шёл через зашифрованное ssh соединение. С помощью scp такой трюк не проделаешь.

Анонимный комментирует...

я делал вообще без прокси сервера. Цеплялся по ссш на домашнюю тачку с форвардингом портов, например 1080. В броузере прописывал localhost:1080 как сокс прокси

Minoru комментирует...

Кстати говоря, я тоже всегда использовал вариант без каких-либо апачей и прочего — точно так же коннектился по ssh с форвардингом и юзал как socks-прокси. Но ведь статья — это перевод, откуда, как и из песни, слов не выбросишь…

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

 
Blogger logo Debian logo Creative Commons License FeedBurner Subscribers Counter