Minoru 04.04.2010 18:41
На заказ — SSH за проксей
Этот пост является переводом статьи «SSH Over Proxy» Даниэля Стенберга (Daniel Stenberg), выполненный по просьбе пользователя |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 такую строку:
1 |
|
Команда openssh для подключения и проброса порта через прокси выглядит примерно так:
1 |
ssh -L 8080:localhost:80 [email protected] -p 443
|
Теперь все запросы браузера будут посылаться через SSH-соединение через прокси на ssh сервер дома, а потом — прокси-серверу и в мир.
Без CONNECT
В случае, если подключение к 443-у порту запрещены, вы можете попробовать другой (если CONNECT разрешен хоть где-то); вам может понадобится перенести ваш прокси/веб сервер с 80-го порта, если это единственный приемлемый путь.Если не можете найти подходящий порт или CONNECT запрещены насовсем, вы должны создать туннель с помощью обыкновенного HTTP, используя, например, httptunel. httptunel — это клиент-серверное приложение; вам нужен сервер («hts»), работающий на домашнем компьютере и слушающий 80-й порт, и клиент («htc»), запущенный на вашем рабочем компьютере и создающий тунель.
Дома принимайте входящие соединения на 80-й порт и перенаправляйте их на 22-й (ssh):
1 |
|
На работе подключайтесь к дому через корпоративный прокси и пробрасывайте локальный порт (8022-й, например) на SSH дома:
1 |
|
Дополнительные комментарии
С другими протоколами для начала надо просто пробросить больше портов с работы домой. Дальше всё зависит от протокола. Например, если вы хотите настроить работу IRC, вам понадобится «боунсер» (например muh), работающий на вашей домашней машине, так как в противном случае IRC не будет работать правильно.В случае, если на работе вас на самом деле не прячут за прокси, вы все равно можете использовать описанные методы (хотя вы можете пропустить часть, описывающую выполнение CONNECT, а также не обязаны привязывать ssh к 443-му порту) для того, чтобы не дать админам шпионить за вашим сетевым траффиком.
Прим. перводчика: спасибо mrak018 за советы и подсказки!
stogerc 04.04.2010 18:51 #
+ 0 -
Спасибо за перевод, хорошо постарались.
Смысл искажен:
В случае, если CONNECT запрещены на 443-м порту вашего домашнего компьютера, вы можете попробовать другой порт, если, конечно, CONNECT разрешены хоть где-то; потом вам может понадобится перенести ваш прокси/веб сервер с 80-го порта, если это единственный приемлемый путь.
Должно быть:
В случае, если CONNECT запрещен на 443-й порт домашнего компьютера, можно попробовать указать другой порт (например, 80-й) при условии, что CONNECT разрешен хоть куда-то; для этого вам, может быть, придётся убрать ваш прокси/веб сервер с 80-го порта домашнего компьютера, если нет других вариантов.
Было бы отлично ещё американское "вы-вам-ваш-вашего" перевести в отечественную безличную форму.
В случае, если CONNECT запрещены на 443-м порту вашего домашнего компьютера, вы можете попробовать другой порт, если, конечно, CONNECT разрешены хоть где-то; потом вам может понадобится перенести ваш прокси/веб сервер с 80-го порта, если это единственный приемлемый путь.
Должно быть:
В случае, если CONNECT запрещен на 443-й порт домашнего компьютера, можно попробовать указать другой порт (например, 80-й) при условии, что CONNECT разрешен хоть куда-то; для этого вам, может быть, придётся убрать ваш прокси/веб сервер с 80-го порта домашнего компьютера, если нет других вариантов.
Было бы отлично ещё американское "вы-вам-ваш-вашего" перевести в отечественную безличную форму.
У тебя:
В оригинале:
«then» чётко указывает на то, что действие будет происходить после чего-то; в твоём переводе это не отражено.
«CONNECT запрещены» я писал потому что под CONNECT, скорее всего, подразумеваются syn-пакеты.
В остальном твой перевод от моего по сути ничем не отличается.
Касательно безличной формы — не понял, можешь другими словами объяснить?
для этого вам, может быть,
В оригинале:
and then you may need to move
«then» чётко указывает на то, что действие будет происходить после чего-то; в твоём переводе это не отражено.
«CONNECT запрещены» я писал потому что под CONNECT, скорее всего, подразумеваются syn-пакеты.
В остальном твой перевод от моего по сути ничем не отличается.
Касательно безличной формы — не понял, можешь другими словами объяснить?
Тут самое главное в первой строчке: коннектиться запрещено не "на порту домашнего компьютера", а "к порту домашнего компьютера". То есть не ты это запрещаешь на домашнем компе, а тебе запрещают в сети на работе.
CONNECT - это команда такая, которую браузер говорит прокси-серверу, не syn-пакеты. Эй, говорит, CONNECT меня к раффайзен-банку на 443 порт, а дальше уж я сам.
then совсем не указывает, что действие происходит после чего-то. Например, в конструкции if-then действие происходит не после, а при условии. В данном тексте действие тоже не после чего-то, а при условии: если уж ты коннектишься к себе домой на 80 порт по ssh, потому что 443 закрыт, то будь добр, выкинь сначала (а не потом) оттуда проксю или веб-сервер, если там таковые имеются.
Безличная форма - это когда американский стиль "выканья" обезличивается:
превращается в
CONNECT - это команда такая, которую браузер говорит прокси-серверу, не syn-пакеты. Эй, говорит, CONNECT меня к раффайзен-банку на 443 порт, а дальше уж я сам.
then совсем не указывает, что действие происходит после чего-то. Например, в конструкции if-then действие происходит не после, а при условии. В данном тексте действие тоже не после чего-то, а при условии: если уж ты коннектишься к себе домой на 80 порт по ssh, потому что 443 закрыт, то будь добр, выкинь сначала (а не потом) оттуда проксю или веб-сервер, если там таковые имеются.
Безличная форма - это когда американский стиль "выканья" обезличивается:
"Если вы в unix/linux (или под cygwin), вы можете использовать openssh и corkscrew для того, чтобы через прокси попасть на 443-й порт своего домашнего компьютера."
превращается в
"В unix/linux (или под cygwin) можно использовать openssh и corkscrew для того, чтобы через прокси попасть на 443-й порт своего домашнего компьютера."
Спасибо за пояснения. Примерно через полчасика освобожусь — поправлю в соответствии с твоими замечаниями.
Сделал. Решил всю статью в безличную форму не переводить — вроде и так неплохо — но в некоторых местах все же убрал лишние и неуместные «вы».
Честно говоря, не знаю :) Я обычно ограничиваюсь только первым шагом — пробрасываю порт с локальной машины на домашнюю, потом прописываю SOCKS5 прокси — и радуюсь жизни.
Хотя если в качестве прокси дома юзать squid, вы можете получить какие-то преимущества — скажем, кэш. Вкупе со сжатием передаваемых по ssh туннелю данных это может дать вам некоторый прирост скорости, если у вас дома не очень быстрый интернет.
Хотя если в качестве прокси дома юзать squid, вы можете получить какие-то преимущества — скажем, кэш. Вкупе со сжатием передаваемых по ssh туннелю данных это может дать вам некоторый прирост скорости, если у вас дома не очень быстрый интернет.
Локальный прокси дома для того, чтобы достичь цели, поставленной автором статьи. Автору на работе закрыли "одноклассники", поэтому он протуннелировался ssh-ем домой, и по туннелю гоняет трафик от одноклассников через домашний прокси по туннелю к себе на работу. То есть его работодатель а) не видит, какие сайты он посещает, б) не может запретить их посещать.