SSH-туннелирование (также называемое перенаправление портов SSH) — это просто маршрутизация трафика локальной сети через SSH на удаленные хосты. Это означает, что все ваши соединения защищены с помощью шифрования. Это обеспечивает простой способ настройки основного VPN (Virtual Private Network), полезного для подключения к частным сетям по незащищенным сетям общего пользования, таким как Интернет.
Вы также можете использовать показ локальных серверов за NAT и брандмауэров в Интернете через защищенные туннели, как это реализовано в ngrok.
Сессии SSH разрешают туннельные сетевые подключения по умолчанию, и существует три типа пересылки портов SSH: локальная, удаленная и динамическая переадресация портов.
Если вы интересуетесь защитой компьютерной сети на предприятии, можно заказать Касперский стандартный у золотого партнера Лаборатории Касперского: его предложение отличается более привлекательной ценой и доставкой во все регионы РФ.
В этой статье мы продемонстрируем, как быстро и легко настроить туннелирование SSH или различные типы переадресации портов в Linux.
Испытательная среда:
Для целей этой статьи мы используем следующую настройку:
- Локальный хост : 192.168.43.31
- Удаленный хост : Linode CentOS 7 VPS с именем хоста server1.example.com.
Как правило, вы можете безопасно подключиться к удаленному серверу с помощью SSH следующим образом. В этом примере я настроил SSH-вход без пароля между локальными и удаленными хостами, поэтому он не запрашивал пользовательский пароль администратора.
$ ssh admin@server1.example.com
Локальное перенаправление портов SSH
Этот тип переадресации портов позволяет подключаться с локального компьютера к удаленному серверу. Предполагая, что вы находитесь за ограничительным брандмауэром или заблокированы исходящим брандмауэром от доступа к приложению, запущенному на порту 3000 на удаленном сервере.
Вы можете перенаправить локальный порт (например, 8080), который затем можно использовать для доступа к приложению локально следующим образом. Флаг -L
определяет порт, пересылаемый на удаленный хост и удаленный порт.
$ ssh admin@server1.example.com -L 8080: server1.example.com:3000
Добавление флага -N
означает не выполнять удаленную команду, вы не получите шелл в этом случае.
$ ssh -N admin@server1.example.com -L 8080: server1.example.com:3000
Переключатель -f
дает команду SSH, чтобы работать в фоновом режиме.
$ ssh -f -N admin@server1.example.com -L 8080: server1.example.com:3000
Теперь откройте браузер на вашей локальной машине, и вместо того чтобы обращаться к удаленному приложению, используя адрес server1.example.com:3000
, вы можете просто использовать localhost:8080
или 192.168.43.31:8080
, как показано на скриншоте ниже.
Удаленное перенаправление портов SSH
Удаленная переадресация портов позволяет вам подключиться с удаленного компьютера к локальному компьютеру. По умолчанию SSH не разрешает удаленное перенаправление портов. Вы можете включить это с помощью директивы GatewayPorts в главном файле конфигурации SSHD: /etc/ssh/sshd_config на удаленном хосте.
Откройте файл для редактирования, используя ваш любимый редактор командной строки.
$ sudo vim/etc/ssh/sshd_config
Найдите требуемую директиву, раскомментируйте ее и установите ее значение yes
, как показано на скриншоте.
GatewayPorts yes
Сохраните изменения и выйдите. Затем вам необходимо перезапустить sshd, чтобы применить последнее изменение, которое вы сделали.
$ sudo systemctl restart sshd OR $ sudo service sshd restart
Затем запустите следующую команду для перенаправления порта 5000 на удаленном компьютере на порт 3000 на локальном компьютере.
$ ssh -f -N admin@server1.example.com -R 5000:localhost:3000
Как только вы поймете этот метод туннелирования, вы можете легко и безопасно выявить локальный сервер разработки, особенно за NAT и брандмауэрами в Интернете по защищенным туннелям. Аналогичным образом работают туннели, такие как Ngrok, pagekite, localtunnel и многие другие.
Динамическое перенаправление портов SSH
Это третий тип переадресации портов. В отличие от локальной и удаленной переадресации портов, которые позволяют обмениваться данными с одним портом, это делает возможным полный набор TCP-коммуникаций в разных портах. Динамическая переадресация портов настраивает ваш компьютер как прокси-сервер SOCKS, который по умолчанию прослушивает порт 1080.
Для начинающих, SOCKS — это интернет-протокол, который определяет, как клиент может подключаться к серверу через прокси-сервер (SSH в этом случае). Вы можете включить динамическую переадресацию портов с помощью опции -D
.
Следующая команда запустит прокси SOCKS на порту 1080, что позволит вам подключиться к удаленному хосту.
$ ssh -f -N -D 1080 admin@server1.example.com
С этого момента вы можете заставить приложения на вашем компьютере использовать этот прокси-сервер SSH, отредактировав их настройки и настроив их на использование, чтобы подключиться к удаленному серверу. Обратите внимание, что прокси-сервер SOCKS перестанет работать после закрытия сеанса SSH.
Резюме
В этой статье мы объяснили различные типы переадресации портов с одной машины на другую, для туннелирования трафика через безопасное соединение SSH. Это одно из многих применений SSH.
Внимание: перенаправление портов SSH имеет некоторые существенные недостатки: его можно использовать для использования в обходном сетевом мониторинге и программах фильтрации трафика (или брандмауэрах). Атакующие могут использовать его для злонамеренных действий.