Как использовать туннелирование 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 local_port: remote_address: remote_port username@server.com

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

ssh -L 8888: 192.168.1.111: 1234 bob@ssh.youroffice.com

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

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

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

ssh -L 8888: localhost: 1234 bob@ssh.youroffice.com

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

Чтобы сделать это в приложении PuTTY в Windows, выберите Connection> SSH> Tunnels. Выберите «Локальный» вариант. Для «Source Port» введите локальный порт. Для «Destination» введите адрес назначения и порт в форме remote_address: remote_port.

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

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

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

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

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

ssh -R remote_port: local_address: local_port username@server.com

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

ssh -R 8888: localhost: 1234 bob@ssh.youroffice.com

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

Чтобы сделать это в PuTTY в Windows, выберите Connection> SSH> Tunnels. Выберите «Удаленный» вариант. Для «Source Port» введите удаленный порт. Для «Destination» введите адрес и порт назначения в форме local_address: local_port.

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

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

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

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

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

Например, предположим, что вы используете общедоступную сеть 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 local_port username@server.com

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

ssh -D 8888 bob@ssh.yourhome.com

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

Чтобы сделать это в PuTTY в Windows, выберите Connection> SSH> Tunnels. Выберите «Динамический» вариант. Для «Source Port» введите локальный порт.

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

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.