Настройка SSH-туннелей
Туннелирование сетевого трафика через безопасный SSH-туннель — это отличный способ обойти ограничительные настройки брандмауэра и зашифровать незашифрованный сетевой трафик.
Настройка локального туннелирования к серверу
SSH-соединения можно использовать для туннелирования трафика от портов локального хоста к портам удаленного хоста.
Локальное соединение — это способ доступа к сетевому местоположению с вашего локального компьютера через удаленный хост. Сначала устанавливается SSH-соединение с удаленным хостом. На удаленном сервере устанавливается соединение с внешним (или внутренним) сетевым адресом, предоставленным пользователем, и трафик в это местоположение туннелируется на ваш локальный компьютер по указанному порту.
Это часто используется для доступа к менее ограниченной сетевой среде за пределами брандмауэра. Другое распространенное применение — доступ к веб-интерфейсу «только для локального хостинга» из удаленного местоположения.
Чтобы установить локальный туннель к удаленному серверу, используйте параметр -L при подключении и предоставьте три дополнительных элемента информации:
- Локальный порт, через который вы хотите получить доступ к туннельному соединению.
- Хост, к которому вы хотите подключиться на вашем удаленном хосте.
- Порт, к которому вы хотите подключить ваш удаленный хост.
Они указываются в порядке: «локальный порт:хост:удаленный порт» в качестве аргументов для флага -L. Мы также используем флаг -f, чтобы SSH перешел в фоновый режим перед выполнением, и флаг -N, чтобы не открывать оболочку или не выполнять программу на удаленной стороне.
Например, чтобы подключиться к вашему удаленному хосту с портом 80 через порт 8888 на вашем локальном компьютере, вы можете ввести:
~$ ssh -f -N -L 8888:your_domain:80 username@remote_host
Теперь, если вы откроете свой веб-браузер и перейдете на 127.0.0.1:8888, вы увидите содержимое вашего удаленного хоста, работающего на порту 80.
Более общий синтаксис:
~$ ssh -L your_port:your_domain:domain_port username@remote_host
Поскольку соединение выполняется в фоновом режиме, для его отключения вам нужно будет найти его PID. Вы можете сделать это, выполнив поиск порта, который вы перенаправили:
~$ ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host
1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888
Затем остановите процесс, выбрав PID, соответствующий вашей SSH-команде:
~$ kill 5965
Другой вариант — запустить соединение без флага -f, чтобы сохранить его на переднем плане и легко отключить, нажав CTRL-C.
Настройка удаленного туннелирования к серверу
SSH-подключения можно эффективно использовать для туннелирования трафика с портов локальной машины к портам на удалённом сервере.
При создании удалённого туннеля устанавливается связь с удалённым сервером, при этом указывается удалённый порт. После этого этот порт на удалённой машине будет направлен к комбинации хоста и порта, к которой привязан локальный компьютер. Такой подход позволяет удалённой машине взаимодействовать с хостом через вашу локальную машину.
Этот механизм может быть особенно полезен, если требуется открыть доступ к внутренней сети, недоступной извне. При наличии разрешающего подключения на уровне брандмауэра это позволяет подключиться к удалённой машине и направить трафик от этой машины к внутренней сети.
Для установки удалённого туннеля к вашему удалённому серверу используется параметр -R во время подключения, требуется также указать три дополнительных параметра:
- Порт, через который удалённый сервер получит доступ к туннельному соединению.
- Хост, к которому вы желаете подключить свою локальную машину.
- Порт, к которому вы планируете подключиться на вашей локальной машине.
Эти параметры передаются в указанном порядке (разделённые двоеточиями) в качестве аргументов для флага -R. Кроме того, для перевода SSH в фоновый режим перед выполнением используется флаг -f, а флаг -N предотвращает открытие оболочки или выполнение программы на удалённой стороне.
Например, чтобы подключиться к your_domain через порт 80 на нашем локальном компьютере, сделав соединение доступным на нашем удаленном хосте через порт 8888, вы могли бы ввести:
~$ ssh -f -N -R 8888:your_domain:80 username@remote_host
Теперь, открыв веб-браузер на удаленном хостинге, 127.0.0.1:8888 вы сможете увидеть все содержимое, находящееся на your_domain порту 80.
Более общее руководство по синтаксису:
~$ ssh -R remote_port:site_or_IP_to_access:site_port username@host
Для прекращения туннелирования действуйте так-же, как делали выше, узнайте PID и сделайте kill.
Заключение
Приведенных выше примеров достаточно для основных сценариев, широко применяемых в практике администрирования Linux серверов. Эти примеры предоставляют инструменты для установки соединения с внутренней сетью удаленного хоста и обратно, открывая широкий спектр возможностей.
Добавить комментарий