ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

7 минут чтени€

SSH туннели один из самых часто используемых методов св€зи среди системных и сетевых администраторов. ¬ данном руководстве расскажем о такой функции как переброс порта SSH. Ёто используетс€ дл€ безопасной передачи данных между двум€ и более системами.


„то такое переброс порта SSH?

 оротко, переброс порта SSH даЄт возможность создавать туннель между несколькими системами, а затем настроить эти системы так, чтобы трафик они гнали через этот туннель. »менно по такой логике работает VPN или SOCKS Proxy.

≈сть несколько разных методов переброса: переброс локального порта, переброс удалЄнного порта или динамический переброс. ƒл€ начала дадим по€снение каждому из них.

  • Ћокальный переброс порта позвол€ет получать доступ ко внешним ресурсам из локальной сети и работать в удаленной системе, как если бы они находились в одной локальной сети. ѕо такому принципу работает Remote Access VPN.
  • ѕереброс удаленного порта дает возможность удалЄнной системе получать доступ к вашей локальной сети.
  • ƒинамический переброс создает SOCKS прокси сервер. ѕосле этого настраиваем приложени€ так, чтобы они использовали это туннель дл€ передачи данных. „аще всего такой переброс используетс€ дл€ доступа к ресурсам, который по той или иной причине заблокированы дл€ данной страны.

ƒл€ чего нужен переброс порта SSH?

ƒопустим у вас есть какое-то приложение, которые передаЄт данные в открытом виде или через нешифрованный протокол. ¬виду того, что SSH создает шифрованное соединение, то вы с легкостью можете настроить программу так, чтобы трафик еЄ шЄл через этот туннель.

ќн так же часто используетс€ дл€ доступа к внутренним ресурсам извне. ѕриблизительно это напоминает Site-to-Site VPN, где нужно указывать какой именно трафик нужно заворачивать в туннель.


—колько сессий можно устанавливать?

“еоретически, можно создавать столько сессий, сколько нам захочетс€. ¬ сети используетс€ 65 535 различных портов, и мы можем перебрасывать любой из этих портов.

Ќо при перебросе порта нужно учитывать, что некоторые из них зарезервированы за конкретными сервисами. Ќапример, HTTP использует 80 порт. «начит, переброс на порт 80 возможен только если нужно переадресовать веб трафик.

ѕорт, который перебрасываетс€ на локальном хосте может не совпадать с портом удаленной системы. ћы легко можем перебросить локальный порт 8080 на порт 80 на удаленной машине. »ными словами, если мы напишем IP адрес нашей машины и порт 8080, то запрос пойдет на 80 порт удалЄнной системы.

≈сли вам не критично какой порт использовать на своем хосте, лучше выбрать что-то из диапазона 2000-10000, так как все порты ниже 2000 зарезервированы.


ѕереброс локального порта

Ћокальна€ пересылка представл€ет собой переброс порта из клиентской системы на сервер. ќн позвол€ет настроить порт в системе таким образом, чтобы все соединени€ на этот порт проходили через туннель SSH.

ƒл€ переадресации локального порта используетс€ ключ L. ќбщий синтаксис команды таков:

$ ssh -L local_port:remote_ip:remote_port user@hostname.com
$ ssh -L 8080:www.example1.com:80 example2.com
ѕереброс локального порта

ƒанной командой мы говорим системе, что все запросы на 8080 порт example1.com переадресовывать на example2.com. Ёто часто используетс€ когда нужно организовать доступ извне на внутренний ресурсы компании.


“естирование работы переадресованного порта

„тобы проверить, работает ли переадресаци€ должным образом можно воспользоватьс€ утилитой netcat. Ќа машине, где была запущена команда переадресации нужно ввести команду netcat в следующем виде:

$ nc -v remote_ip port_number
“естирование работы переадресованного порта

≈сли переадресаци€ работает и трафик проходит, то утилита вернЄт "”спех!". ¬ противном случае выдаст ошибку об истечении времени ожидани€.

≈сли что-то не работает, нужно убедитьс€, что подключение к удаленному порту по SSH работает корректно и запросы не блокируютс€ межсетевым экраном.


—оздание посто€нного туннел€ (Autossh)

ƒл€ создани€ туннел€, который будет активен посто€нно используетс€ так называема€ утилита Autossh. ≈динственно требование это необходимость настройки между двум€ системами аутентификацию по публичным ключам, чтобы не получать запросы на ввод парол€ при каждом обрыве и восстановлении соединени€.

ѕо умолчанию, Autossh не установлен. „тобы установить эту утилиту введем команду ниже.

$ sudo apt-get install autossh

—интаксис утилиты autossh почти похож на синтаксис ssh:

$ autossh -L 80:example1.com:80 example2.com
—оздание посто€нного туннел€ (Autossh)

ѕереброс удалЄнного порта

ѕереброс порта с удалЄнной машины используетс€ в тех случа€х, если нужно предоставить доступ на свой хост. ƒопусти у нас установлен веб сервер и нам нужно, чтобы друзь€ могли пользоватьс€ им. ƒл€ этого нужно ввести команду показанную ниже:

$ ssh -R 8080:localhost:80 geek@likegeeks.com

ј общий синтаксис команды выгл€дит так:

$ ssh -R remote_port:local_ip:local_port user@hostname.com

ƒинамическа€ переадресаци€ портов

ƒинамическа€ переадресаци€ портов позволит ssh функционировать как прокси-сервер. ¬место переброса трафика на специфический порт, здесь трафик будет идти через на диапазон портов.

≈сли вы когда-нибудь пользовались прокси сервером дл€ посещени€ заблокированного сайта или просмотра контента, недоступного в вашем регионе, веро€тнее всего вы пользовались SOCKS сервером.

ƒинамическа€ переадресаци€ также обеспечивает некоторую приватность. ќна затрудн€ет логирование и анализ трафика, так как трафик проходит через промежуточный сервер. ƒл€ настройки динамической переадресации используетс€ следующа€ команда:

$ ssh -D local_port user@hostname.com

“аким образом, если нужно весь трафик идущий на порт 1234 направить на SSH сервер, нужно ввести команду:

$ ssh -D 1234 geek@likegeeks.com

ѕосле установлени€ соединени€, мы можем указать в приложени€х, например, браузере, пропускать трафик через туннель.

пропускать трафик через туннель

ћножественна€ переадресаци€

»ногда приходитс€ перебрасывать несколько внутренних портов на несколько внешних. ƒопустим у нас на одном и том же сервере крут€тс€ и веб сервер и oracale. ¬ таком случае мы можем указать несколько условий переадресации став€ перед каждым из них ключ L дл€ локальной переадресации и R дл€ внешней.

$ ssh -L local_port_1:remote_ip:remote_port_1 -L local_port_2:remote_ip:remote_port2 user@hostname.com
$ ssh -L 8080:192.168.1.1:80 -L 4430:192.168.1.1:1521 user@hostname.com
$ ssh -R remote_port1:local_ip:local_port1 remote_port2:local_ip:local_port2 user@hostname.com

ѕросмотр списка туннелей

„тобы просмотреть сколько SSH туннелей активны на данный момент можно прибегнуть к помощи команды lsof:

$ lsof -i | egrep '\<ssh\>'
ѕросмотр списка туннелей

 ак видим, на нашей системе сейчас активно три подключени€. „тобы вместо имени хоста показать IP адрес к команде нужно добавить ключ n.

$ lsof -i -n | egrep '\<ssh\>'
показать IP адрес к команде

ќграничение переадресации портов

ѕо умолчанию, переброс портов SSH активен дл€ всех. Ќо если нужно ограничить переадресацию портов в цел€х безопасности, то нужно отредактировать файл sshd_config.

$ sudo vi /etc/ssh/sshd_config

«десь есть несколько опций, позвол€ющих ограничивать создание SSH туннелей.

PermitOpen позвол€ет прописать адреса, дл€ которых можно включить переадресацию портов. “ут можно указать конкретный IP адреса или название хоста:

PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port

AllowTCPForwarding данна€ опци€ включает или отключает переадресацию портов дл€ SSH. “ак же можно указать какой тип переадресации допускаетс€ на этом хосте.

AllowTCPForwarding yes #default setting
AllowTCPForwarding no #prevent all SSH port forwarding
AllowTCPForwarding local #allow only local SSH port forwarding
AllowTCPForwarding remote #allow only remote SSH port forwarding

ƒл€ подробной информации можно вызвать руководство по файлу sshd_config:

$ man sshd_config

”меньшение задержки

ѕроблема с переадресацией портов на SSH это возможность увеличени€ задержки. ѕри работе с текстовой информацией э то не критично. ѕроблема даЄт о себе знать если по сети идЄт много трафика, а SSH сервер настрое как SOCKS сервер, то есть на нЄм настроена динамический переброс портов.

Ёто происходит по той причине, что SSH туннели по сути это TCP туннель поверх TCP. Ёто не очень эффективный метод передачи данных.

ƒл€ решени€ проблемы можно настроить VPN, но если по какой-то причине предпочитаете SSH туннели, то существует программа sshuttle, котора€ устран€ет проблему. Ќа Ubuntu или других дистрибутивах семейства Debian программу можно установить командой

$ sudo apt-get install sshuttle

≈сли же программы нет в репозитори€х дистрибутива, то можно вз€ть ее с GitHub:

$ git clone https://github.com/sshuttle/sshuttle.git
$ cd sshuttle
$ ./setup.py install

Ќастройка туннел€ в sshuttle отличаетс€ от SSH. „тобы завернуть весь трафик в туннель нужно ввести следующую команду:

$ sudo sshuttle -r user@remote_ip -x remote_ip 0/0 vv
”меньшение задержки SSH туннел€

ѕрервать соединение можно комбинацией клавиш Ctrl+C. „тобы запустить sshuttle как демон, нужно добавить ключ D.

„тобы убедитьс€ что туннель подн€т и в глобальной сети показываетс€ другой IP, в терминале можно ввести команду:

$ curl ipinfo.io
ѕроверка туннел€

»ли же просто открыть любой другой сайт, который покажет белый IP и местоположение.