Как настроить SSH-Jump Server

Чтобы сделать администрирование серверов под облачную инфраструктуру безопасней и удобней, рекомендуется создать SSH Jumpstation. Из статьи вы узнаете, как настраивается единая точка входа для соединения по ssh – SSH Jump Server. Как это реализовать, покажем на примерах двух программ с открытым исходным кодом.

  • Классический подход с применением OpenSSH. Достоинство данного способа в том, что в базовую комплектацию Linux-серверов уже входят пакеты OpenSSH
  • Работа с opensource-проектом Teleport

Данные серверы легко установить и настроить, пользоваться ими можно бесплатно.

 SSH Jump Server

Что собой представляет SSH Jump Server?

SSH Jump Server является доступным из сети сервером Linux, через который осуществляется доступ к прочим машинам Linux в частной сети с протоколом SSH. Смысл SSH Jump Server в том, чтобы он стал единственным шлюзом, через который можно получить доступ к внутренней IT-инфраструктуре. Таким образом уменьшается потенциальная площадь для атаки.

Присутствие выделенной точки доступа ощутимо упрощает ведение журнала аудита текущих SSH-соединений.

Настраиваем SSH Jump Server

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

  • предотвратить случайное обновление конфигурации jump-сервера
  • исключить его потенциальное использования для посторонних задач

Рекомендуем заменить TCP-порт, установленный по умолчанию с 22 на другой.

Разберём настройку сервера перехода SSH с применением двух программ. Первым будет OpenSSH, как наиболее распространённый.

В примерах будут участвовать следующие имена:

  • Домен компании: example.com
  • DNS-имя jump-сервера: proxy.example.com

proxy.example.com принимается, как единственная машина в локальной сети компании, к которой есть доступ из Интернета.

OpenSSH

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

Доступ к jump-серверу proxy.example.com открывает доступ к остальным серверам в данной локальной сети за этим NAT. Для этого нужен флаг -J в командной строке:

$ ssh -J proxy.example.com 10.3.3.1

В примере 10.3.3.1 является адресом конечной станции в локалке, куда вы подключаетесь. Чтобы не вводить в командной строке параметры -J proxy.example.com, можно сразу обновить конфигурацию на клиенте в файле ~/.ssh/config. Делается это следующим образом:

Host 10.2.2.*
    ProxyJump proxy.example.com

Теперь, если пользователь пишет ssh 10.3.3.1, SSH-клиент не разрешит локальное подключение к 10.3.3.1. Вместо этого он выполнит соединение c proxy.example.com, а уже оттуда произойдёт переадресация на 10.3.3.1 в собственном локальном сегменте.

Далее повысим безопасность jump-сервера. Для этого отключим интерактивные сеансы SSH для рядовых пользователей, сохранив их для администраторов. Чтобы сделать это, нужно обновить конфигурацию sshd. Чаще всего она располагается в файле /etc/ssh/sshd_config:

# Do not let SSH clients do anything except be forwarded to the destination:
PermitTTY no
X11Forwarding no
PermitTunnel no
GatewayPorts no
ForceCommand /sbin/nologin

Описанный выше пример будет актуален для Debian и его производных, рекомендуем проверить наличие файла /sbin/nologin.

Данная конфигурация будет функционировать, если на jump-сервере присутствуют учётки каждого пользователя SSH, но это неудобно. Лучше создать специальную учётную запись для перенаправляемых юзеров. Назовём её jumpuser и выполним обновление конфигурации ssh-сервера:

Match User jumpuser
  PermitTTY no
  X11Forwarding no
  PermitTunnel no
  GatewayPorts no
  ForceCommand /usr/sbin/nologin

Пользователям тоже следует обновить конфигурацию в файле ~/.ssh/config:

Host 10.2.2.*
    ProxyJump jumpuser@proxy.example.com

Чтобы получить дополнительную информацию по конфигурированию SSH в частных случаях, обратитесь к man ssh_config; man sshd_config.

Чтобы настройка сработала, нужно, чтобы общедоступные ключи были верно распределены не только между клиентами и jump-сервером, но и между клиентами и конечными серверами.

Teleport

Teleport представляет собой SSH-сервер и клиент, релиз которого состоялся в 2016 году. Он ориентирован на работу с кластерами и многочисленными узлами.

Как настроить SSH-Jump Server

  • Teleport снабжён веб-интерфейсом, который позволяет подключаться к SSH через браузер.
  • Teleport избавляет от ведения инвентаризации серверов. Он предлагает оперативный самоанализ, все серверы можно наблюдать онлайн:
Teleport proxy

Кроме современных опций прокси, Teleport имеет ряд преимуществ по сравнению с прочими SSH:

  • Teleport не работает с SSH-ключами, вместо этого применяются безопасные сертификаты. Это значит, что настраивать SSH-серверы здесь намного проще.
  • Teleport дополнительно поддерживает другие протоколы помимо SSH, поэтому jump-сервер можно применять для доступа к прочим ресурсам за NAT.
  • Teleport поддерживает отдельную базу данных юзеров для аутентификации. Также он может интегрироваться через единый вход с такими поставщиками аутентификации, как Github, Google Apps, Okta и Active Directory.

Teleport поставляется совместно с прокси, поэтому для настройки не требуются инструкции. Скачать можно по ссылке.

Остальные особенности Teleport:

  • Доступ можно получить как через привычную командную строку, так и через HTTPS с эмуляцией терминала в браузере
  • Есть опции аудита и повторного выполнения типовых операций. SSH-сеансы могут быть записаны и, если нужно, воспроизводиться на новых хостах
  • Доступен режим совместной работы, когда несколько человек используют один сеанс
  • Автоматически определяются доступные рабочие серверы и контейнеры Docker в кластерах, где имена хостам присваиваются динамически
  • Для соединения с кластерами доступно обратное туннелирование (отгорожено межсетевым экраном)
  • Можно определить метки для наглядного деления узлов кластера
  • Если происходит серия неудачных попытках получить доступ, вход блокируется
  • Пользователи сопоставляются с логинами на конечных узлах через списки маппинга
  • Чтобы соединиться с хостом необходимо указать два имени — наименование кластера и узла в нём. Teleport управляет именно кластерами, а не отдельными серверами. Для каждого юзера и хоста определяется, к какому кластеру он принадлежит
  • Узлы соединяются с кластером через статические или генерируемые динамические токены, которые можно отозвать, если понадобится запретить вход на конкретный узел
  • Чтобы соединиться с серверами Teleport внутри кластера можно пользоваться обычным клиентом OpenSSH (нужно скопировать ключи)
  • Teleport успешно прошёл аудит безопасности кода у независимой компетентной компании

Заключение

Вы узнали, как настроить SSH-jump сервер, пользуясь OpenSSH и Teleport. Какой лучше?

OpenSSH подходит, если:

  • В организации мало машин и/или пользователей
  • Требуется быстрая настройка jump-сервера, а вам некогда изучать новые технологии

Teleport подходит, если:

  • Число машин или сотрудников растёт
  • Требуется подключиться к внешним серверам, а не только в локальной сети.
  • У вас есть время на изучение нового инструмента
Вверх!