Sunday, November 9, 2008

Обход прокси используя ssh, dynamic port forwarding | Bypassing proxy limits using ssh, dynamic port




















































































































































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

Многим из Вас знакома ситуация, когда при попытке открыть какую-либо страницу в интернете (например odnoklassniki.ru) или воспользоваться каким-либо сервисом (например icq)
Вы получаете отказ в той или иной форме (таймаут соединения, отказ соеднинения, http 403).

Вцелом проблема решаема. Всё необходмое ПО вполне стандартно и открыто, никаких особенных выкрутасов ни для настройки, ни в смысле протоколов не будет.

Весь траффик будет успешно зашифрован, так что Ваш офисный админ-цербер не сможет расшифровать (yу, разве что с горячим утюгом у Вашего уха), при том, что траффик (в смысле содержимого) выглядит вполне себе безобидно (естесственно, что, если Вы начнёте качать гигабайты через этот канал, то Ваш админ может заинтересоваться, а что это там такое)

Для успешного преодоления прокси Вам понадобится:


  • скопировать к себе на компьютер программу putty (ссылка на закачку)

  • наличие компьютера во интернете с реальным ip-адресом, на котором Вы (или хозяин этого компьютера) можете запускать свои программы (тут сразу ремарка: по всей видимости в роли этого компьютера не может выступать компьютер на ADSL-канале от МТУ, в Москве). Тут потребуется ещё кое-что от этого компьютера (точнее от его соединения с интернетом, но об этом позже)




  • Очевидно, что это решение не всегда прокатит. Настоящий админ саткнёт в результате все дырки, если они ещё не заткнуты, но вцелом опыт подсказывает, что во многих случаях это решение работает.





    In this short article I'd like to tell about solution of a well-known problem — bypassing proxy limitations (office, university, country, etc)

    I think that the majority of people using internet from an office, university or some countries (China «The Great Wall firewall», Italy and Great Britain — blocking on-line foreign casino, etc)открыть какую-либо страницу в интернете (например odnoklassniki.ru) are sometime denied to obtain access to some service (MSN, ICQ, ...) or web-pages (facebook, classmates, livejournal, etc):

    You just get a connection timout, http 403 error, or some predefined web-page telling you about existing restrictions.
    In the majority of cases there's a solution. All the software one can need is open and standard, all protocols used are standard

    The traffic will be encripted and your office Cerber admin will not be able to decrypt it. And this traffic, as well, will be standard, unless you start to use it to download something that's beyond the "usual" limit for your office, but, agan, only the volume can be suspicious for your admin

    The prerequisities are:


  • Obtain a small programm named putty (Here's the direct link)

  • You'll need a computer in the Internet with a real ip, that either you or it's owner can use. (There's one more additional request for this computer, I'll tell below)



  • It can not be denied, that there are a lot of cases, when this solution will not work. Yeap, sure. A good admin will not allow this as well. But... but... In a lot of cases it works well. You may try!




    Предполагаемая схема соединений. Справа внизу — клиенские машины (1), посередине большой компьютер — офисный прокси-сервер (2), слева вверху — тот самый дополнительный компьютер (3).

    (3), должен иметь доступ до тех самых запретных ресурсов

    Настройка (3) состоит в том, что на нём необходимо запустить sshd порту, открытом для http-запросов на (2). Распротранёными являются порты 80 (http), 443 (https), 8080, другие. Если (3) — это Unix/Linux, то sshd -p <порт>, если Windows, то я бы рекомендовал Cygwin

    Моя рекомендация — использовать порт 443. В этом случае внешне всё выглядит совсем безобидно.

    (3) Может быть Вашей домашней машиной. В этом случае бозаботтесь, чтобы её адрес был постоянно Вам доступен, к примеру, используя сервис dyndns.org





    Expected scheme of connections. Lower right corner — client boxes(1), in the middle — office proxy (2), left upper corner — additional pc (3) that will be used to jailbreak your office connection.

    (3) should have access to these restriced resources

    Setup on (3) is running sshd at any ip-port, opened for http requests at (2). Well-known are 80 (http), 443 (https), 8080, etc. If (3) — Unix/Linux, just sshd -p <порт>, if Windows, I'd recomment installing Cygwin

    My recomendation: use port 443, as this will make your connections inoffensive.

    (3) can be your home pc, just make sure you allways now it's address (try using dyndns service).





    Запустить puuty. Указать хост (тот самый (3)), порт (тот, на котором запущен sshd), протокол




    Run putty, change host (the one that is (3)), port (the one used to run sshd), protocol





    В закладке proxy укажите прокси-сервер Вашего офисного прокси-сервера (если есть необходимость; если Вам надо из Китая или Ирана добраться до livejournal, то это может не понадобиться)




    In proxy settings put your office proxy server params (if needed; if you're trying to access, for example Livejournal from China or Iran, this might not be needed, it depends on your network settings)





    Сохраните соединение и попробуйте соединиться.




    Save the connection and try to open it.





    В результате Вы должны увидеть командную строку хоста (3). Собственно Вам надо этого добиться. Без этого никуда дальше. Пробуйте, смотрите, пробуйте включить логи у putty, ...

    Безусловно, может не получиться. Ограничения офисной прокси, закрытые порты, прочая, прочая... Тут целое поле для деятельности.




    You should see host (3) command line. Unless you do this, you can not proceed further. You must succeed at this step. Try to use different options, ports, try to turn on putty logging.

    For sure you may fail.





    Закройте терминал, запустите putty заново, загрузите соединение




    Close the terminal window, run putty again, load the connection





    В разделе tunnels в поле source 3128, dynamic, нажать кнопку add




    In tunnels settings, source 3128, dynamic, push add button





    Вот так должно выглядеть




    Should look like this





    Сохраняете соединение, и открываете его




    Save this connection and open it





    Для проверки того, что всё верно сконфигурировано, в командной строке попробуйте посмотреть результат вывода команды netstat -an, Вы должны увидеть что-то типа tcp 127.0.0.1:3128 LISTEN




    Just to check that you configured properly, run netstat -an in command line and check out for something like tcp 127.0.0.1:3128 LISTEN





    В настройках броузера (в данном случае Firefox) Tools-Options-Settings-Advanced-Network-Settings: manual proxy settings, socks5: 127.0.0.1:3128




    In browser setting (Firefox on screenshot) Tools-Options-Settings-Advanced-Network-Settings: manual proxy settings, socks5: 127.0.0.1:3128





    Попробуйте зайти на прежде запретную страницу.


    Де-факто теперь у Вас есть свой собственный прокси сервер, и Вы можете сконфигурировать его для любой проограммы, которая умеет пользоваться SOCKS5. ICQ, Jabber, MSN, броузеры (Для Firefox настойчиво рекомендую поставть Foxy Proxy, настроить нужные фильтры один раз и вообще забыть о том, что админ чего-то там запретил)


    Все Ваши запросы через этот мини-прокси в результате в шифрованном виде пойдут с Вашей клиентской машины (1) до компьютера (3), а дальше уже в интернет.




    Try to visit a forbidden resource.


    De-facto, now you have your own proxy server and you can configure it's usage for any software that can uilize SOCKS5. ICQ, Jabber, MSN, Browsers (For Firefox I strongly recommend Foxy Proxy, configure filters and forget about all restrictions)


    All your data will be send through this mini proxy in a encrypted way from your client box (1) to computer (3), and only after to the Internet.


    34 comments:

    1. Озибо за энтот воркэраунд. Вопрос: а чего стрим-то низя? Из-за динамического ойпишнега или почему?

      ReplyDelete
    2. Нет, МТУ закрывает порты 443, 80, 8080.
      Как бэ можно повесить и на произвольный порт типа 7777, но тут ведь ещё смысл сделать так, чтобы для ацкого одмина было как будто ты просто хттпс-ом ходишь кудато.

      ReplyDelete
    3. http://fsurf.com/
      и подобных сервисов мелеоны
      а еще есть http tunnel
      все то же самое, но без сервака с sshd, можно использовать (почти)любой публичный прокси

      ReplyDelete
    4. 1) fsurf и и т.п. не решают всех проблем
      2) Свой собственный socsk5 несколько богаче возможностей даёт, в т.ч. все IM, т.п.
      3) http tunnel точно также требует наличия хоста вовне, при этом опят-таки функциональность весьма ущербна.
      4) http tunnel, fsurf, любые сторонние — это как минимум несекурно
      5) Многие сервисы-аналоги fsurfa успешно обрубаются проксями

      Просто посидев немного за ацким одмином оно все простые решения потихоньку и отошли...

      ReplyDelete
    5. Фигня. Слишком много гемора. Это все решается простым Remote Desktop. На этой работе у нас траффик 5 метров на чела в день, поэтому твоя тема смысла вапще не имеет. Все решили куда проще сайтом http://glypeproxy.ca/. А сейчас я себе покупаю микро-ноут от асуса и телефон с МТСовским ОН-лайнером и не парюсь.

      ReplyDelete
    6. Нет, не решается. Чиатй коммент выше Кукабарре.

      ReplyDelete
    7. putty — это ssh-клиент, который умеет делать dynamic port forwarding, не более.

      На предмет fsurf, т.п. сервисов — см. ответ выше Кукабарре.

      Да, там, вероятно, надо указать при установке цигвина, что надо бы поставить sshd. Вопрос настройки sshd в cygwin — это уж как кому удобно.

      Зависит от админа.
      Тут как раз смысл в том, что видно будет только, что есть шифрованое содениение от (3) к (1), а что там внутри ходит — этого ацкий одмин не видит.

      ReplyDelete
    8. Это я не понял

      ReplyDelete
    9. Ну, тут как... Если не наглеть и не качать гигазы вареза, то оно ж как бэ...

      ReplyDelete
    10. Дык ить этим методом и скрыть. Но! Ессно, что одмин, имея доступ до твоей машины, ожет что угодно посмотреть. Тут ведь надо смотреть, как и чего.

      ReplyDelete
    11. Что угодно. Я, понятно, не телепат.

      ReplyDelete
    12. спасибо большое! теперь без аси не останусь :)

      ReplyDelete
    13. Всегда велкам.

      ReplyDelete
    14. Есть вопрос: sshd не запускается под cygwin - он в отдельном пакете что-ли.

      ReplyDelete
    15. Запускается. Вероятно, не был установлен.

      ReplyDelete
    16. да, он установился из отдельного пакета, работает теперь постоянно как служба windows

      ReplyDelete
    17. описание: 1) есть главный router 2) есть первая сеть в которой 10 компов, они все лезут в нет через главный proxy 3) есть вторая подсеть в которой 3 компа     в этой подсети только один имеет права на использование нета, остальные должны к этому компьютеру в этой   подсети конектиться и юзать интернет.

      ReplyDelete
    18. Спасибо rezdm помогло в освоении!

      ReplyDelete
    19. Спасибо, мне помогло обойти рабочий прокси для своих целей.

      ReplyDelete
    20. Сам же подпишусь под своим комментом. Санкт-Петербург Дмитрий salt d_salt@mail.ru www.saltty.narod.ru

      ReplyDelete
    21. Клево - спасибо за мануал - попробую - кстати синхроничность - последней каплей для меня стал наглый ход админов которые забанили фейсбук =) - я с его помошью на куче сайтов авторизуюсь, да и по работе он мне нужен - вообще уже наглость потеряли. =)
      Но чем требовать их разбанить нужное лучше пойти своим путем и настроить таки нормальные туннели что-бы от них вообще не зависеть.

      ReplyDelete
    22. Получилось все настроить =)
      Самое сложное было настроить sshd под cygwin - в частности аккаунты, но в итоге мне помогло вот это описание:
      http://chinese-watercolor.com/LRP/printsrv/cygwin-sshd.html

      ReplyDelete
    23. Ну-с, поздравляю.
      Теперь на файрфокс фоксипрокси и дело в шляпе.

      ReplyDelete
    24. Ага - его уже тоже настроил =)

      ReplyDelete
    25. Автор, или я что-то путаю, или Вы забыли маааленький ньюансик указать. Все это будет работать только тогда, когда в sshd_config(на машинке (3)) включена опция "GatewayPorts yes", которая по умолчанию всегда устанавливается в "no" (еще и вся строка по дефолту закоментирована). Ибо как раз она и отвечает за динамический порт форвардинг, а вернее разрешает его для всех, а не только для localhost(как задано по умолчанию).

      ReplyDelete
    26. Хм. По моему опыту (FreeBSD, CentOS, Solaris) везде было "из коробки" включено в on.

      ReplyDelete
    27. (Подумав): а сисадмина обязать, что когда он вычислит тех, кто не является компьютерщиком и сможет это все воспроизвести, он должен написать докладную. Отличившихся сотрудников переводить на повышение с увеличением занятости, а на комп ставить программы-шпионы. ;))

      ReplyDelete
    28. Не-не-не, если админу никто не капнет, то выглядеть это для него будет как нууу, +- "человек смотрит в интернет-банкинг". И всего делов.

      ReplyDelete
    29. А шо, если чего, я вроде прям по шакам описал.
      Но, если встанет вопрос -- стучи, помогем как могем.

      ReplyDelete
    30. Спасибо. :)
      У нас такой физик был препод на первом курсе, он пришел из технического ВУЗа и регулярно забывал, что когда поясняешь физико-статистику-математику отъявленным гуманитариям, то пошаговая инструкция должна состоять из шагов раза в три поменьше. ;))

      ReplyDelete
    31. задача простая относительно - заставить работать игру COUNTER STRIKE через прокси-сервер (сервер стоит в сторонке, т.е. у юзеров шлюзом прописан не он)
      пробовал FreeCap i Proxyfire - все игры идут, кроме контры. кто стыкался и решал это ? или предположения...

      ReplyDelete
    32. Я не в курсе как работает CS, если честно, так что не смогу сходу подсказать.

      ReplyDelete
    33. Можно ли организовать обход прокси без машины 3 ?

      ReplyDelete
    34. Нет, нельзя. Весь смысл в этой машины. Собственно организовать её -- не проблема. Нет возможности дома (или дома закрыты нужные порты) -- можно попросить "соседа", в совсем клиническом случае можно купить самый дешёвый VPS -- это может стоить от 10$/месяц.

      ReplyDelete