Создание туннеля с удаленным сервером. Как получить доступ к серверу Linux за NAT через обратный туннель SSH. SSH-туннель с локальной точкой входа
Много лет назад тег td использовался для вёрстки сайтов, что не является его прямым назначением. А с ростом популярности CSS идея «таблицы - это плохо » укоренилась в мозгах многих разработчиков. Но это совсем не так - таблицы плохи только тогда, когда их используют не по назначению. То есть не для отображения табличных данных: электронных таблиц, календарей, и т.д. Если вам необходимо вставить на страницу подобные данные, не стоит сомневаться - смело используйте HTML-таблицы .
Те, кто начал заниматься веб-разработкой уже после того, как табличная вёрстка впала «в немилость », могут не знать всех элементов, используемых в HTML-таблицах . Один из распространённых вопросов от них звучит так: «В чём разница между табличными тегами
Что такое тег ?
HTML тег td расшифровывается как table data («табличные данные »). Он создаёт ячейки в определённом ряду таблицы. Именно в этот тег необходимо вставлять текст и изображения.
Что такое тег ?
Тег
расшифровывается как table header
(«заголовок таблицы
»). Он во многом похож на . Он принимает такой же тип содержимого (хотя изображение в
лучше не вставлять
), но обозначает одну ячейку как заглавную.
Большинство браузеров отображают текст в такой ячейке жирным шрифтом и выравнивают его по центру. Конечно, для оформления заголовков таблицы и содержимого ячеек можно и нужно использовать CSS
.
Когда стоит использовать , а не ?
Тэг
(а не теги tr
и td
) используется для установки содержимого ячейки заголовком определённой колонки или ряда.
Заголовки таблицы обычно расположены по верхнему или левому краю таблицы - в верхнем ряду как заголовки колонки или в первой колонке слева как заголовки ряда. Ячейки-заголовки показывают, что за содержимое расположено в таблице рядом или под ними, облегчая восприятие таблицы.
Не используйте
для оформления ячеек. Поскольку браузеры обычно меняют внешний вид ячеек-заголовков, некоторые веб-дизайнеры пользуются этой особенностью для выделения и центровки шрифта. Так не следует делать сразу по нескольким причинам:
- Нельзя полагаться на то, что все браузеры будут отображать ваш контент одинаково. Будущая версия браузера может поменять цвет, используемый по умолчанию или вообще перестать выделять содержимое тега
. Поэтому никогда не стоит полагаться на встроенные стили браузеров и использовать данный HTML-элемент
;
- Это семантически неправильно. Некоторые пользовательские агенты могут читать голосом содержимое таблиц и добавлять «заголовок таблицы: ваш текст
» при встрече с ячейкой
. Кроме этого некоторые веб-приложения могут размещать заголовки по верхней кромке страницы. Это станет проблемой, если ячейка не является заголовком, а используется исключительно для оформления.
Использование неподходящих тегов может ограничить доступность вашего контента для многих пользователей. Особенно для тех, кто использует различные вспомогательные устройства.
Для оформления ячеек следует применять CSS
. Разделение стиля (CSS
) и структуры (HTML тег td
) - общепринятый метод веб-дизайна уже много лет. Повторим ещё раз: используйте
потому, что содержимое ячейки - заголовок, а не потому, что вам нравится, как это по умолчанию отображает ваш браузер.
Перевод статьи “What’s the difference between th and td HTML table tags?
” был подготовлен дружной командой проекта .
Хорошо
Плохо
SSH туннелирование пригодится для обхода неких ограничений установленных брандмауэром или же просто для создания безопасного туннеля передачи данных. Кроме прямого SSH туннелирования можно также сделать проброс данных с локального порта через SSH туннель на некий порт некой удалённой машины или наоборот.
Как в случае прямого SSH туннелирования так и с пробросом порта, на одной из сторон всегда должен быть установлен рабочий SSH сервер! SSH туннелирование даёт возможность бродить по сети от имени того компьютера, к которому был организован SSH туннель. Например если у нас имеется доступ к SSH где-то в Зимбабве, то при помощи SSH туннеля мы можем лазить по сети от имени Зимбабве:)
Прямое SSH туннелирование
Что имеется ввиду под "Прямое SSH туннелирование
"? Прямое SSH туннелирование это когда SSH клиент запускается в режиме sock-proxy (опция -D
) и соединившись с удалённой машиной по SSH протоколу передает через неё (удалённую машину
) TCP трафик, например сессия прямого SSH туннеля с удалённой машиной через консольный SSH клиент (OpenSSH
) в Windows:
C:\OpenSSH\bin>
ssh
-D
4444
-p
28666
user@
remotehost.com
The authenticity of host "remotehost.com (96.172.128.114)"
cant be establishe
d.
RSA key fingerprint is 5e:ea:62
:5f:fc:3b:b2:38
:d6:ba:6b:aa:65
:3f:d4:35
.
Are you sure you want to continue
connecting (yes/
no)
? y
Please type
"yes"
or "no"
: yes
Warning: Permanently added "remotehost.com,96.172.128.114"
(RSA)
to the list o
f known hosts.
user@
remotehost.com password:
Last login: Thu Feb 7
03:34
:45
2013
from 108.95.46.202
[
user@
remotehost ~]
$
Запуская SSH клиент с опцией -D 4444
мы повелеваем ему после запуска прослушивать локальный порт 4444 и после подключения к удалённому хосту remotehost.com, на удалённый порт -p
28666 и с именем пользователя user, отправлять наш TCP трафик к месту назначения от своего имени - т.е. от имени remotehost.com с ИП 96.172.128.114.
Проброс порта через SSH туннель на порт удалённой машины
В этом случае, после подключения по SSH протоколу с удалённой машиной [email protected], данные с локального порта через SSH туннель удаленной машины будут переданы будут переданы дальше на некий порт некой удалённой машины, например прокси-серверу. Выглядит это примерно так:
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost.com
Аналогично предыдущему примеру с той лишь разницей, что конечной точкой пересылающей/принимающей наш TCP трафик будет не [email protected], а некий host:hostport
Есть также вариант проброса TCP трафик с удалённого порта удалённой машины [email protected] на локальный порт локальной машины или ещё куда-нибудь.
ssh
-R
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost.com
В консольных ssh клиентах для Unix подобных ОС
есть ещё одна полезная опция -C
(Requests compression of all data
) для сжатия данных, которая отсутствует в ssh клиенте (OpenSSH
) для Windows, но есть в PLINK.EXE
от PuTTY .
В качестве SSHD для Windows можно предложить
WinSSHD , а в качестве консольного SSH клиента под Windows OpenSSH соответственно или на худой конец PLINK.EXE
от PuTTY .
SSH тунель в PuTTY
Для использования в PuTTY SSH туннелирования в настройках " Сonnection -> SSH -> Tunnels " введите:
Source port: 4444
Destination: localhost:4444
Отметьте пункт " Dynamic " и нажмите " Add ". В " Session " укажите нужное " Host Name " имя хоста, укажите SSH протокол и сохраните настройки выбрав в " Saved Sessions " подходящее имя, ну, например, " HostName aka ssh tunnel on 4444 " и сохраните " Save ", после чего двойным кликом на этом имени установите соединение.
Когда SSH-соединение будет установлено, мы сможем
использовать свой браузер через локальны прокси на порту 4444. Зайдите на любую веб-страницу, где определяется ваш IP адрес и убедитесь в том, что определяется не ваш реальный IP адрес, а IP адрес удаленной машины.
Вложенные SSH туннели
Допускаются вложенные SSH туннели, например:
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost1.com \
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost2.com
ssh
-L
192.168.0.2:8080
:127.1
:9999
user@
8.8.8.8 \
ssh
-L
127.1
:9999
:127.1
:80
user2@
10.1.1.2
В этом примере (рисунок ниже
) мы бросаем данные с порта 8080 компьютера "А" (192.168.0.2
), на локальный хост и порт 9999 компьютера "Б" (8.8.8.8
), а сразу после подключения к компьютеру "Б" (8.8.8.8
) запускаем на нём ssh клиент, принимаем данные (127.1:9999
) и бросаем их дальше на локальный хост 127.1:80 компьютера внутренней сети 10.1.1.2.
Реверс сокс-прокси. По идее офицеры службы безопасности, которые озабочены запретом Интернета на машине 10.1.1.2, должны повыдёргивать на попе все волосы, ибо приведённая ниже команда должна организовать доступ к сети Интернет для машины 10.1.1.2 через сокс-прокси, который запущен на машине «А».
ssh
-D
8080
-R
127.1
:8080
:127.1
:8080
user@
8.8.8.8 \
ssh
-R
127.1
:8080
:127.1
:8080
user@
10.1.1.2
Конфигурация SSHD
Для гарантированного обхода ограничений фаервола можно в конфигурации SSHD демона /etc/ssh/sshd_config открыть сразу несколько портов
, т.е. SSHD будет принимать запросы сразу по нескольким портам, например.
Существует три различных типа туннелирования, и все они используются для решения разных задач. Каждая задача предполагает использование SSH-сервера
для перенаправления трафика из одного сетевого порта в другой. Трафик передается по зашифрованному SSH-соединению
, поэтому его нельзя отследить или изменить в процессе передачи:
Туннелирование можно реализовать с помощью ssh-команды в Linux
, Mac OS
и операционных системах семейства UNIX
. Для пользователей Windows
, где нет встроенной ssh-команды
, мы предлагаем бесплатный инструмент PuTTY
. Он умеет подключаться к SSH-серверам
. Он также поддерживает SSH-туннелирование
.
Локальное перенаправление портов (port forwarding): получаем доступ к удалённым ресурсам на локальной системе
«Локальное перенаправление портов
» позволяет осуществлять доступ к ресурсам, находящимся внутри локальной сети. Предположим, что нужно попасть на офисный сервер БД, сидя дома. В целях безопасности этот сервер настроен так, чтобы принимать подключения только с ПК, находящихся в локальной сети офиса. Но если у вас есть доступ к SSH-серверу
, находящемуся в офисе, и этот SSH-сервер
разрешает подключения из-за пределов офисной сети, то к нему можно подключиться из дома. Затем осуществить доступ к БД. Проще защитить от атак один SSH-сервер
, чем защищать каждый ресурс локальной сети по отдельности.
Чтобы сделать это, вы устанавливаете SSH-соединение
с SSH-сервером
и говорите клиенту передать трафик с указанного порта на локальном ПК. Например, с порта 1234
на адрес сервера базы данных и его порт внутри офисной сети. Когда вы пытаетесь получить доступ к БД через порт 1234
на вашем ПК («localhost
») трафик автоматически «туннелируется
» по SSH-соединению
и отправляется на сервер БД.
SSH-сервер
выступает посредником, пересылая трафик туда-сюда. При этом можно использовать любую командную строку или графический инструмент для осуществления доступа к базе данных, как вы обычно делаете это на локальном ПК.
Чтобы использовать локальное перенаправление, подключитесь к SSH-серверу
с использованием вспомогательного аргумента -L
. Синтаксис для туннелирования трафика будет следующим:
ssh -L local_port:remote_address:remote_port [email protected]
Предположим, что офисный сервер находится по адресу 192.168.1.111
. У вас есть доступ к SSH-серверу
через адрес ssh.youroffice.com
, и имя вашего аккаунта на SSH-сервере — bob
. В таком случае необходимая команда будет выглядеть следующим образом:
ssh -L 8888:192.168.1.111:1234 [email protected]
Запустив эту команду, вы попадете на офисный сервер баз данных через порт 8888
на localhost
. Если у СУБД есть веб-интерфейс, можно вписать в адресную строку браузера 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
, выберите опцию Connection > SSH > Tunnels
. Далее опцию «Local
». В поле «Source Port
» укажите локальный порт. В поле «Destination
удалённый_адрес:удалённый_порт
.
Например, если нужно настроить SSH-тоннель
, как это сделано выше, то введите 8888
в качестве порта-источника и localhost:1234
в качестве целевого адреса. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
. До подключения SSH
туннелирования нужно ввести адрес и порт самого SSH-сервера
в разделе «Session
»:
Дистанционное перенаправление портов: открываем доступ к локальным ресурсам на удалённой системе
«Дистанционное перенаправление портов
» — ситуация, противоположная локальному перенаправлению, и используется не так часто. Она позволяет открывать доступ к ресурсам на локальном ПК через SSH-сервер
. Предположим, что на локальном ПК настроен веб-сервер. Но ваш ПК защищён сетевым экраном, который не пропускает входящий трафик на сервер.
Если есть доступ к удалённому SSH-серверу
, можно подключиться к этому SSH-серверу
и использовать дистанционное перенаправление портов. Ваш SSH-клиент
укажет серверу перенаправлять трафик с определённого порта – скажем, 1234
– на SSH-сервере
на указанный адрес и порт на вашем ПК или внутри локальной сети. Когда кто-то подключается к порту 1234
на SSH-сервере
, этот трафик автоматически «туннелируется
» по SSH-соединению
. Любой, кто подключается к SSH-серверу
, сможет получить доступ к серверу, запущенному на вашем ПК. Это достаточно эффективный способ обхода фаерволов.
Чтобы воспользоваться дистанционным туннелированием IP
, используйте ssh-команду
с аргументом —R
. Синтаксис здесь будет практически таким же, как и в случае с локальным перенаправлением:
ssh -R remote_port:local_address:local_port [email protected]
Предположим, что нужно создать серверное приложение, прослушивающее порт 1234
на вашем ПК. Оно доступно через порт 8888
на удалённом SSH-сервере
. Адрес SSH-сервера ssh.youroffice.com
, а ваше имя пользователя на SSH-сервере bob
. Значит, команда будет следующей:
ssh -R 8888:localhost:1234 [email protected]
Затем кто-то может подключиться к SSH-серверу
через порт 8888
, и это подключение будет туннелировано на серверное приложение, запущенное на порте 1234 ПК
, с которого вы подключались:
Чтобы сделать это в PuTTY
для Windows
, выберите опцию Connection > SSH > Tunnels
. Далее – опцию «Remote
». В поле «Source Port
» укажите удалённый порт. В поле «Destination
» введите целевой адрес и порт в формате локальный_адрес:локальный_порт
.
Например, если нужно настроить SSH-тоннель
, как это сделано выше, то укажите 8888
в качестве порта-источника и localhost:1234
в качестве целевого адреса. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
. До подключения нужно будет ввести адрес и порт самого SSH-сервера
в разделе «Session
».
После этого пользователи смогут подключаться к порту 8888
на SSH-сервере
и их трафик будет передаваться на порт 1234
на вашей локальной системе:
По умолчанию, удалённый SSH-сервер
будет слушать только подключения с того же хоста. Другими словами, доступ будет только у людей из той же системы, на которой запущен SSH-сервер
. При туннелировании трафика так делается в целях безопасности.
Нужно включить опцию «GatewayPorts
» в sshd_config
на удалённом SSH-сервере
, если хотите изменить эти настройки.
Динамическое перенаправление портов: используем SSH-сервер в качестве прокси
Также существует «динамическое перенаправление портов
», которое работает по тому же принципу что прокси или VPN-сервер
. SSH-клиент
создаёт SOCKS-прокси
, который можно настраивать под собственные приложения. Весь трафик, отправляемый через прокси, будет отправляться через SSH-сервер
. Принцип здесь схож с локальным перенаправлением – берётся локальный трафик, отправленный на определённый порт на вашем ПК, и перенаправляется через SSH-соединение
на удалённый адрес.
Предположим, что вы используете общедоступную Wi-Fi
сеть. Но хочется делать это безопасно. Если у вас есть доступ к SSH-серверу
из дома, то можно подключиться к нему и использовать динамическое перенаправление. SSH-клиент
создаст SOCKS-прокси
на вашем ПК. Весь трафик, отправленный на этот прокси, будет отправляться через подключение к SSH-серверу
. Никто из тех, кто использует общедоступную Wi-Fi
сеть, не сможет отслеживать ваши перемещения в сети или закрывать доступ к сайтам. С перспективы сайтов, которые посещаете, будет казаться, что вы заходите на них с домашнего ПК.
Или же может понадобиться подключиться к медиа-серверу, находящемуся в вашей домашней сети. В целях безопасности, к интернету подключен только ваш SSH-сервер
. При этом вы не разрешаете подключаться к медиа-серверу через интернет. В таком случае можно включить динамическое перенаправление портов, настроить SOCKS-прокси
в браузере и затем подключаться к серверам, работающим в домашней сети, через браузер, как будто вы сидите дома.
Например, если медиа-сервер находится по адресу 192.168.1.123
в вашей домашней сети, то можно добавить адрес 192.168.1.123
в любое приложение при помощи SOCKS-прокси
и получить доступ к медиа-серверу, как будто вы находитесь внутри домашней сети.
Чтобы воспользоваться динамическим перенаправлением, запустите ssh-команду
с аргументом —D
:
ssh -D local_port [email protected]
Предположим, что у вас есть доступ к SSH-серверу
по адресу ssh.yourhome.com
, а ваш логин на SSH-сервере
– bob
. Нужно использовать динамическое перенаправление для того, чтобы открыть SOCKS-прокси
по порту 8888
на текущем ПК. Тогда команда для SSH
туннелирования будет выглядеть следующим образом:
ssh -D 8888 [email protected]
После этого можно настроить браузер или другое приложение на использование локального IP-адреса (127.0.0.1)
и порта 8888
. Весь трафик этого приложения будет перенаправляться через туннель:
Чтобы сделать это в PuTTY
для Windows
, выберите опцию Connection > SSH > Tunnels
. Далее – опцию «Dynamic
». В поле «Source Port
» укажите локальный порт.
Например, если вам нужно настроить SOCKS-прокси
на порт 8888
, то введите 8888
в качестве порта-источника. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
.
Популярное в рубрике:
Top
Тег
Большинство браузеров отображают текст в такой ячейке жирным шрифтом и выравнивают его по центру. Конечно, для оформления заголовков таблицы и содержимого ячеек можно и нужно использовать CSS .
Когда стоит использовать , а не ?
Тэг
(а не теги tr
и td
) используется для установки содержимого ячейки заголовком определённой колонки или ряда.
Заголовки таблицы обычно расположены по верхнему или левому краю таблицы - в верхнем ряду как заголовки колонки или в первой колонке слева как заголовки ряда. Ячейки-заголовки показывают, что за содержимое расположено в таблице рядом или под ними, облегчая восприятие таблицы.
Не используйте
для оформления ячеек. Поскольку браузеры обычно меняют внешний вид ячеек-заголовков, некоторые веб-дизайнеры пользуются этой особенностью для выделения и центровки шрифта. Так не следует делать сразу по нескольким причинам:
- Нельзя полагаться на то, что все браузеры будут отображать ваш контент одинаково. Будущая версия браузера может поменять цвет, используемый по умолчанию или вообще перестать выделять содержимое тега
. Поэтому никогда не стоит полагаться на встроенные стили браузеров и использовать данный HTML-элемент
;
- Это семантически неправильно. Некоторые пользовательские агенты могут читать голосом содержимое таблиц и добавлять «заголовок таблицы: ваш текст
» при встрече с ячейкой
. Кроме этого некоторые веб-приложения могут размещать заголовки по верхней кромке страницы. Это станет проблемой, если ячейка не является заголовком, а используется исключительно для оформления.
Использование неподходящих тегов может ограничить доступность вашего контента для многих пользователей. Особенно для тех, кто использует различные вспомогательные устройства.
Для оформления ячеек следует применять CSS
. Разделение стиля (CSS
) и структуры (HTML тег td
) - общепринятый метод веб-дизайна уже много лет. Повторим ещё раз: используйте
потому, что содержимое ячейки - заголовок, а не потому, что вам нравится, как это по умолчанию отображает ваш браузер.
Перевод статьи “What’s the difference between th and td HTML table tags?
” был подготовлен дружной командой проекта .
Хорошо
Плохо
SSH туннелирование пригодится для обхода неких ограничений установленных брандмауэром или же просто для создания безопасного туннеля передачи данных. Кроме прямого SSH туннелирования можно также сделать проброс данных с локального порта через SSH туннель на некий порт некой удалённой машины или наоборот.
Как в случае прямого SSH туннелирования так и с пробросом порта, на одной из сторон всегда должен быть установлен рабочий SSH сервер! SSH туннелирование даёт возможность бродить по сети от имени того компьютера, к которому был организован SSH туннель. Например если у нас имеется доступ к SSH где-то в Зимбабве, то при помощи SSH туннеля мы можем лазить по сети от имени Зимбабве:)
Прямое SSH туннелирование
Что имеется ввиду под "Прямое SSH туннелирование
"? Прямое SSH туннелирование это когда SSH клиент запускается в режиме sock-proxy (опция -D
) и соединившись с удалённой машиной по SSH протоколу передает через неё (удалённую машину
) TCP трафик, например сессия прямого SSH туннеля с удалённой машиной через консольный SSH клиент (OpenSSH
) в Windows:
C:\OpenSSH\bin>
ssh
-D
4444
-p
28666
user@
remotehost.com
The authenticity of host "remotehost.com (96.172.128.114)"
cant be establishe
d.
RSA key fingerprint is 5e:ea:62
:5f:fc:3b:b2:38
:d6:ba:6b:aa:65
:3f:d4:35
.
Are you sure you want to continue
connecting (yes/
no)
? y
Please type
"yes"
or "no"
: yes
Warning: Permanently added "remotehost.com,96.172.128.114"
(RSA)
to the list o
f known hosts.
user@
remotehost.com password:
Last login: Thu Feb 7
03:34
:45
2013
from 108.95.46.202
[
user@
remotehost ~]
$
Запуская SSH клиент с опцией -D 4444
мы повелеваем ему после запуска прослушивать локальный порт 4444 и после подключения к удалённому хосту remotehost.com, на удалённый порт -p
28666 и с именем пользователя user, отправлять наш TCP трафик к месту назначения от своего имени - т.е. от имени remotehost.com с ИП 96.172.128.114.
Проброс порта через SSH туннель на порт удалённой машины
В этом случае, после подключения по SSH протоколу с удалённой машиной [email protected], данные с локального порта через SSH туннель удаленной машины будут переданы будут переданы дальше на некий порт некой удалённой машины, например прокси-серверу. Выглядит это примерно так:
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost.com
Аналогично предыдущему примеру с той лишь разницей, что конечной точкой пересылающей/принимающей наш TCP трафик будет не [email protected], а некий host:hostport
Есть также вариант проброса TCP трафик с удалённого порта удалённой машины [email protected] на локальный порт локальной машины или ещё куда-нибудь.
ssh
-R
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost.com
В консольных ssh клиентах для Unix подобных ОС
есть ещё одна полезная опция -C
(Requests compression of all data
) для сжатия данных, которая отсутствует в ssh клиенте (OpenSSH
) для Windows, но есть в PLINK.EXE
от PuTTY .
В качестве SSHD для Windows можно предложить
WinSSHD , а в качестве консольного SSH клиента под Windows OpenSSH соответственно или на худой конец PLINK.EXE
от PuTTY .
SSH тунель в PuTTY
Для использования в PuTTY SSH туннелирования в настройках " Сonnection -> SSH -> Tunnels " введите:
Source port: 4444
Destination: localhost:4444
Отметьте пункт " Dynamic " и нажмите " Add ". В " Session " укажите нужное " Host Name " имя хоста, укажите SSH протокол и сохраните настройки выбрав в " Saved Sessions " подходящее имя, ну, например, " HostName aka ssh tunnel on 4444 " и сохраните " Save ", после чего двойным кликом на этом имени установите соединение.
Когда SSH-соединение будет установлено, мы сможем
использовать свой браузер через локальны прокси на порту 4444. Зайдите на любую веб-страницу, где определяется ваш IP адрес и убедитесь в том, что определяется не ваш реальный IP адрес, а IP адрес удаленной машины.
Вложенные SSH туннели
Допускаются вложенные SSH туннели, например:
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost1.com \
ssh
-L
[
bind_address:]
port:host:hostport -p
28666
user@
remotehost2.com
ssh
-L
192.168.0.2:8080
:127.1
:9999
user@
8.8.8.8 \
ssh
-L
127.1
:9999
:127.1
:80
user2@
10.1.1.2
В этом примере (рисунок ниже
) мы бросаем данные с порта 8080 компьютера "А" (192.168.0.2
), на локальный хост и порт 9999 компьютера "Б" (8.8.8.8
), а сразу после подключения к компьютеру "Б" (8.8.8.8
) запускаем на нём ssh клиент, принимаем данные (127.1:9999
) и бросаем их дальше на локальный хост 127.1:80 компьютера внутренней сети 10.1.1.2.
Реверс сокс-прокси. По идее офицеры службы безопасности, которые озабочены запретом Интернета на машине 10.1.1.2, должны повыдёргивать на попе все волосы, ибо приведённая ниже команда должна организовать доступ к сети Интернет для машины 10.1.1.2 через сокс-прокси, который запущен на машине «А».
ssh
-D
8080
-R
127.1
:8080
:127.1
:8080
user@
8.8.8.8 \
ssh
-R
127.1
:8080
:127.1
:8080
user@
10.1.1.2
Конфигурация SSHD
Для гарантированного обхода ограничений фаервола можно в конфигурации SSHD демона /etc/ssh/sshd_config открыть сразу несколько портов
, т.е. SSHD будет принимать запросы сразу по нескольким портам, например.
Существует три различных типа туннелирования, и все они используются для решения разных задач. Каждая задача предполагает использование SSH-сервера
для перенаправления трафика из одного сетевого порта в другой. Трафик передается по зашифрованному SSH-соединению
, поэтому его нельзя отследить или изменить в процессе передачи:
Туннелирование можно реализовать с помощью ssh-команды в Linux
, Mac OS
и операционных системах семейства UNIX
. Для пользователей Windows
, где нет встроенной ssh-команды
, мы предлагаем бесплатный инструмент PuTTY
. Он умеет подключаться к SSH-серверам
. Он также поддерживает SSH-туннелирование
.
Локальное перенаправление портов (port forwarding): получаем доступ к удалённым ресурсам на локальной системе
«Локальное перенаправление портов
» позволяет осуществлять доступ к ресурсам, находящимся внутри локальной сети. Предположим, что нужно попасть на офисный сервер БД, сидя дома. В целях безопасности этот сервер настроен так, чтобы принимать подключения только с ПК, находящихся в локальной сети офиса. Но если у вас есть доступ к SSH-серверу
, находящемуся в офисе, и этот SSH-сервер
разрешает подключения из-за пределов офисной сети, то к нему можно подключиться из дома. Затем осуществить доступ к БД. Проще защитить от атак один SSH-сервер
, чем защищать каждый ресурс локальной сети по отдельности.
Чтобы сделать это, вы устанавливаете SSH-соединение
с SSH-сервером
и говорите клиенту передать трафик с указанного порта на локальном ПК. Например, с порта 1234
на адрес сервера базы данных и его порт внутри офисной сети. Когда вы пытаетесь получить доступ к БД через порт 1234
на вашем ПК («localhost
») трафик автоматически «туннелируется
» по SSH-соединению
и отправляется на сервер БД.
SSH-сервер
выступает посредником, пересылая трафик туда-сюда. При этом можно использовать любую командную строку или графический инструмент для осуществления доступа к базе данных, как вы обычно делаете это на локальном ПК.
Чтобы использовать локальное перенаправление, подключитесь к SSH-серверу
с использованием вспомогательного аргумента -L
. Синтаксис для туннелирования трафика будет следующим:
ssh -L local_port:remote_address:remote_port [email protected]
Предположим, что офисный сервер находится по адресу 192.168.1.111
. У вас есть доступ к SSH-серверу
через адрес ssh.youroffice.com
, и имя вашего аккаунта на SSH-сервере — bob
. В таком случае необходимая команда будет выглядеть следующим образом:
ssh -L 8888:192.168.1.111:1234 [email protected]
Запустив эту команду, вы попадете на офисный сервер баз данных через порт 8888
на localhost
. Если у СУБД есть веб-интерфейс, можно вписать в адресную строку браузера 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
, выберите опцию Connection > SSH > Tunnels
. Далее опцию «Local
». В поле «Source Port
» укажите локальный порт. В поле «Destination
удалённый_адрес:удалённый_порт
.
Например, если нужно настроить SSH-тоннель
, как это сделано выше, то введите 8888
в качестве порта-источника и localhost:1234
в качестве целевого адреса. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
. До подключения SSH
туннелирования нужно ввести адрес и порт самого SSH-сервера
в разделе «Session
»:
Дистанционное перенаправление портов: открываем доступ к локальным ресурсам на удалённой системе
«Дистанционное перенаправление портов
» — ситуация, противоположная локальному перенаправлению, и используется не так часто. Она позволяет открывать доступ к ресурсам на локальном ПК через SSH-сервер
. Предположим, что на локальном ПК настроен веб-сервер. Но ваш ПК защищён сетевым экраном, который не пропускает входящий трафик на сервер.
Если есть доступ к удалённому SSH-серверу
, можно подключиться к этому SSH-серверу
и использовать дистанционное перенаправление портов. Ваш SSH-клиент
укажет серверу перенаправлять трафик с определённого порта – скажем, 1234
– на SSH-сервере
на указанный адрес и порт на вашем ПК или внутри локальной сети. Когда кто-то подключается к порту 1234
на SSH-сервере
, этот трафик автоматически «туннелируется
» по SSH-соединению
. Любой, кто подключается к SSH-серверу
, сможет получить доступ к серверу, запущенному на вашем ПК. Это достаточно эффективный способ обхода фаерволов.
Чтобы воспользоваться дистанционным туннелированием IP
, используйте ssh-команду
с аргументом —R
. Синтаксис здесь будет практически таким же, как и в случае с локальным перенаправлением:
ssh -R remote_port:local_address:local_port [email protected]
Предположим, что нужно создать серверное приложение, прослушивающее порт 1234
на вашем ПК. Оно доступно через порт 8888
на удалённом SSH-сервере
. Адрес SSH-сервера ssh.youroffice.com
, а ваше имя пользователя на SSH-сервере bob
. Значит, команда будет следующей:
ssh -R 8888:localhost:1234 [email protected]
Затем кто-то может подключиться к SSH-серверу
через порт 8888
, и это подключение будет туннелировано на серверное приложение, запущенное на порте 1234 ПК
, с которого вы подключались:
Чтобы сделать это в PuTTY
для Windows
, выберите опцию Connection > SSH > Tunnels
. Далее – опцию «Remote
». В поле «Source Port
» укажите удалённый порт. В поле «Destination
» введите целевой адрес и порт в формате локальный_адрес:локальный_порт
.
Например, если нужно настроить SSH-тоннель
, как это сделано выше, то укажите 8888
в качестве порта-источника и localhost:1234
в качестве целевого адреса. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
. До подключения нужно будет ввести адрес и порт самого SSH-сервера
в разделе «Session
».
После этого пользователи смогут подключаться к порту 8888
на SSH-сервере
и их трафик будет передаваться на порт 1234
на вашей локальной системе:
По умолчанию, удалённый SSH-сервер
будет слушать только подключения с того же хоста. Другими словами, доступ будет только у людей из той же системы, на которой запущен SSH-сервер
. При туннелировании трафика так делается в целях безопасности.
Нужно включить опцию «GatewayPorts
» в sshd_config
на удалённом SSH-сервере
, если хотите изменить эти настройки.
Динамическое перенаправление портов: используем SSH-сервер в качестве прокси
Также существует «динамическое перенаправление портов
», которое работает по тому же принципу что прокси или VPN-сервер
. SSH-клиент
создаёт SOCKS-прокси
, который можно настраивать под собственные приложения. Весь трафик, отправляемый через прокси, будет отправляться через SSH-сервер
. Принцип здесь схож с локальным перенаправлением – берётся локальный трафик, отправленный на определённый порт на вашем ПК, и перенаправляется через SSH-соединение
на удалённый адрес.
Предположим, что вы используете общедоступную Wi-Fi
сеть. Но хочется делать это безопасно. Если у вас есть доступ к SSH-серверу
из дома, то можно подключиться к нему и использовать динамическое перенаправление. SSH-клиент
создаст SOCKS-прокси
на вашем ПК. Весь трафик, отправленный на этот прокси, будет отправляться через подключение к SSH-серверу
. Никто из тех, кто использует общедоступную Wi-Fi
сеть, не сможет отслеживать ваши перемещения в сети или закрывать доступ к сайтам. С перспективы сайтов, которые посещаете, будет казаться, что вы заходите на них с домашнего ПК.
Или же может понадобиться подключиться к медиа-серверу, находящемуся в вашей домашней сети. В целях безопасности, к интернету подключен только ваш SSH-сервер
. При этом вы не разрешаете подключаться к медиа-серверу через интернет. В таком случае можно включить динамическое перенаправление портов, настроить SOCKS-прокси
в браузере и затем подключаться к серверам, работающим в домашней сети, через браузер, как будто вы сидите дома.
Например, если медиа-сервер находится по адресу 192.168.1.123
в вашей домашней сети, то можно добавить адрес 192.168.1.123
в любое приложение при помощи SOCKS-прокси
и получить доступ к медиа-серверу, как будто вы находитесь внутри домашней сети.
Чтобы воспользоваться динамическим перенаправлением, запустите ssh-команду
с аргументом —D
:
ssh -D local_port [email protected]
Предположим, что у вас есть доступ к SSH-серверу
по адресу ssh.yourhome.com
, а ваш логин на SSH-сервере
– bob
. Нужно использовать динамическое перенаправление для того, чтобы открыть SOCKS-прокси
по порту 8888
на текущем ПК. Тогда команда для SSH
туннелирования будет выглядеть следующим образом:
ssh -D 8888 [email protected]
После этого можно настроить браузер или другое приложение на использование локального IP-адреса (127.0.0.1)
и порта 8888
. Весь трафик этого приложения будет перенаправляться через туннель:
Чтобы сделать это в PuTTY
для Windows
, выберите опцию Connection > SSH > Tunnels
. Далее – опцию «Dynamic
». В поле «Source Port
» укажите локальный порт.
Например, если вам нужно настроить SOCKS-прокси
на порт 8888
, то введите 8888
в качестве порта-источника. После этого нажмите «Add
» и затем «Open
», чтобы открыть SSH-подключение
.
Популярное в рубрике:
Top
Тэг
Заголовки таблицы обычно расположены по верхнему или левому краю таблицы - в верхнем ряду как заголовки колонки или в первой колонке слева как заголовки ряда. Ячейки-заголовки показывают, что за содержимое расположено в таблице рядом или под ними, облегчая восприятие таблицы.
Не используйте
- Нельзя полагаться на то, что все браузеры будут отображать ваш контент одинаково. Будущая версия браузера может поменять цвет, используемый по умолчанию или вообще перестать выделять содержимое тега
. Поэтому никогда не стоит полагаться на встроенные стили браузеров и использовать данный HTML-элемент ; - Это семантически неправильно. Некоторые пользовательские агенты могут читать голосом содержимое таблиц и добавлять «заголовок таблицы: ваш текст » при встрече с ячейкой
. Кроме этого некоторые веб-приложения могут размещать заголовки по верхней кромке страницы. Это станет проблемой, если ячейка не является заголовком, а используется исключительно для оформления. Использование неподходящих тегов может ограничить доступность вашего контента для многих пользователей. Особенно для тех, кто использует различные вспомогательные устройства.
Для оформления ячеек следует применять CSS . Разделение стиля (CSS ) и структуры (HTML тег td ) - общепринятый метод веб-дизайна уже много лет. Повторим ещё раз: используйте
потому, что содержимое ячейки - заголовок, а не потому, что вам нравится, как это по умолчанию отображает ваш браузер. Перевод статьи “What’s the difference between th and td HTML table tags? ” был подготовлен дружной командой проекта .
Хорошо Плохо
SSH туннелирование пригодится для обхода неких ограничений установленных брандмауэром или же просто для создания безопасного туннеля передачи данных. Кроме прямого SSH туннелирования можно также сделать проброс данных с локального порта через SSH туннель на некий порт некой удалённой машины или наоборот.
Как в случае прямого SSH туннелирования так и с пробросом порта, на одной из сторон всегда должен быть установлен рабочий SSH сервер! SSH туннелирование даёт возможность бродить по сети от имени того компьютера, к которому был организован SSH туннель. Например если у нас имеется доступ к SSH где-то в Зимбабве, то при помощи SSH туннеля мы можем лазить по сети от имени Зимбабве:)
Прямое SSH туннелирование
Что имеется ввиду под "Прямое SSH туннелирование "? Прямое SSH туннелирование это когда SSH клиент запускается в режиме sock-proxy (опция -D ) и соединившись с удалённой машиной по SSH протоколу передает через неё (удалённую машину ) TCP трафик, например сессия прямого SSH туннеля с удалённой машиной через консольный SSH клиент (OpenSSH ) в Windows:
C:\OpenSSH\bin> ssh -D 4444 -p 28666 user@ remotehost.com The authenticity of host "remotehost.com (96.172.128.114)" cant be establishe d. RSA key fingerprint is 5e:ea:62 :5f:fc:3b:b2:38 :d6:ba:6b:aa:65 :3f:d4:35 . Are you sure you want to continue connecting (yes/ no) ? y Please type "yes" or "no" : yes Warning: Permanently added "remotehost.com,96.172.128.114" (RSA) to the list o f known hosts. user@ remotehost.com password: Last login: Thu Feb 7 03:34 :45 2013 from 108.95.46.202 [ user@ remotehost ~] $
Запуская SSH клиент с опцией -D 4444 мы повелеваем ему после запуска прослушивать локальный порт 4444 и после подключения к удалённому хосту remotehost.com, на удалённый порт -p 28666 и с именем пользователя user, отправлять наш TCP трафик к месту назначения от своего имени - т.е. от имени remotehost.com с ИП 96.172.128.114.
Проброс порта через SSH туннель на порт удалённой машины
В этом случае, после подключения по SSH протоколу с удалённой машиной [email protected], данные с локального порта через SSH туннель удаленной машины будут переданы будут переданы дальше на некий порт некой удалённой машины, например прокси-серверу. Выглядит это примерно так:
ssh -L [ bind_address:] port:host:hostport -p 28666 user@ remotehost.com
Аналогично предыдущему примеру с той лишь разницей, что конечной точкой пересылающей/принимающей наш TCP трафик будет не [email protected], а некий host:hostport
Есть также вариант проброса TCP трафик с удалённого порта удалённой машины [email protected] на локальный порт локальной машины или ещё куда-нибудь.
ssh -R [ bind_address:] port:host:hostport -p 28666 user@ remotehost.com
В консольных ssh клиентах для Unix подобных ОС есть ещё одна полезная опция -C (Requests compression of all data ) для сжатия данных, которая отсутствует в ssh клиенте (OpenSSH ) для Windows, но есть в PLINK.EXE от PuTTY .
В качестве SSHD для Windows можно предложить WinSSHD , а в качестве консольного SSH клиента под Windows OpenSSH соответственно или на худой конец PLINK.EXE от PuTTY .
SSH тунель в PuTTY
Для использования в PuTTY SSH туннелирования в настройках " Сonnection -> SSH -> Tunnels " введите:
Source port: 4444 Destination: localhost:4444
Отметьте пункт " Dynamic " и нажмите " Add ". В " Session " укажите нужное " Host Name " имя хоста, укажите SSH протокол и сохраните настройки выбрав в " Saved Sessions " подходящее имя, ну, например, " HostName aka ssh tunnel on 4444 " и сохраните " Save ", после чего двойным кликом на этом имени установите соединение.
Когда SSH-соединение будет установлено, мы сможем использовать свой браузер через локальны прокси на порту 4444. Зайдите на любую веб-страницу, где определяется ваш IP адрес и убедитесь в том, что определяется не ваш реальный IP адрес, а IP адрес удаленной машины.
Вложенные SSH туннели
Допускаются вложенные SSH туннели, например:
ssh -L [ bind_address:] port:host:hostport -p 28666 user@ remotehost1.com \ ssh -L [ bind_address:] port:host:hostport -p 28666 user@ remotehost2.com ssh -L 192.168.0.2:8080 :127.1 :9999 user@ 8.8.8.8 \ ssh -L 127.1 :9999 :127.1 :80 user2@ 10.1.1.2
В этом примере (рисунок ниже ) мы бросаем данные с порта 8080 компьютера "А" (192.168.0.2 ), на локальный хост и порт 9999 компьютера "Б" (8.8.8.8 ), а сразу после подключения к компьютеру "Б" (8.8.8.8 ) запускаем на нём ssh клиент, принимаем данные (127.1:9999 ) и бросаем их дальше на локальный хост 127.1:80 компьютера внутренней сети 10.1.1.2.
Реверс сокс-прокси. По идее офицеры службы безопасности, которые озабочены запретом Интернета на машине 10.1.1.2, должны повыдёргивать на попе все волосы, ибо приведённая ниже команда должна организовать доступ к сети Интернет для машины 10.1.1.2 через сокс-прокси, который запущен на машине «А».
ssh -D 8080 -R 127.1 :8080 :127.1 :8080 user@ 8.8.8.8 \ ssh -R 127.1 :8080 :127.1 :8080 user@ 10.1.1.2
Конфигурация SSHD
Для гарантированного обхода ограничений фаервола можно в конфигурации SSHD демона /etc/ssh/sshd_config открыть сразу несколько портов , т.е. SSHD будет принимать запросы сразу по нескольким портам, например.
Существует три различных типа туннелирования, и все они используются для решения разных задач. Каждая задача предполагает использование SSH-сервера для перенаправления трафика из одного сетевого порта в другой. Трафик передается по зашифрованному SSH-соединению , поэтому его нельзя отследить или изменить в процессе передачи:
Туннелирование можно реализовать с помощью ssh-команды в Linux , Mac OS и операционных системах семейства UNIX . Для пользователей Windows , где нет встроенной ssh-команды , мы предлагаем бесплатный инструмент PuTTY . Он умеет подключаться к SSH-серверам . Он также поддерживает SSH-туннелирование .
Локальное перенаправление портов (port forwarding): получаем доступ к удалённым ресурсам на локальной системе
«Локальное перенаправление портов » позволяет осуществлять доступ к ресурсам, находящимся внутри локальной сети. Предположим, что нужно попасть на офисный сервер БД, сидя дома. В целях безопасности этот сервер настроен так, чтобы принимать подключения только с ПК, находящихся в локальной сети офиса. Но если у вас есть доступ к SSH-серверу , находящемуся в офисе, и этот SSH-сервер разрешает подключения из-за пределов офисной сети, то к нему можно подключиться из дома. Затем осуществить доступ к БД. Проще защитить от атак один SSH-сервер , чем защищать каждый ресурс локальной сети по отдельности.
Чтобы сделать это, вы устанавливаете SSH-соединение с SSH-сервером и говорите клиенту передать трафик с указанного порта на локальном ПК. Например, с порта 1234 на адрес сервера базы данных и его порт внутри офисной сети. Когда вы пытаетесь получить доступ к БД через порт 1234 на вашем ПК («localhost ») трафик автоматически «туннелируется » по SSH-соединению и отправляется на сервер БД.
SSH-сервер выступает посредником, пересылая трафик туда-сюда. При этом можно использовать любую командную строку или графический инструмент для осуществления доступа к базе данных, как вы обычно делаете это на локальном ПК.
Чтобы использовать локальное перенаправление, подключитесь к SSH-серверу с использованием вспомогательного аргумента -L . Синтаксис для туннелирования трафика будет следующим:
ssh -L local_port:remote_address:remote_port [email protected]
Предположим, что офисный сервер находится по адресу 192.168.1.111 . У вас есть доступ к SSH-серверу через адрес ssh.youroffice.com , и имя вашего аккаунта на SSH-сервере — bob . В таком случае необходимая команда будет выглядеть следующим образом:
ssh -L 8888:192.168.1.111:1234 [email protected]
Запустив эту команду, вы попадете на офисный сервер баз данных через порт 8888 на localhost . Если у СУБД есть веб-интерфейс, можно вписать в адресную строку браузера 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 , выберите опцию Connection > SSH > Tunnels . Далее опцию «Local ». В поле «Source Port » укажите локальный порт. В поле «Destination удалённый_адрес:удалённый_порт .
Например, если нужно настроить SSH-тоннель , как это сделано выше, то введите 8888 в качестве порта-источника и localhost:1234 в качестве целевого адреса. После этого нажмите «Add » и затем «Open », чтобы открыть SSH-подключение . До подключения SSH туннелирования нужно ввести адрес и порт самого SSH-сервера в разделе «Session »:
Дистанционное перенаправление портов: открываем доступ к локальным ресурсам на удалённой системе
«Дистанционное перенаправление портов » — ситуация, противоположная локальному перенаправлению, и используется не так часто. Она позволяет открывать доступ к ресурсам на локальном ПК через SSH-сервер . Предположим, что на локальном ПК настроен веб-сервер. Но ваш ПК защищён сетевым экраном, который не пропускает входящий трафик на сервер.
Если есть доступ к удалённому SSH-серверу , можно подключиться к этому SSH-серверу и использовать дистанционное перенаправление портов. Ваш SSH-клиент укажет серверу перенаправлять трафик с определённого порта – скажем, 1234 – на SSH-сервере на указанный адрес и порт на вашем ПК или внутри локальной сети. Когда кто-то подключается к порту 1234 на SSH-сервере , этот трафик автоматически «туннелируется » по SSH-соединению . Любой, кто подключается к SSH-серверу , сможет получить доступ к серверу, запущенному на вашем ПК. Это достаточно эффективный способ обхода фаерволов.
Чтобы воспользоваться дистанционным туннелированием IP , используйте ssh-команду с аргументом —R . Синтаксис здесь будет практически таким же, как и в случае с локальным перенаправлением:
ssh -R remote_port:local_address:local_port [email protected]
Предположим, что нужно создать серверное приложение, прослушивающее порт 1234 на вашем ПК. Оно доступно через порт 8888 на удалённом SSH-сервере . Адрес SSH-сервера ssh.youroffice.com , а ваше имя пользователя на SSH-сервере bob . Значит, команда будет следующей:
ssh -R 8888:localhost:1234 [email protected]
Затем кто-то может подключиться к SSH-серверу через порт 8888 , и это подключение будет туннелировано на серверное приложение, запущенное на порте 1234 ПК , с которого вы подключались:
Чтобы сделать это в PuTTY для Windows , выберите опцию Connection > SSH > Tunnels . Далее – опцию «Remote ». В поле «Source Port » укажите удалённый порт. В поле «Destination » введите целевой адрес и порт в формате локальный_адрес:локальный_порт .
Например, если нужно настроить SSH-тоннель , как это сделано выше, то укажите 8888 в качестве порта-источника и localhost:1234 в качестве целевого адреса. После этого нажмите «Add » и затем «Open », чтобы открыть SSH-подключение . До подключения нужно будет ввести адрес и порт самого SSH-сервера в разделе «Session ».
После этого пользователи смогут подключаться к порту 8888 на SSH-сервере и их трафик будет передаваться на порт 1234 на вашей локальной системе:
По умолчанию, удалённый SSH-сервер будет слушать только подключения с того же хоста. Другими словами, доступ будет только у людей из той же системы, на которой запущен SSH-сервер . При туннелировании трафика так делается в целях безопасности.
Нужно включить опцию «GatewayPorts » в sshd_config на удалённом SSH-сервере , если хотите изменить эти настройки.
Динамическое перенаправление портов: используем SSH-сервер в качестве прокси
Также существует «динамическое перенаправление портов », которое работает по тому же принципу что прокси или VPN-сервер . SSH-клиент создаёт SOCKS-прокси , который можно настраивать под собственные приложения. Весь трафик, отправляемый через прокси, будет отправляться через SSH-сервер . Принцип здесь схож с локальным перенаправлением – берётся локальный трафик, отправленный на определённый порт на вашем ПК, и перенаправляется через SSH-соединение на удалённый адрес.
Предположим, что вы используете общедоступную Wi-Fi сеть. Но хочется делать это безопасно. Если у вас есть доступ к SSH-серверу из дома, то можно подключиться к нему и использовать динамическое перенаправление. SSH-клиент создаст SOCKS-прокси на вашем ПК. Весь трафик, отправленный на этот прокси, будет отправляться через подключение к SSH-серверу . Никто из тех, кто использует общедоступную Wi-Fi сеть, не сможет отслеживать ваши перемещения в сети или закрывать доступ к сайтам. С перспективы сайтов, которые посещаете, будет казаться, что вы заходите на них с домашнего ПК.
Или же может понадобиться подключиться к медиа-серверу, находящемуся в вашей домашней сети. В целях безопасности, к интернету подключен только ваш SSH-сервер . При этом вы не разрешаете подключаться к медиа-серверу через интернет. В таком случае можно включить динамическое перенаправление портов, настроить SOCKS-прокси в браузере и затем подключаться к серверам, работающим в домашней сети, через браузер, как будто вы сидите дома.
Например, если медиа-сервер находится по адресу 192.168.1.123 в вашей домашней сети, то можно добавить адрес 192.168.1.123 в любое приложение при помощи SOCKS-прокси и получить доступ к медиа-серверу, как будто вы находитесь внутри домашней сети.
Чтобы воспользоваться динамическим перенаправлением, запустите ssh-команду с аргументом —D :
ssh -D local_port [email protected]
Предположим, что у вас есть доступ к SSH-серверу по адресу ssh.yourhome.com , а ваш логин на SSH-сервере – bob . Нужно использовать динамическое перенаправление для того, чтобы открыть SOCKS-прокси по порту 8888 на текущем ПК. Тогда команда для SSH туннелирования будет выглядеть следующим образом:
ssh -D 8888 [email protected]
После этого можно настроить браузер или другое приложение на использование локального IP-адреса (127.0.0.1) и порта 8888 . Весь трафик этого приложения будет перенаправляться через туннель:
Чтобы сделать это в PuTTY для Windows , выберите опцию Connection > SSH > Tunnels . Далее – опцию «Dynamic ». В поле «Source Port » укажите локальный порт.
Например, если вам нужно настроить SOCKS-прокси на порт 8888 , то введите 8888 в качестве порта-источника. После этого нажмите «Add » и затем «Open », чтобы открыть SSH-подключение .
Популярное в рубрике: - Это семантически неправильно. Некоторые пользовательские агенты могут читать голосом содержимое таблиц и добавлять «заголовок таблицы: ваш текст » при встрече с ячейкой