How-to`s — Создание ssh-туннелей
Наверное многие попадали в ситуацию, когда доступ к необходимым ресурсам в интернете был ограничен. Например вы сидите на работе и у вас ограниченный доступ к интернету, запрещено все что не разрешено.
Вы не можете поговить с друзьями по IRC, ограниченный доступ к сайтам, пароли летают в plain-text, или вы хотите поиграть в игрушки ;).
Сегодня я расскажу вам как быстро и просто соорудить туннель пробрасывающий необходимый вам траффик через ssh.
Описывать все действия я буду исключительно для Linux, под Windows можно использовать putty, но за этим в гугл.
Что же нам необходимо для данного финта ушами?
Поверьте совсем не много, всего-лишь удаленная машина на которую у нас есть доступ по ssh. Я использую свою домашнюю машину, но существуют сервисы, где нахалявую дают шелл пусть и с кучей ограничений, но для туннеля достаточно.
Для начала, чтобы вы не походили на обезьянок-космонавтов немного теории, вы же должны понимать как это все работает.
То что мы делаем это, так называемый, SOCKS-прокси в который мы будем заворачивать весь интересующий нас траффик. Сразу оговорюсь, что сокс поддерживают далеко не все программы, но и тут есть выход из положения, существуют так назваемые "соксификаторы" например tsocks, которые весь траффик генерируемый некоторыми приложениями заворачивает в сокс.
Ну ладно хватит теории, если вам будет интересно, на что я очень сильно надеюсь, то вы все узнаете в гугле.
В зависимости от того чего вы хотите добиться, я могу предложить вам два способа решения проблемы.
Способ первый
Если вы хотите получить доступ к какому-то определенному ресурсу через туннель, то принцип такой:
Давайте рассмотрим ключи которые я описал выше:
Пример 1:
Запустив эту сессию, мы можем в фаерфоксе прописать SOCKS прокси, с параметрами localhost и портом 8080, и принимать все данные передающиеся с 80 порта welinux.ru через организованный нами ssh-туннель.
Пример 2:
Таким образом мы пробрасываем еще POP3 и SMTP протоколы через наш туннель. Но тут есть одна проблемма, на привелигированные порты (<=1024) может форвардить только root, но на самом деле это не так и фатально, просто нужно форвардить на непривелигированные.
Способ второй
Второй способ будет вам наверное проще и понятнее, и именно поэтому я решил написать его вторым, используя его, через туннель вы можете передавать весь тарффик и принимать тоже.
Ключ -D фактически организует на вашей машине SOCKS-прокси.
Таким образом, весь интересующий вас траффик будет заворачиваться на 5555 порт в системе и передаваться через туннель (если вы соответсвующим образом настроили программы умеющие использовать SOCKS).
Вот и все, за большим советую лезть в гугл и маны, в частности man ssh
Удачного использования.
Вы не можете поговить с друзьями по IRC, ограниченный доступ к сайтам, пароли летают в plain-text, или вы хотите поиграть в игрушки ;).
Сегодня я расскажу вам как быстро и просто соорудить туннель пробрасывающий необходимый вам траффик через ssh.
Описывать все действия я буду исключительно для Linux, под Windows можно использовать putty, но за этим в гугл.
Что же нам необходимо для данного финта ушами?
Поверьте совсем не много, всего-лишь удаленная машина на которую у нас есть доступ по ssh. Я использую свою домашнюю машину, но существуют сервисы, где нахалявую дают шелл пусть и с кучей ограничений, но для туннеля достаточно.
Теория
Для начала, чтобы вы не походили на обезьянок-космонавтов немного теории, вы же должны понимать как это все работает.
То что мы делаем это, так называемый, SOCKS-прокси в который мы будем заворачивать весь интересующий нас траффик. Сразу оговорюсь, что сокс поддерживают далеко не все программы, но и тут есть выход из положения, существуют так назваемые "соксификаторы" например tsocks, которые весь траффик генерируемый некоторыми приложениями заворачивает в сокс.
Ну ладно хватит теории, если вам будет интересно, на что я очень сильно надеюсь, то вы все узнаете в гугле.
Практика
В зависимости от того чего вы хотите добиться, я могу предложить вам два способа решения проблемы.
Способ первый
Если вы хотите получить доступ к какому-то определенному ресурсу через туннель, то принцип такой:
ssh -f -N -L <local_port>:<host>:<host_port> <ssh_user>@<ssh_server>
Давайте рассмотрим ключи которые я описал выше:
- -N — этим ключем мы говорим, что мы не хотим получить интерактивную оболочку, то есть банально не хотим иметь возможности печатать комманты в этой сессии
- -f — сворачивает сессию в бекграунд
- -L — собственно сам туннель этим ключем мы говорим, что хотим чтобы соединения с <host>:<host_port> форвардились (передавались) на <local_port>
Пример 1:
ssh -f -N -L 8080:welinux.ru:80 user@server
Запустив эту сессию, мы можем в фаерфоксе прописать SOCKS прокси, с параметрами localhost и портом 8080, и принимать все данные передающиеся с 80 порта welinux.ru через организованный нами ssh-туннель.
Пример 2:
ssh -f -N -L 8080:welinux.ru:80 -L 110:mail.welinux.ru:110 -L 25:mail.welinux.ru:25 user@server
Таким образом мы пробрасываем еще POP3 и SMTP протоколы через наш туннель. Но тут есть одна проблемма, на привелигированные порты (<=1024) может форвардить только root, но на самом деле это не так и фатально, просто нужно форвардить на непривелигированные.
Способ второй
Второй способ будет вам наверное проще и понятнее, и именно поэтому я решил написать его вторым, используя его, через туннель вы можете передавать весь тарффик и принимать тоже.
ssh -N -f -D 5555 user@ssh_server
Ключ -D фактически организует на вашей машине SOCKS-прокси.
Таким образом, весь интересующий вас траффик будет заворачиваться на 5555 порт в системе и передаваться через туннель (если вы соответсвующим образом настроили программы умеющие использовать SOCKS).
Вот и все, за большим советую лезть в гугл и маны, в частности man ssh
Удачного использования.