Инструменты безопасности с открытым исходным кодом

Переправка портов посредством OpenSSH


Хотя SSH первоначально предназначался для взаимодействия на уровне командной строки, подобно Telnet, его можно применять также для создания безопасного туннеля между двумя машинами для произвольного приложения. Можно создать безопасное соединение между двумя серверами с помощью встроенной в SSH возможности переправки порта. Чтобы это сработало, SSH должен выполняться на обоих концах соединения. Соединение можно организовать для любого сервиса с любым портом, выполнив на клиентской стороне следующую инструкцию:

ssh -L локальный_порт:удаленный_хост:удаленный_порт -N удаленный_хост

где надо заменить:

  • локальный_порт - случайно выбранным большим номером порта для создания нового криптографически защищенного соединения;
  • удаленный_хост - IP-адресом или именем серверного хоста на другой стороне соединения;
  • удаленный_порт - портом сервиса, который вы желаете туннелировать на удаленную сторону;

Опция -L предписывает SSH слушать локальный порт на локальном хосте и переправлять любые соединения на удаленный порт удаленного хоста. Опция -N освобождает SSH от попыток входа; требуется просто поддерживать соединение открытым для переправляемого трафика.

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

Ниже представлены два примера, которые показывают, как это работает.

Пример 1: Создание криптографически защищенного соединения для электронной почты с помощью OpenSSH

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


ssh -L 5000:192.168.1.2:25 192.168.1.2 -N &

Эта команда задает порт 5000 на локальной машине для туннелирования почты (порт 25) на удаленный почтовый сервер. Поэтому, если вы настроите свой почтовый клиент для соединения с localhost:5000 вместо подразумеваемого почтового порта, SSH будет автоматически шифровать и переправлять трафик на порт 25 вашего почтового сервера. Теперь вы можете получать и посылать почту на эту машину, не опасаясь, что ее кто-то перехватит.

Пример 2: Создание безопасного web-соединения

Допустим, вы желаете соединиться со своим web-сервером для выполнения защищенной транзакции. Если сервер не настроен для поддержки SSL, вы все равно сможете при помощи SSH организовать безопасное туннелирование своего web-трафика на сервер. Если ваш web-сервер расположен по адресу 192.168.1.3, то командная строка будет выглядеть примерно так:

ssh -L 5000:192.168.1.3:80 192.168.1.3 -N &

Теперь вы можете соединиться, вводя localhost:5000 в web-навигаторе, и по безопасному туннелю ваш трафик будет переправляться в порт 80 удаленной машины. Можно переправлять несколько портов на одной машине. Например, команда

ssh -L 5000:192.168.1.2:25 -L 5001:192.168.1.2:80 -N 192.168.1.2 -N &

будет переправлять весь трафик с локального порта 5000 на почтовый порт и с порта 5001 - на порт 80 удаленной машины с адресом 192.168.1.2. Конечно, предполагается, что вы имеете почтовый счет на удаленном сервере.

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


Содержание раздела