Ssh туннели где лучше покупать
Перейти к содержимому

Ssh туннели где лучше покупать

  • автор:

SSH Tunnel – Альтернатива VPN и PROXY

Когда нужно быстро сменить гео и айпишку на компуктере, а покупать или искать прокси, впн и прочее впадлец, есть отличный способ проброса трафика через shh-туннель.

На пальцах: весь софт, что у вас запущен на девайсе, будет иметь IP и ГЕО сервера. Все запросы с вашего компуктера будут пробрасываться через сервер и возвращаться обратно.

Для поднятия туннеля вам нужен любой VPS сервер, с доступом по SSH. Как-то специально настраивать сервер не нужно, достаточно его наличие. От себя рекомендую HETZNER (+20€ бонус).

  • Запускаем Terminal.app
  • Вводим ssh -f -N -M -S /tmp/sshtunnel -D 1080 USER@IP -p22 заменяя USER и IP вашими данными сервера
  • Подтверждаем, вводим пароль от сервера (отображаться не будет)
  • Переходим в Системные Настройки > Сеть > Выбираем активное соединение > Подробнее > Прокси > Включаем SOCKS
  • Выставляем 127.0.0.1 и 1080 порт как на скриншоте
  • Сохраняем

Отключить проксирование можно убрав галочку в настройках с SOCKS, либо прервать подключние SSH через терминал:ssh -S /tmp/sshtunnel -O exit IP -p22

  • Качаем PuTTY
  • Вводим IP сервера
  • Переходим в раздел и выставляем Connections > SSH > Tunnels > Source Port 1080 и Destination Dynamic
  • Возвращаемся в главный раздел Sessions
  • Даем нашей сессии название и сохраняем и жмём Open
  • Совсем соглашаемся и вводим логин и пароль от сервера

SSH-туннели: практические примеры использования и важные функции

Рассказываем, что такое SSH-туннели, как их создать, какие полезные функции они имеют и почему важно помнить о безопасности интернет-соединения.

Эта инструкция — часть курса «Введение в сетевую безопасность».

Смотреть весь курс

Изображение записи

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

Любые важные данные следует передавать по защищенным каналам информации. Но это не всегда легко реализовать, особенно когда пользователю нужно совершить срочные операции на удаленном сервере, а подключиться к интернету можно только через публичный незащищенный Wi-Fi. В таком случае используют SSH-туннелирование, устанавливающее защищенный канал связи между локальным рабочим узлом и удаленным сервером. С помощью него можно не только передавать или редактировать файлы дистанционно, но и запускать GUI-приложения, делать бэкап, передавать пароли и даже организовывать потоковое вещание.

Как устроены SSH-туннели

Создание, условия применения и польза для сисадминов

Ситуация, когда требуется срочный доступ к домашнему компьютеру или внутренней корпоративной сети, знакома каждому. К сожалению, качество и безопасность общественных сетей часто оставляют желать лучшего. Важную информацию по таким сетям лучше не передавать. Кроме того, для организации доступа часто требуется внешнее ПО (Team Viewer и другие). Для системного администрирования существует способ использования публичных сетей и при этом создания безопасного подключения к необходимым узлам без использования того же VPN. Речь о SSH-туннелировании.

SSH (от англ. Secure Shell — «безопасная оболочка») — сетевой протокол, который используется для удаленного управления ОС и проксировании TCP-соединений. Выполняет шифрование всего трафика (сюда же относятся пароли и другие важные для корпоративной безопасности данные). SSH-серверы работают с большинством сетевых операционных систем, представленных на рынке.

Подключиться по этому протоколу можно практически к любому серверу. Для организации безопасного соединения можно использовать так называемые SSH-туннели. Но с точки зрения терминологии — это не те туннели, о которых обычно идет речь, когда говорят о системном администрировании. Само наименование, SSH tunnel, сформировалось среди сисадминов для простоты обозначения технологии — SSH Port Forwarding (проброса портов). В ней реализовано сразу несколько возможностей сетевого протокола SSH, а именно — передача TCP-пакетов и трансляция IP-заголовка во время передачи информации при условии существования заранее заданного правила.

Главное отличие SSH tunnels от их аналогов с VPN — передача информации не происходит в любом направлении. Такой канал связи имеет одну точку входа и работает исключительно с TCP-пакетами. Создание SSH-туннелей скорее напоминает проброс портов поверх протокола, нежели туннелирование в чистом виде.

Как создать SSH-туннель и настроить его параметры

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

Создание ключа и установление соединения с удаленным сервером занимает несколько минут.

Создание SSH-ключа в Linux (Ubuntu)/MacOS. Пошаговая инструкция:

1. Для создания ключа требуется ввести следующую команду:

ssh-keygen -t rsa

2. После введения команды на экране управляющей консоли появится диалог:

Enter file in which to save the key (/home/user/.ssh/id_rsa):

3. Чтобы дополнительно защитить соединение, система предложит пользователю придумать и ввести специальное кодовое слово (фразу).

Enter passphrase (empty for no passphrase):

4. Разумеется, пункт № 3 можно пропустить, нажав Enter. То же самое следует сделать, отвечая на следующий вопрос.

5. Завершив создание двух типов ключей (публичного и закрытого), можно переходить к установке связи по SSH. На консоли появится сообщение:

Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: 476:b2:a8:7f:08:b4:c0:af:81:25:7e:21:48:01:0e:98 user@localhost The key's randomart image is: +---[RSA 2048]----+ | ..o o | | .. * * = . | | . o O o B .| | . . + = = o | | oo S o = . .| | .. B . = . . | | . B o = ..| | . .o.o.. o .. .| | .oooE o. | +----[SHA256]-----+

6. На следующем этапе в терминале необходимо ввести команду, которая покажет открытый ключ:

cat ~/.ssh/id_rsa.pub

7. Публичный ключ необходимо ввести в панели управления. Внимательно проверяйте корректность введения ключа.

8. Остается последний этап. Для создания SSH-туннеля к удаленному серверу достаточно выполнить одну команду:

ssh root@HOST

Параметр HOST ― публичный IP-адрес сервера.

Добавим, что введение дополнительных паролей не требуется. А при использовании сервера Selectel можно использовать свой скрипт (bash) для быстрой настройки.

Для удобства пользователей ОС Windows 10 можно создать SSH-туннель в эмуляторе под Windows (MinGW64).

Инструкция для создания SSH-туннеля в Windows 10 выглядит аналогичным образом:

1. Для генерации пары ключей используется команда:

ssh-keygen -t rsa

2. Желательно защитить приватный ключ паролем (или нажать Enter, если он не нужен):

3. Ключи сгенерированы:

4. Открытый ключ хранится в файле ~/.ssh/id_rsa.pub. Приватный ключ находится в файле id_rsa и должен храниться в секрете:

5. Чтобы посмотреть содержимое публичного ключа, используется команда:

cat ~/.ssh/id_rsa.pub

6. Этот ключ (всю строку, начинающуюся с ssh-rsa) необходимо вставить в панели управления Selectel, в поле Операционная система / SSH-ключ выбранного сервера. При установке ОС он будет скопирован в файл .ssh/authorized_keys. При смене ключа в панели управления Selectel текущий образ ОС будет пересоздан, а данные на сервере — утеряны.

7. Для подключения к серверу по SSH используется команда:

ssh root@84.38.187.48 (IP-адрес сервера будет другим).

8. При первом подключении утилита SSH сообщает о неизвестном хосте и спрашивает, уверены ли вы, что доверяете ему. Если ответ положительный (следует ответить yes), IP-адрес и открытый сертификат этого сервера будут добавлены в файл ~/.ssh/known_hosts на локальной машине:

9. Если ранее при генерации пары ключей был задан пароль, утилита SSH попросит ввести его:

10. После ввода пароля и нажатия Enter устанавливается зашифрованное соединение с сервером:

Еще один вариант, как можно использовать этот тип соединения, — создание канала связи по протоколу RDP. Этот вариант подходит, когда пользователь не может подключиться к узлу из-за отсутствия доступа к нему из сети. Зато у него есть доступ к маршрутизатору. Этого достаточно, чтобы использовать данный тип туннелирования.

Параметры канала связи устанавливает инициатор подключения. На втором конце канала связи всегда расположен целевой сервер. Так, клиентом может оказаться VPS-сервер, а точкой выхода — компьютер сисадмина. Точка входа может быть создана с любой стороны туннеля: именно через нее принимаются подключения. Обратная сторона туннеля — точка выхода — способна лишь на маршрутизацию пакетов информации с учетом установленных правил. Отдельная опция — соединение с удаленной машиной, на которой запущен модуль Docker (SSH Docker). Подробнее об этом мы расскажем в следующих публикациях.

Аналогичным образом проходит процесс установки соединения с определенным сервером. В качестве примера возьмем целевой сервер с адресом 192.168.0.105. При этом для пользователя доступен только маршрутизатор (192.168.0.1). В качестве точки входа прописывается 127.0.0.1:3389. Кроме того, задается правило трансляции, определяющее узел, принимающий данные на выходе из SSH-туннеля. В нашем случае в качестве правила указывается 192.168.0.105:3389. Проследите, чтобы указанный адрес действительно существовал, иначе вам не удастся подключиться к целевому серверу.

После того, как вы зададите исходные данные, появится TCP-сокет, который создает служба SSH. Этот локальный сокет следит за тем, когда начнутся подключения на порт 3389. Точкой назначения прописывается localhost (127.0.0.1). Отметим, что RDP-клиент не владеет информацией о настоящем назначении получателя пакета. Клиент только открывает динамический порт, чтобы отправить пакет данных, у которого задан адрес назначения (точка входа) и источника (127.0.0.1:61256).

Пакет с информацией следует от входной точки SSH tunnel на его противоположный конец. Адрес трансляции поменяется. Теперь там значится 192.168.0.105:3389. На следующем этапе SSH-сервер просто поставит свой адрес вместо адреса источника. Вся информация, которая передается внутри канала, будет отправлена поверх протокола. А RDP-клиент оперирует исключительно локальным сокетом. Важно, что вся информация внутри туннеля защищена — она шифруется. Но соединение между SSH- и RDP-серверами остается обычным. Разумеется, этот фактор стоит учитывать, если пользователь работает с небезопасными протоколами.

SSH Proxy: как организовать доступ к любой системе (обращение к проксируемому серверу)

С помощью SSH-туннеля можно воспользоваться домашней (или корпоративной) сетью, даже используя ненадежный бесплатный Wi-Fi. Для этого пользователю потребуется запустить SSH-прокси, а затем по аналогичному принципу создать туннель в целевую сеть (например, можно подключиться к домашней сети).

Важно, чтобы приложения, которые потребуются инициатору подключения для работы, поддерживали SOCKS-прокси. С помощью туннеля сетевые службы станут доступны для удаленной работы. Другой вариант: пользователь сможет выйти в интернет, используя домашнее подключение, но сидя при этом в другом конце мира и используя публичную сеть. Вся передаваемая через туннель информация будет зашифрована.

Это не единственный способ практического применения SSH-туннелирования. Один из самых популярных кейсов — SSH Proxy — открывает доступ к желаемой системе, если она доступна для удаленного сервера. При этом для туннелирования через прокси-сервер потребуется ввести всего одну команду:

localhost:~$ ssh -D 8888 user@remoteserver localhost:~$ netstat -pan | grep 8888 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 23880/ssh

Команда выше показывает, что пользователь запускает SOCKS-прокси. Портом для работы назначается 8888. Кроме того, необходимо проверить, активен ли этот TCP-порт (используется режим прослушивания). Служба работает исключительно на localhost (127.0.0.1). Если немного видоизменить команду, то можно прослушивать все интерфейсы (в том числе ethernet или Wi-Fi). Это позволяет приложениям подключаться к прокси-серверу через SSH-прокси:

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Чтобы браузер работал корректно, необходимы настройки. Например, чтобы запустить Chrome с активированным SOCKS-прокси, потребуется команда:

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Она создает SOCKS-прокси, а также инициирует туннелирование DNS-запросов. Утилита tcpdump проверяет, видны DNS-запросы или нет.

Кроме браузеров, многие современные приложения работают с SOCKS-прокси: достаточно изменить их параметры, чтобы активировать прокси-сервер. Отдельно применяются инструменты, которые помогают приложениям использовать эту важную функцию — к примеру, proxychains позволяет запустить через SOCKS-прокси Microsoft RDP.

Зачем нужны динамические SSH tunnels

Динамический SSH tunnel отличается от рассмотренных выше типов соединений. Он открывает локальный TCP-сокет для его использования в качестве SOCKS4/SOCKS5 прокси. Обычно его применяют, когда требуется VPN, а его развертывание невозможно. Такой тип SSH-туннеля также отвечает необходимым требованиям безопасности.

Кроме того, создание динамического туннеля удобно, когда пользователю необходимо выйти в интернет однократно:

ssh -D 1080 user@vps.example.com

SOCKS-прокси работает через порт 1080.

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

Команды и практическое применения функций SSH-туннелей

Рассмотрим несколько практических примеров применения SSH-туннелирования.

Проброс (перенаправление) портов — Port Forwarding

Чтобы осуществить проброс портов, потребуется создание SSH tunnel. Для этого в локальной системе открывается порт, а для создания канала связи пользователь должен выбрать порт на другом конце туннеля:

localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver

Команда устанавливает прослушку на порт 9999. Порт 80 используется для проброса. Для Port Forwarding также используются прокси-серверы или TCP-службы.

Автоматизация копирования публичного (открытого) ключа

Традиционно пользователю приходится копировать открытые ключи вручную. SSH-протокол существенно ускоряет этот процесс:

localhost:~$ ssh-copy-id user@remoteserver

Эта команда выполняет копирование публичного ключа по умолчанию или из директории ~/.ssh/id_rsa.pub в ~/.ssh/authorized_keys (она находится на удаленном сервере).

Обратный SSH-туннель (SSH reverse tunnel)

Очевидно, что SSH tunnel можно создать и в обратном направлении. Достаточно подключить прослушивающий порт к другому локальному порту:

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

Данный туннель работает следующий образом: от порта 1999 к remoteserver, а уже после этого обращается к порту 902 на локальном клиенте.

Удаленное выполнение команд с помощью SSH

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

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

После скачивания лога grep можно запустить на удаленной стороне.

Копирование, функция rsync-копирования (rsync через SSH)

Чтобы создать дубликат папки на удаленном сервере, достаточно сначала сжать папку с помощью bzip2, а после извлечь поток bzip2 на другой стороне. Команда для этой операции следующая:

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

Для регулярных бэкапов важной информации используется rsync:

localhost:~$ rsync -az /home/testuser/data proglibserver:backup/

Функция rsync позволяет копировать отличия, сравнивая информацию в разных временных точках. Таким образом, можно восстановить важные данные в случае неудачного сеанса передачи.

GUI-приложения: удаленный запуск через SSH

SSH-туннель поддерживает функцию, позволяющую запускать GUI-приложения удаленно:

localhost:~$ ssh -X remoteserver vmware

Отметим: несмотря на то, что GUI выполняется на удаленном сервере, окно отображается на локальном рабочем столе. В примере для работы запущена консоль виртуальной машины VMware Workstation. Но для успешной реализации команды требуются пакеты X11 и YES для X11Forwarding в файле sshd_config.

Редактирование текстовых файлов

Метод редактирования файлов одной командой предусматривает создание файла в /tmp, а затем копирование в заданную директорию:

localhost:~$ vim scp://user@remoteserver//etc/hosts

Прыжки по хостам

Туннелирование предусматривает переход через несколько хостов, если пользователь сталкивается с сегментацией сети:

localhost:~$ ssh -J host1,host2,host3 user@host4.internal

Параметр -J использует переадресацию для установления сеанса с каждым следующим хостом в цепочке. При этом рабочий сеанс полностью зашифрован — от localhost и до host4.

Фильтрация трафика с помощью iptables

Утилита iptables позволяет устанавливать правила для блокировки или разрешения прохождения трафика: INPUT, FORWARD и OUTPUT. В случае если пользователь не задал никаких правил, этот межсетевой экран будет выполнять заданную по умолчанию фильтрацию. Для установления связи с целевым сервером утилита сравнит IP-адрес инициатора подключения с тем списком, что есть в правилах INPUT, а затем либо даст доступ к серверу, либо запретит его.

Однако работа с iptables требует определенной осторожности. Причина проста: если неверно задать правило фильтрации, удаленный доступ может оказаться просто невозможным до тех пор, пока пользователь не снимет ограничения, получив физический доступ к компьютеру.

Реализация SSH tunnels в Windows

Возможности туннелирования доступны и для тех, кто использует Windows 10: под эту ОС существует ряд SSH-клиентов. Один из самых применяемых — PuTTY. Запуск сервера под Windows — более сложная задача, которая требует от пользователя специализированной квалификации.

PuTTY настраивается достаточно просто: для этого во вкладке Connection открываем SSH Tunnels, где необходимо прописать базовые настройки соединения — Source port (точка входа), Destination (назначение); радиопереключатели Local — Remote — Dynamic определяют тип будущего канала связи. Адрес целевого узла указывается в другом разделе — Session.

Открытия дополнительных портов или развертывания VPN не требуется.

Безопасны ли SSH-туннели

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

Если пользователь забудет о своем подключении, то может выполнить те команды, которые изначально были предназначены к выполнению на локальном узле. Чтобы избежать подобной ошибки (особенно если пользователь имеет права суперпользователя), при запуске канала связи следует указывать параметр -N:

ssh -N -L -g 3389:192.168.0.105:3389 user@rt.example.com

Кроме того, не стоит использовать при подключении к удаленной машине аккаунт суперпользователя, для этих целей подойдет учетная запись с обычными правами. И не забывайте про то, что по завершении работы требуется удалить SSH-туннель.

Анализ HTTP-трафика с mitmproxy

Что такое SSH-туннели: где купить и как использовать

SSH-туннели — это альтернатива прокси и VPN, обеспечивающие анонимность пользователей. Живут SSH в среднем от нескольких недель до нескольких месяцев. Узнайте, где купить их, как сделать и провести настройку.

Содержание скрыть

Что такое SSH-туннель

Простыми словами, это сетевой протокол, используемый для безопасной работы в сети. Уникальное отличие SSH в том, что трафик не просто проксифицируется, но этот факт тщательно скрывается. Никакого перехвата извне, как в случае с обычными proxy — обеспечивается секретность личных данных.

Для чего применяется эта технология:

  • открытие тайного входа (бэкдор) в частные сети;
  • обход межсетевых экранов — почти что хакерство;
  • зашифровка каналов.

Как создать SSH-туннель

В принципе достаточно иметь свою почту Гугла и браузер, который поддерживает анализирование трафика по такому протоколу. Например, создать свой SSH-туннель можно в Google Colab — сервисе, поддерживающим модели нейросетей и выделяющим сервера пользователям под тренировку. Однако наша задача — не работа с нейросетью, а проксирование трафика с помощью готовых скриптов (их как раз и выделяет Google Colab). Подробнее о том, как создать — в этом видео.

Что такое SSH-туннели: где купить и как использовать

Нюансы работы с таким SSH:

  • если закрыть браузер, где запущен скрипт — туннель упадет;
  • работает туннель всего 12 часов, после чего Гугл автоматически обновляет страницу — придется заново запускать скрипт и получать новые IP;
  • активность на вкладке с Colab надо поддерживать каждые 2 минуты, иначе доступ к серверу закрывается, и туннель опять падает — поэтому надо сразу запустить скрипт, который работает 25 секунд на странице, даже если она свернута (о том, как это сделать).

Чем VPN отличается от SSH

SSH-туннель это бюджетный аналог VPN. Здесь практически те же самые функции, но упрощен процесс настройки. Правда, есть и разница:

  • не поддерживается UDP — но поддерживает другой более упорядоченный сетевой протокол транспортного уровня (TCP);
  • не поддерживаются расширенные алгоритмы шифрования, поэтому меньше гарантий, что весь трафик проходит через защищенный протокол;
  • SSH живут меньше.

Таким образом, по сравнению с VPN — этот протокол не столь крут. Например, в VPN пользователь уверен, что весь сетевой трафик проходит через защищенный канал. Но SSH-туннель проще и отлично подходит, когда нужно простое зашифрованное соединение для просмотра web-страниц. Сделать SSH-сервер могут новички, в то время как VPN требует больших навыков.

Главное же отличие в том, что SSH умеет скрывать факт проксификации и не передает информацию в любом направлении. Туннель имеет единственную точку входа и функционирует только с основным протоколом передачи данных (TCP).

Сравнительная таблица, чтобы было понятнее.

Функции SSH VPN
скрытие IP да да
поддержка SSL-шифрования да да
сокрытие факта проксификации да нет
сохранение заголовка пакета да да
работа за фаерволом да да
поддержка UDP нет да
DNS да да
IPV6 нет да
расширенные протоколы шифрования нет да
маскировка трафика нет нет
защита от DPI нет нет

Если вам нужна более крутая машина, которая поддерживает все функции, включая маскировку трафика и защиту от DPI — обратите внимание на китайский Shadowsocks. Однако в отличие от OpenVPN, он не прошел официального аудита и не умеет пробрасывать port в обратную сторону. Но тут его комбинирование с SSH-туннелем позволит создать идеальную защищенную сеть.

Зачем арбитражнику SSH-туннели

Технология SSH позволяет:

  • скрывать реальные IP и факт проксификации;
  • поддерживать SSL-шифрование;
  • проксифицировать все протоколы, включая DNS запросы;
  • фильтровать сетевую передачу данных.

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

Парочка полезных статей даст возможность понять общую схему по работе с различными системами защиты и идентификации пользователя:

Какие возможности дают SSH-туннели арбитражникам:

  • фарминг и отлив Google;
  • фарминг и работа в Facebook;
  • сокрытие не только своего железа, но и всей сети и прокси.

Короче, можно не искать лучшие прокси серверы. С помощью технологии SSH сможете проводить любые действия, которые вам нужны в интернете. Например, создавать множество аккаунтов, обходить антифрод-системы и всяческие запреты в FB, который блокирует акки за рекламу запрещенных товаров. С другой стороны, можно также юзать прокси и добиться того же самого. Вот, например, как мы поднимаем мобильные proxy. Однако в случае с SHH проксирование происходит через отдельный зашифрованный сервер.

Где купить SSH-туннели

Если вы хотите быстро купить SSH, можете найти предложения на форумах. Здесь продаются туннели с гео под любые страны и с гарантией на 24 часа:

Что такое SSH-туннели: где купить и как использовать

  • Zismo;
  • Kit-capper;
  • FB-killa.

Как создать и настроить SSH-туннель на Windows

Реализовать SSH-туннели можно не только через Android/iOS, но и через Windows. Запуск сервера в этом случае — более сложная задача, требующая навыков. Например, для Виндовс 10 придется подключать PuTTY — SSH-клиент. Скачивается он бесплатно на официальном сайте разработчика. Переходите по ссылке, выбираете подходящую версию под конкретную ОС и загружаете.

Подробнее по настройке после скачивания:

  • запустить инсталлятор;
  • кликнуть на кнопку «Далее»;

Что такое SSH-туннели: где купить и как использовать

  • установить;
  • открыть программу;
  • активировать SSH;

Что такое SSH-туннели: где купить и как использовать

Кучу полезного по SSH вы найдете на сайте Хабра:

  • разбор командной строки при подключении к протоколу;
  • использование файла конфигурации;
  • практические примеры использования;
  • устранение проблем с удаленными SSH-туннелями;
  • метод установки VPN по SSH и многое другое.

Заключение

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

Наглядное руководство по SSH-туннелям

Туннели SSH — это зашифрованные TCP-соединения между клиентами и серверами SSH. Трафик входит с одной стороны туннеля и прозрачно выходит с другой. Изначально этот термин относился к туннелям на виртуальных сетевых интерфейсах TUN/TAP, однако сейчас так обычно называют проброс портов SSH.

Например, вот так будет выглядеть схема обратного туннеля, в котором обращение к порту 80 SSH-клиента выполняется через SSH-сервер с определенного IP-адреса ( 1.2.3.4 ):

Здесь и далее все схемы взяты из оригинала статьи

Сценарии использования туннелей*:

  • Предоставление зашифрованных каналов для протоколов, передающих данные «открытым текстом».
  • Открытие бэкдоров в частные сети.
  • Обход межсетевых экранов.

Перечень дополняется. Не стесняйтесь предлагать примеры или исправления
на GitHub.

Проброс портов

Перенаправляет порт из одной системы (локальной или удаленной) в другую.

Проброс локального порта

Проброс локальных портов позволяет перенаправить трафик с SSH-клиента на целевой хост через SSH-сервер. Другими словами, можно получить доступ к удаленным сервисам по зашифрованному соединению так, как будто они локальные. Примеры использования:

  • доступ к удаленному сервису (Redis, Memcached и т. д.) по внутреннему IP-адресу;
  • локальный доступ к ресурсам, размещенным в частной сети;
  • прозрачное проксирование запроса к удаленному сервису.

Проброс удаленного порта

Проброс удаленного порта позволяет направить трафик с SSH-сервера в пункт назначения либо через SSH-клиент, либо через другой удаленный хост. Открывает пользователям в публичных сетях доступ к ресурсам в частных сетях. Примеры использования:

  • открытие доступа к локальному серверу разработки через публичную сеть;
  • предоставление доступа с ограничением по IP-адресу к удаленному ресурсу в частной сети.

Динамический проброс портов

При динамической переадресации портов на SSH-клиенте поднимается SOCKS-прокси для перенаправления TCP-трафика через SSH-сервер на удаленный хост.

Пересылка с системных (privileged) портов

Для пересылки трафика с системных портов (1–1023) необходимо запустить SSH с правами суперпользователя в системе, на которой открывается порт.

sudo ssh -L 80:example.com:80 ssh-server

Флаги командной строки SSH

Ниже приведены несколько полезных флагов при создании туннелей:

-f # переводит процесс ssh в фоновый режим; -n # предотвращает чтение из STDIN; -N # не выполнять удаленные команды. Полезно, если нужно только перенаправить порты; -T # отменяет переназначение терминала.

Вот пример команды для создания SSH-туннеля в фоновом режиме и проброса локального порта через SSH-сервер:

ssh -fnNT -L 127.0.0.1:8080:example.org:80 ssh-server

Для краткости примеры ниже приводятся без флагов командной строки.

Проброс локального порта

Перенаправление соединений с порта локальной системы на порт удаленного хоста:

ssh -L 127.0.0.1:8080:example.org:80 ssh-server

Перенаправляет локальные подключения к 127.0.0.1:8080 на 80-й порт example.org через SSH-сервер. Трафик между локальной системой и SSH-сервером идет по SSH-туннелю. Трафик между SSH-сервером и example.org — нет. С точки зрения example.org трафик идет от SSH-сервера.

ssh -L 8080:example.org:80 ssh-server
ssh -L *:8080:example.org:80 ssh-server

Команды выше открывают доступ к example.org:80 через SSH-туннель для подключений на порт 8080 на всех интерфейсах локальной системы.

ssh -L 192.168.0.1:5432:127.0.0.1:5432 ssh-server

Переадресует соединения с 192.168.0.1:5432 в локальной системе на 127.0.0.1:5432 на SSH-сервере. Обратите внимание, что здесь 127.0.0.1 — localhost с точки зрения SSH-сервера.

Конфигурации SSH

Убедитесь, что на SSH-сервере включена переадресация TCP (по умолчанию так и должно быть). Проверьте запись в файле /etc/ssh/sshd_config :

AllowTcpForwarding yes

При переадресации портов на интерфейсы, отличные от 127.0.0.1, в локальной системе необходимо включить GatewayPorts (в /etc/ssh/ssh_config или в командной строке):

GatewayPorts yes
Сценарии использования

Подходит для случаев, когда требуется защищенное соединение для доступа к удаленному сервису, который работает с незашифрованными данными. Например, Redis и Memcached используют протоколы на основе plaintext-данных.

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

Проброс удаленного порта

Пробрасывает порт на удаленной системе в другую систему.

ssh -R 8080:localhost:80 ssh-server

Перенаправляет трафик с порта 8080 SSH-сервера для всех интерфейсов на порт localhost:80 на локальном компьютере. Если один из интерфейсов смотрит в Интернет, трафик, адресуемый на порт 8080, будет перенаправляться на локальную систему.

ssh -R 1.2.3.4:8080:localhost:80 ssh-server

Переадресует трафик с порта 8080 SSH-сервера на localhost:80 в локальной системе, при этом доступ ко входу в SSH-туннель со стороны сервера разрешен только с IP-адреса 1.2.3.4 (обратите внимание: директиву GatewayPorts необходимо установить в clientspecified ).

Прим. переводчика: здесь, возможно, ошибка. Флаг -R — это binding_address , выбор IP адреса на машине, на котором SSH-сервер будет слушать порт. Соответственно вместо одного человечка с IP должны быть человечки, а вместо ssh_server:8080 должно быть 1.2.3.4:8080 .

ssh -R 8080:example.org:80 ssh-server

Переадресует трафик с порта 8080 SSH-сервера для всех интерфейсов на localhost:80 в локальной системе. Далее трафик из локальной системы направляется на example.org:80. С точки зрения example.org источником трафика выступает локальная система.

Конфигурация SSH-сервера

SSH-сервер конфигурируется в файле /etc/ssh/sshd_config .

По умолчанию переадресуемые порты недоступны для доступа из Интернета. Для переадресации публичного интернет-трафика на локальный компьютер добавьте в sshd_config на удаленном сервере такую строку:

GatewayPorts yes

Также в sshd_config можно указать, каким клиентам разрешен доступ:

GatewayPorts clientspecified

Динамический проброс портов

Перенаправление трафика с нескольких портов на удаленный сервер.

ssh -D 3000 ssh-server

Команда выше поднимает SOCKS-прокси на порту 3000 для всех интерфейсов в локальной системе. Теперь трафик, отправленный через прокси-сервер на SSH-сервер, можно адресовать на любой порт или конечный хост. По умолчанию используется протокол SOCKS5, поддерживающий TCP и UDP.

ssh -D 127.0.0.1:3000 ssh-server

Поднимает SOCKS-прокси на 127.0.0.1:3000 в локальной системе.

При работающем SOCKS-прокси можно настроить браузер на его использование для доступа к ресурсам так, как будто соединения исходят от SSH-сервера. Например, если у SSH-сервера есть доступ к другим серверам в частной сети, с помощью SOCKS-прокси можно заходить на эти серверы локально (словно вы находитесь в той же сети), и не нужно настраивать VPN.

Работу SOCKS-прокси можно проверить командой:

curl -x socks5://127.0.0.1:12345 https://example.org

Конфигурация SSH-клиента

SSH-клиент настраивается в файле /etc/ssh/ssh_config .

Включите GatewayPorts в системе, чтобы открыть доступ другим интерфейсам к SOCKS-прокси:

GatewayPorts yes

Поскольку GatewayPorts конфигурируется на SSH-клиенте, вместо ssh_config для настройки можно использовать параметры командной строки:

ssh -o GatewayPorts=yes -D 3000 ssh-server

Jump-хосты и команды прокси-сервера

Прозрачное подключение к удаленному хосту через промежуточные.

ssh -J user1@jump-host user2@remote-host
ssh -o "ProxyJump user1@jump-host" user2@remote-host

Устанавливает SSH-соединение с jump-хостом и переадресуют трафик на удаленный хост.

Подключается к удаленному хосту через промежуточный jump-хост. Приведенная выше команда должна сработать сразу, если у jump-хоста уже есть SSH-доступ к удаленному хосту. Если нет, можно использовать agent forwarding для проброса SSH-ключа с локального компьютера на удаленный хост.

ssh -J jump-host1,jump-host2 ssh-server

Можно указать несколько jump-хостов через запятую.

ssh -o ProxyCommand="nc -X 5 -x localhost:3000 %h %p" user@remote-host

Подключение к удаленному серверу через SOCKS5 с использованием netcat . С точки зрения сервера, IP-адрес отправителя принадлежит прокси-хосту. При этом для SSH-соединения используется сквозное шифрование, так что прокси-хост видит только зашифрованный трафик между локальной системой и удаленным хостом.

Конфигурация SSH-клиента

SSH-клиент конфигурируется в файле /etc/ssh/ssh_config .

Для подключения agent forwarding можно добавить локальный SSH-ключ к локальному SSH-агенту с помощью ssh-add :

ssh-add

Надежные SSH-туннели

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

По умолчанию TCP-соединение, используемое для создания SSH-туннеля, может разрываться после некоторого периода бездействия. Чтобы это предотвратить, нужно настроить сервер ( /etc/ssh/sshd_config ) на отправку heartbeat-сообщений:

ClientAliveInterval 15 ClientAliveCountMax 4

На отсылку таких сообщений также можно настроить клиент ( /etc/ssh/ssh_config ):

ServerAliveInterval 15 ServerAliveCountMax 4

Использование AutoSSH

Указанные выше настройки могут предотвратить разрывы из-за неактивности, но они не в состоянии восстановить прерванные соединения. Для автоматического перезапуска SSH-туннеля можно воспользоваться утилитой autossh — она создает SSH-туннель и отслеживает его работоспособность.

AutoSSH принимает те же аргументы для настройки переадресации портов, что и SSH:

autossh -R 2222:localhost:22 ssh-server

Эта команда создает туннель, способный восстанавливаться после сетевых сбоев. По умолчанию AutoSSH открывает дополнительные порты на SSH-клиенте/сервере для проверки работоспособности (healthcheck). Если трафик не проходит между healthcheck-портами, AutoSSH перезапускает туннель.

autossh -R 2222:localhost:22 \ -M 0 \ -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" \ remote-host

Флаг -M 0 отключает healthcheck-порты (за проверку работоспособности в этом случае отвечает SSH-клиент). В примере выше сервер должен посылать сигналы каждые 10 секунд. Если не проходят три подряд сигнала, SSH-клиент завершает работу, а AutoSSH поднимает новый туннель.

Дополнительные примеры и сценарии использования

Прозрачный доступ к удаленному ресурсу в частной сети.

Предположим, в частной сети есть Git-репозиторий, доступ к которому возможен только через выделенный сервер в этой сети. Сервер не подключен к Интернету. Есть прямой доступ к серверу, но нет VPN-доступа к частной сети.

Требуется открыть доступ к Git-репозиторию, как если бы подключение к нему шло напрямую из локальной системы. Если есть SSH-доступ к другому серверу, который доступен как с локального компьютера, так и с выделенного сервера, можно создать SSH-туннель и воспользоваться директивами ProxyCommand.

ssh -L 127.0.0.1:22:127.0.0.1:2222 intermediate-host

Команда выше пробрасывает порт 2222 на промежуточном хосте на порт 22 выделенного сервера. Теперь можно подключиться к SSH-серверу на выделенном сервере, несмотря на то, что он недоступен из Интернета.

Прим. переводчика: возможно, что здесь тоже ошибка: перепутаны местами 22 и 2222 порты в команде.

ssh -p 2222 user@localhost

Для большего удобства можно добавить несколько директив в локальный ~/.ssh/config :

Host git.private.network HostName git.private.network ForwardAgent yes ProxyCommand ssh private nc %h %p Host private HostName localhost Port 2222 User private-user ForwardAgent yes ProxyCommand ssh tunnel@intermediate-host nc %h %p

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

P.S.

Читайте также в нашем блоге:

  • «Автоматизация SSH-доступа к нодам Kubernetes с помощью Fabric и интеграции от CoreOS»;
  • «Немного хардкора: как поднять Kubernetes на двух старых ноутбуках с Gentoo»;
  • «Как с tcpserver и netcat открыть туннель в Kubernetes pod или контейнер».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *