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 за советы и подсказки!
Comments (migrated from Blogger)
On 2010-06-10T08:05:35.609+03:00, Minoru wrote:
Гм, а при чём здесь scp? Суть статьи в том, чтобы весь твой траффик шёл через зашифрованное ssh соединение. С помощью scp такой трюк не проделаешь.
On 2010-08-03T15:47:50.820+03:00, Анонимный wrote:
я делал вообще без прокси сервера. Цеплялся по ссш на домашнюю тачку с форвардингом портов, например 1080. В броузере прописывал localhost:1080 как сокс прокси
On 2010-08-04T01:45:18.542+03:00, Minoru wrote:
Кстати говоря, я тоже всегда использовал вариант без каких-либо апачей и прочего — точно так же коннектился по ssh с форвардингом и юзал как socks-прокси. Но ведь статья — это перевод, откуда, как и из песни, слов не выбросишь…
Your thoughts are welcome by email
(here’s why my blog doesn’t have a comments form)
On 2010-06-10T04:11:26.572+03:00, virens wrote:
В наших степях сие актуально, так что спасибо за пост (только что увидел). А о работе scp за проксёй чего добавишь? А то мануалы читать не охота :-)