SSH-туннели: практические примеры и ключевые функции


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

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

Туннель через SSH – стандарт, обеспечивающий безопасный удаленный доступ в систему и передачу файлов по защищённым сетям. Кроме того, он защищает трафик данных приложения за счёт переадресации портов, обычно это туннелирование произвольного порта TCP/IP через SSH. То есть трафик направляется на поток внутри зашифрованного SSH-соединения и не может быть перехвачен извне. SSH-туннелирование особенно актуально, если требуется обеспечить безопасность устаревших приложений, которые не поддерживают шифрование.

В рамках SSH-туннелирования устанавливается соединение между клиентом и сервером, оно зашифровывается и тем самым позволяет защитить конфиденциальность и целостность данных.

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

SSH-туннели применяются для:

  • Предоставления зашифрованных каналов для протоколов, использующих открытый текст
  • Открытия бэкдоров в частные сети
  • Обхода сетевых экранов

Создание и настройка SSH-туннеля

Переадресация портов SSH может осуществляться по трём типам:

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

Переадресация локального порта

Перенаправление порта SSH-клиента (на локальном компьютере), на порт SSH-сервера (удаленного компьютера) и далее на порт, расположенный на конечном компьютере. Тот в свою очередь может являться удаленным SSH-сервером или каким-либо иным компьютером.

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

В Linux, MacOS и прочих юниксовых системах, для установки локальной переадресации портов нужно использовать следующую команду:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Понадобятся такие параметры:

[LOCAL_IP:]LOCAL_PORT – IP-адрес и номер порта локального компьютера. Если локальный IP не указан, SSH-клиент привязывается к локальному хосту.

DESTINATION:DESTINATION_PORT – IP/имя хоста и порт машины назначения.

[USER@]SERVER_IP – Удаленный пользователь и IP-адрес сервера.

В качестве LOCAL_PORT вы можете использовать любой номер порта больше, чем 1024. Значения меньше 1024 являются привилегированными портами и могут использоваться только пользователем root. Если SSH-сервер прослушивает не 22-й порт, который стоит по умолчанию, используйте опцию -p [PORT_NUMBER].

Имя хоста назначения должно иметь разрешение с сервера SSH.

Переадресация удаленного порта

Перенаправление удаленного порта является противоположным случаю с портом локальным. Здесь можно перенаправить порт на удаленном компьютере (ssh-сервер) на порт локального компьютера (ssh-клиент), а затем на порт конечного компьютера.

Для перенаправления нужно:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

Понадобятся такие параметры:

[REMOTE:]REMOTE_PORT – IP-адрес и номер порта удаленного SSH-сервера. Если значение REMOTE не выставлено, удаленный SSH-сервер свяжется сразу со всеми интерфейсами.

DESTINATION:DESTINATION_PORT – IP/имя хоста и порт машины назначения.

[USER@]SERVER_IP – Удаленный пользователь SSH и IP-адрес сервера.

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

Динамическая переадресация портов

Динамическая переадресация портов даёт возможность создать сокет на локальном компьютере (SSH-клиент), который выступает в качестве прокси-сервера SOCKS. Когда клиент подсоединяется к данному порту, соединение перенаправляется на удаленный компьютер(SSH-сервер), который далее идёт на динамический порт компьютера назначения.

Для создания переадресации динамического порта:

ssh -D [LOCAL_IP:]LOCAL_PORT [USER@]SSH_SERVER

Понадобятся такие параметры:

[LOCAL_IP:]LOCAL_PORT – IP-адрес и номер порта локального компьютера. Если LOCAL_IP не указан, SSH-клиент привязывается к localhost.

[USER@]SERVER_IP – Удаленный пользователь SSH и IP-адрес сервера.

Типовым примером динамической переадресации будет туннелирование трафика браузера через SSH-сервер.

Чтобы создать туннель SOCKS на порту 9090, нужно ввести следующую команду:

ssh -D 9090 -N -f user@remote.host

После установки туннелирования можно настроить приложение для его применения. Перенаправление портов нужно настраивать отдельно для каждого приложения, траффик с которого вы хотите перенаправить по SSH-туннелю.

Настройка SSH-туннелирования в Windows

На Windows туннели SSH создаются с помощью клиента PuTTY. Запустите его и укажите IP-адрес SSH-сервера в поле Host name.

Настройка SSH в Windows

В разделе Connection разверните SSH и выберите Tunnels. Чтобы настроить локальную переадресацию, выберите Local, для удалённой – Remote и Dynamic для динамической переадресации портов.

  • При настройке локальной переадресации, введите локальный порт переадресации в поле Source Port field и хост назначения и IP-адрес в поле Destination, например, localhost:5901.
  • Для перенаправления удаленного порта введите порт перенапраaвления удаленного SSH-сервера в поле Source Port и целевой хост и IP-адрес в поле Destination, например localhost:3000.
  • При настройке динамического перенаправления введите в поле Source Port только локальный порт SOCKS.

Настройка SSH

Нажмите на кнопку Add

SSH в Windows

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

SSH

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

Далее разберём, как можно использовать функции SSH.

Автоматизация копирования ключа SSH

Чтобы не копировать файлы вручную, можно автоматизировать этот процесс с помощью специальной команды. С её помощью можно копировать с вашей системы ключ по умолчанию ~/.ssh/id_rsa.pub в ~/.ssh/authorized_keys на удалённом сервере.

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

Удалённое выполнение команд

Вы можете связать команду ssh с другими командам. Для этого вставьте название команды, которую нужно удалённо запустить, вместо последнего параметра в кавычках.

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

Это позволяет выполнить grep на локальной системе после скачивания лога по ssh-каналу.

Копирование папки по SSH с локального сервера на удалённый

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

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

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

Команда, которая понравится пользователям vim. Вы сможете редактировать файлы по scp всего одной командой. Файл создаётся локально в /tmp, а когда происходит его сохранение из vim, копируется обратно.

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

Что лучше SSH или VPN

Всё зависит от целей и задач. В целом, оба варианта обеспечивают надёжное шифрование и защиту данных.

VPN сложнее в настройке, но проще в использовании, а SSH – наоборот.

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

поделиться: 
(0)
автор: Ольга Цветкова
опубликовано: 08.11.2021
Читайте нас: 
Вверх!