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

    Как использовать 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_port [email protected]

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

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

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

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

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

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

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

    Для этого в приложении PuTTY в Windows выберите «Соединение»> «SSH»> «Туннели». Выберите опцию «Local». Для «Source Port» введите локальный порт. В поле «Destination» введите адрес и порт назначения в форме remote_address: remote_port.

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

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

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

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

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

    ssh -R remote_port: local_address: local_port имя_пользователя@server.com

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

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

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

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

    Например, если вы хотите настроить приведенный выше пример, вы должны ввести 8888 в качестве порта источника и локальный: 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 [email protected]

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

    ssh -D 8888 [email protected]

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

    Для этого в PuTTY в Windows выберите Соединение> SSH> Туннели. Выберите опцию «Динамический». Для «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 Proxy пустыми.

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