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

Клиент SSH подключается к серверу Secure Shell, который позволяет вам запускать команды терминала, как если бы вы сидели перед другим компьютером. Но клиент SSH также позволяет «туннелировать» порт между вашей локальной системой и удаленным сервером SSH.

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

Вы можете сделать это с помощью sshкоманды, включенной в Linux, macOS и другие UNIX-подобные операционные системы. В Windows, в которой нет встроенной команды ssh, мы рекомендуем бесплатный инструмент PuTTY для подключения к серверам SSH. Он также поддерживает SSH-туннелирование.

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

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

Для этого вы устанавливаете SSH-соединение с SSH-сервером и указываете клиенту пересылать трафик с определенного порта с вашего локального ПК - например, порта 1234 - на адрес сервера базы данных и его порт в офисной сети. Итак, когда вы пытаетесь получить доступ к серверу базы данных через порт 1234 вашего текущего ПК, «localhost», этот трафик автоматически «туннелируется» через соединение SSH и отправляется на сервер базы данных. Сервер SSH находится посередине, перенаправляя трафик туда и обратно. Вы можете использовать любую командную строку или графический инструмент для доступа к серверу базы данных, как если бы он работал на вашем локальном ПК.

Чтобы использовать локальную пересылку, подключитесь к серверу SSH как обычно, но также укажите -Lаргумент. Синтаксис:

ssh -L локальный_порт: удаленный_адрес: удаленный_порт имя_пользователя@server.com

Например, предположим, что сервер базы данных в вашем офисе расположен по адресу 192.168.1.111 в офисной сети. У вас есть доступ к SSH-серверу офиса по адресу ssh.youroffice.com, а ваша учетная запись на SSH-сервере - bob. В этом случае ваша команда будет выглядеть так:

ssh -L 8888: 192.168.1.111: 1234 [email protected]

После выполнения этой команды вы сможете получить доступ к серверу базы данных через порт 8888 на localhost. Итак, если сервер базы данных предлагает веб-доступ, вы можете подключить // localhost: 8888 к своему веб-браузеру, чтобы получить к нему доступ. Если у вас есть инструмент командной строки, которому нужен сетевой адрес базы данных, вы должны указать его на localhost: 8888. Весь трафик, отправляемый на порт 8888 на вашем ПК, будет туннелироваться на 192.168.1.111:1234 в вашей офисной сети.

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

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

ssh -L 8888: локальный: 1234 [email protected]

Когда вы пытаетесь получить доступ к серверу базы данных через порт 8888 на вашем текущем ПК, трафик будет отправляться через соединение SSH. Когда он поступает в систему, на которой запущен SSH-сервер, SSH-сервер отправляет его на порт 1234 на «localhost», который является тем же самым компьютером, на котором запущен сам SSH-сервер. Таким образом, «localhost» в приведенной выше команде означает «localhost» с точки зрения удаленного сервера.

Для этого в приложении PuTTY в Windows выберите «Подключение»> «SSH»> «Туннели». Выберите вариант «Местный». В поле «Исходный порт» введите локальный порт. В поле «Назначение» введите адрес назначения и порт в форме удаленный_адрес: удаленный_порт.

Например, если вы хотите настроить тот же туннель SSH, что и выше, вы должны ввести его 8888как исходный порт и localhost:1234как место назначения. Затем нажмите «Добавить», а затем «Открыть», чтобы открыть соединение SSH. Вам также, конечно же, нужно будет ввести адрес и порт самого SSH-сервера на главном экране «Сессия» перед подключением.

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

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

Предполагая, что вы можете получить доступ к удаленному серверу SSH, вы можете подключиться к этому серверу SSH и использовать переадресацию удаленного порта. Ваш SSH-клиент скажет серверу перенаправить определенный порт, скажем, порт 1234, на SSH-сервере на определенный адрес и порт на вашем текущем ПК или в локальной сети. Когда кто-то обращается к порту 1234 на SSH-сервере, этот трафик автоматически «туннелируется» через SSH-соединение. Любой, у кого есть доступ к SSH-серверу, сможет получить доступ к веб-серверу, запущенному на вашем ПК. По сути, это способ туннелирования через брандмауэры.

Чтобы использовать удаленную пересылку, используйте sshкоманду с -Rаргументом. Синтаксис во многом такой же, как и при локальной пересылке:

ssh -R удаленный_порт: локальный_адрес: локальный_порт имя_пользователя@server.com

Допустим, вы хотите сделать так, чтобы серверное приложение слушало порт 1234 на локальном ПК, доступный на порту 8888 на удаленном SSH-сервере. Адрес SSH-сервера ssh.youroffice.comи ваше имя пользователя на SSH-сервере bob . Вы запустите следующую команду:

ssh -R 8888: локальный: 1234 [email protected]

Затем кто-то может подключиться к серверу SSH через порт 8888, и это соединение будет туннелировано к серверному приложению, работающему на порту 1234 на локальном ПК, с которого вы установили соединение.

Для этого в PuTTY в Windows выберите «Подключение»> «SSH»> «Туннели». Выберите вариант «Удаленный». В поле «Порт источника» введите удаленный порт. В поле «Назначение» введите адрес и порт назначения в форме local_address: local_port.

Например, если вы хотите настроить приведенный выше пример, вы должны ввести 8888как исходный порт и localhost:1234как место назначения. Затем нажмите «Добавить», а затем «Открыть», чтобы открыть соединение SSH. Вам также, конечно же, нужно будет ввести адрес и порт самого SSH-сервера на главном экране «Сессия» перед подключением.

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

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

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

СВЯЗАННЫЕ: В чем разница между VPN и прокси?

Также существует «динамическое перенаправление портов», которое работает аналогично прокси или VPN. Клиент SSH создаст прокси-сервер SOCKS, который вы можете настроить для использования в приложениях. Весь трафик, отправляемый через прокси, будет отправлен через SSH-сервер. Это похоже на локальную переадресацию - он берет локальный трафик, отправленный на определенный порт на вашем ПК, и отправляет его через SSH-соединение в удаленное место.

СВЯЗАННЫЕ: Почему использование общедоступной сети Wi-Fi может быть опасным, даже при доступе к зашифрованным веб-сайтам

Например, предположим, что вы используете общедоступную сеть Wi-Fi. Вы хотите безопасно просматривать веб-страницы без слежки. Если у вас есть доступ к серверу SSH дома, вы можете подключиться к нему и использовать динамическую переадресацию портов. Клиент SSH создаст прокси-сервер SOCKS на вашем ПК. Весь трафик, отправляемый на этот прокси-сервер, будет отправлен через соединение с SSH-сервером. Никто, отслеживающий общедоступную сеть Wi-Fi, не сможет отслеживать ваши просмотры или подвергать цензуре веб-сайты, к которым вы можете получить доступ. С точки зрения любого посещаемого вами веб-сайта это будет похоже на то, как если бы вы сидели перед своим компьютером дома. Это также означает, что вы можете использовать этот трюк для доступа к веб-сайтам только для США, находясь за пределами США - конечно, при условии, что у вас есть доступ к SSH-серверу в США.

В качестве другого примера вы можете получить доступ к приложению медиа-сервера, которое есть в вашей домашней сети. По соображениям безопасности у вас может быть только SSH-сервер, подключенный к Интернету. Вы не разрешаете входящие подключения из Интернета к вашему приложению медиа-сервера. Вы можете настроить динамическую переадресацию портов, настроить веб-браузер для использования прокси-сервера SOCKS, а затем получить доступ к серверам, работающим в вашей домашней сети, через веб-браузер, как если бы вы сидели перед своей системой SSH дома. Например, если ваш медиа-сервер расположен на порту 192.168.1.123 в вашей домашней сети, вы можете подключить адрес 192.168.1.123к любому приложению, используя прокси-сервер SOCKS, и вы получите доступ к медиа-серверу, как если бы вы были в своей домашней сети.

Чтобы использовать динамическую пересылку, запустите команду ssh с -Dаргументом, например:

ssh -D локальный_порт имя_пользователя@server.com

Например, предположим, что у вас есть доступ к SSH-серверу ssh.yourhome.comи ваше имя пользователя на SSH-сервере bob. Вы хотите использовать динамическую пересылку для открытия прокси-сервера SOCKS на порту 8888 на текущем ПК. Вы запустите следующую команду:

ssh -D 8888 [email protected]

Затем вы можете настроить веб-браузер или другое приложение на использование вашего локального IP-адреса (127.0.01) и порта 8888. Весь трафик от этого приложения будет перенаправлен через туннель.

Для этого в PuTTY в Windows выберите «Подключение»> «SSH»> «Туннели». Выберите вариант «Динамический». В поле «Исходный порт» введите локальный порт.

Например, если вы хотите создать прокси-сервер SOCKS на порту 8888, вы должны ввести его 8888в качестве исходного порта. Затем нажмите «Добавить», а затем «Открыть», чтобы открыть соединение SSH. Вам также, конечно же, нужно будет ввести адрес и порт самого SSH-сервера на главном экране «Сессия» перед подключением.

Затем вы можете настроить приложение для доступа к прокси-серверу SOCKS на вашем локальном ПК (то есть IP-адрес 127.0.0.1, который указывает на ваш локальный ПК) и указать правильный порт.

СВЯЗАННЫЕ: Как настроить прокси-сервер в Firefox

Например, вы можете настроить Firefox для использования прокси-сервера SOCKS. Это особенно полезно, потому что Firefox может иметь свои собственные настройки прокси-сервера и не должен использовать общесистемные настройки прокси. Firefox будет отправлять свой трафик через туннель SSH, в то время как другие приложения будут использовать ваше интернет-соединение в обычном режиме.

При этом в Firefox выберите «Ручная настройка прокси», введите «127.0.0.1» в поле хоста SOCKS и введите динамический порт в поле «Порт». Оставьте поля HTTP Proxy, SSL Proxy и FTP Proxy пустыми.

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