Forward port linux ssh

Ubuntu Documentation

Introduction

Port forwarding via SSH (SSH tunneling) creates a secure connection between a local computer and a remote machine through which services can be relayed. Because the connection is encrypted, SSH tunneling is useful for transmitting information that uses an unencrypted protocol, such as IMAP, VNC, or IRC.

Types of Port Forwarding

SSH’s port forwarding feature can smuggle various types of Internet traffic into or out of a network. This can be used to avoid network monitoring or sniffers, or bypass badly configured routers on the Internet. Note: You might also need to change the settings in other programs (like your web browser) in order to circumvent these filters.

Warning: Filtering and monitoring is usually implemented for a reason. Even if you don’t agree with that reason, your IT department might not take kindly to you flouting their rules.

There are three types of port forwarding with SSH:

Local port forwarding: connections from the SSH client are forwarded via the SSH server, then to a destination server

Remote port forwarding: connections from the SSH server are forwarded via the SSH client, then to a destination server

Dynamic port forwarding: connections from various programs are forwarded via the SSH client, then via the SSH server, and finally to several destination servers

Local port forwarding is the most common type. For example, local port forwarding lets you bypass a company firewall that blocks Wikipedia.

Remote port forwarding is less common. For example, remote port forwarding lets you connect from your SSH server to a computer on your company’s intranet.

Dynamic port forwarding is rarely used. For example, dynamic port forwarding lets you bypass a company firewall that blocks web access altogether. Although this is very powerful, it takes a lot of work to set up, and it’s usually easier to use local port forwarding for the specific sites you want to access.

Port-forwarding is a widely supported technique and a feature found in all major SSH clients and servers, although not all clients do it the same way. For help on using a specific client, consult the client’s documentation. For example, the PuTTY manual has a section on port forwarding in PuTTY.

To use port forwarding, you need to make sure port forwarding is enabled in your server. You also need to tell your client the source and destination port numbers to use. If you’re using local or remote forwarding, you need to tell your client the destination server. If you’re using dynamic port forwarding, you need to configure your programs to use a SOCKS proxy server. Again, exactly how to do this depends on which SSH client you use, so you may need to consult your documentation.

Local Port Forwarding

Local port forwarding lets you connect from your local computer to another server. To use local port forwarding, you need to know your destination server, and two port numbers. You should already know your destination server, and for basic uses of port forwarding, you can usually use the port numbers in Wikipedia’s list of TCP and UDP port numbers.

For example, say you wanted to connect from your laptop to http://www.ubuntuforums.org using an SSH tunnel. You would use source port number 8080 (the alternate http port), destination port 80 (the http port), and destination server www.ubuntuforums.org. :

Where should be replaced by the name of your laptop. The -L option specifies local port forwarding. For the duration of the SSH session, pointing your browser at http://localhost:8080/ would send you to http://www.ubuntuforums.org/.

In the above example, we used port 8080 for the source port. Ports numbers less than 1024 or greater than 49151 are reserved for the system, and some programs will only work with specific source ports, but otherwise you can use any source port number. For example, you could do:

This would forward two connections, one to www.ubuntuforums.org, the other to www.ubuntu.com. Pointing your browser at http://localhost:8080/ would download pages from www.ubuntuforums.org, and pointing your browser to http://localhost:12345/ would download pages from www.ubuntu.com.

The destination server can even be the same as the SSH server. For example, you could do:

This would forward connections to the shared desktop on your SSH server (if one had been set up). Connecting an SSH client to localhost port 5900 would show the desktop for that computer. The word «localhost» is the computer equivalent of the word «yourself», so the SSH server on your laptop will understand what you mean, whatever the computer’s actual name.

Читайте также:  Работа виртуальные машины linux

Remote Port Forwarding

Remote port forwarding lets you connect from the remote SSH server to another server. To use remote port forwarding, you need to know your destination server, and two port numbers. You should already know your destination server, and for basic uses of port forwarding, you can usually use the port numbers in Wikipedia’s list of TCP and UDP port numbers.

For example, say you wanted to let a friend access your remote desktop, using the command-line SSH client. You would use port number 5900 (the first VNC port), and destination server localhost:

The -R option specifies remote port forwarding. For the duration of the SSH session, Joe would be able to access your desktop by connecting a VNC client to port 5900 on his computer (if you had set up a shared desktop).

Dynamic Port Forwarding

Dynamic port forwarding turns your SSH client into a SOCKS proxy server. SOCKS is a little-known but widely-implemented protocol for programs to request any Internet connection through a proxy server. Each program that uses the proxy server needs to be configured specifically, and reconfigured when you stop using the proxy server.

For example, say you wanted Firefox to connect to every web page through your SSH server. First you would use dynamic port forwarding with the default SOCKS port:

The -D option specifies dynamic port forwarding. 1080 is the standard SOCKS port. Although you can use any port number, some programs will only work if you use 1080. -C enables compression, which speeds the tunnel up when proxying mainly text-based information (like web browsing), but can slow it down when proxying binary information (like downloading files).

Next you would tell Firefox to use your proxy:

go to Edit -> Preferences -> Advanced -> Network -> Connection -> Settings.

  • check «Manual proxy configuration»
  • make sure «Use this proxy server for all protocols» is cleared
  • clear «HTTP Proxy», «SSL Proxy», «FTP Proxy», and «Gopher Proxy» fields
  • enter «127.0.0.1» for «SOCKS Host»
  • enter «1080» (or whatever port you chose) for Port.
  • You can also set Firefox to use the DNS through that proxy, so even your DNS lookups are secure:

    • Type in about:config in the Firefox address bar
    • Find the key called «network.proxy.socks_remote_dns» and set it to true

    The SOCKS proxy will stop working when you close your SSH session. You will need to change these settings back to normal in order for Firefox to work again.

    To make other programs use your SSH proxy server, you will need to configure each program in a similar way.

    Forwarding GUI Programs

    SSH can also forward graphical applications over a network, although it can take some work and extra software to forward programs to Windows or Mac OS.

    Single Applications

    If you are logging in from a Unix-like operating system, you can forward single applications over SSH very easily, because all Unix-like systems share a common graphics layer called X11. This even works under Mac OS X, although you will need to install and start the X11 server before using SSH.

    To forward single applications, connect to your system using the command-line, but add the -X option to forward X11 connections:

    Once the connection is made, type the name of your GUI program on the SSH command-line:

    Your program will start as normal, although you might find it’s a little slower than it would be if it were running locally. The trailing & means that the program should run in «background mode», so you can start typing new commands in straight away, rather than waiting for your program to finish.

    If you only want to run a single command, you can log in like this:

    That will run Firefox, then exit when it finishes. See the SSH manual page for information about -f and -T.

    If you start an application and it complains that it cannot find the display, try installing the xauth package from the Main repository (click here to install xauth). Xauth is installed by default with desktop installations but not server installations.

    If you suspect that programs are running slowly because of a lack of bandwith, you can turn SSH compression on with the -C option:

    Using -fTXC here is identical to -f -T -X -C.

    Nested Windows

    Xephyr is a program that gives you an X server within your current server. It’s available in the xserver-xephyr package in the Main repository (click here to install xserver-xephyr).

    Two ssh forwarded desktops on dual monitors, click to enlarge

    Setting up Xephyr was explained briefly in the Ubuntu forums.

    Port Forwarding Explained

    To get the most out of port forwarding, it’s helpful to know a bit about how the Internet works.

    Читайте также:  Drivers mtp usb windows 10

    The Internet assigns computers virtual «ports», a bit like the USB ports on the back of your computer:

    To let a digital camera share pictures with your PC, you connect the USB port on the camera to any USB port on the PC. The computer then talks to the camera about your photos, and shows you the result.

    To let a web server share pages with your PC, you connect the web server port on the server to any Internet port on the PC. The computer then talks to the server about your page, and shows you the result.

    Unlike a USB port, there is no physical component to an Internet port. There’s no actual wire, or actual hole on the back of your computer. It’s all just messages being sent over the Internet. Like other «virtual» computer concepts, Internet ports are just an analogy that help to explain what your computer is doing. Sometimes, that analogy breaks down:

    There are two types of Internet port: normal «TCP» ports and strange «UDP» ports (which won’t be covered here).

    Unlike USB ports, every computer has exactly 65,535 numbered TCP ports, some of which have a special purpose. For example, port number 80 is your web server port, so your web browser knows it should connect to port number 80 in order to download a web page.

    Connections between Internet ports can be patched together, so a connection from computer A to computer B on port 12,345 could be patched through to port number 80 on computer C. This is known as port forwarding.

    Troubleshooting

    If you get a message like this when you try to forward a port:

    then someone is already listening on that port number. You won’t be able to listen on that port until the other person has finished with it.

    If forwarding doesn’t seem to work, even though you didn’t get a warning message, then your SSH server might have disabled forwarding. To check, do the following:

    If you see something like this:

    then forwarding is disabled on your server. See the SSH configuration page for more information.

    SSH/OpenSSH/PortForwarding (последним исправлял пользователь knome 2013-12-13 23:26:10)

    The material on this wiki is available under a free license, see Copyright / License for details
    You can contribute to this wiki, see Wiki Guide for details

    Источник

    ИТ База знаний

    Курс по Asterisk

    Полезно

    — Узнать IP — адрес компьютера в интернете

    — Онлайн генератор устойчивых паролей

    — Онлайн калькулятор подсетей

    — Калькулятор инсталляции IP — АТС Asterisk

    — Руководство администратора FreePBX на русском языке

    — Руководство администратора Cisco UCM/CME на русском языке

    — Руководство администратора по Linux/Unix

    Серверные решения

    Телефония

    FreePBX и Asterisk

    Настройка программных телефонов

    Корпоративные сети

    Протоколы и стандарты

    Про SSH port forwarding в Linux

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

    Мини — курс по виртуализации

    Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

    Что такое переброс порта 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 порт удалённой системы.

    Читайте также:  Windows 10 hibernate button

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

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

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

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

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

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

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

    Если переадресация работает и трафик проходит, то утилита вернёт «Успех!». В противном случае выдаст ошибку об истечении времени ожидания.

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

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

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

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

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

    Переброс удалённого порта

    Переброс порта с удалённой машины используется в тех случаях, если нужно предоставить доступ на свой хост. Допусти у нас установлен веб сервер и нам нужно, чтобы друзья могли пользоваться им. Для этого нужно ввести команду показанную ниже:

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

    Динамическая переадресация портов

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

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

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

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

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

    Множественная переадресация

    Иногда приходится перебрасывать несколько внутренних портов на несколько внешних. Допустим у нас на одном и том же сервере крутятся и веб сервер и oracale. В таком случае мы можем указать несколько условий переадресации ставя перед каждым из них ключ L для локальной переадресации и R для внешней.

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

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

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

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

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

    $ sudo vi /etc/ssh/sshd_config

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

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

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

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

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

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

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

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

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

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

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

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

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

    Мини — курс по виртуализации

    Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

    Источник

    Оцените статью