User Tools

Site Tools


ssh_jump_server

SSH Jump Server

SSH Jump Server – это обычный сервер Linux, доступный из интернета, который используется в качестве шлюза для доступа к другим машинам Linux в частной сети с использованием протокола SSH. Иногда SSH Jump Server также называют jump host или bastion host. Назначение SSH Jump Server – быть единственным шлюзом для доступа к вашей инфраструктуре, уменьшая размер потенциальной поверхности атаки. Наличие выделенной точки доступа SSH также упрощает ведение сводного журнала аудита всех SSH подключений.

Настройка SSH Jump Server

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

Также неплохо изменить порт TCP по умолчанию на сервере перехода SSH с 22 на другой.

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

  • Домен организации: example.com
  • DNS-имя jump-сервера организации будет jump.example.com

Также предполагается, что jump.example.com – это единственная машина в локальной сети организации, доступная из Интернета.

OpenSSH

SSH-сервера, по умолчанию входит в состав большинства дистрибутивов Linux, и есть почти 100% вероятность, что он уже установлен. Если у есть доступ к jump-серверу jump.example.com, можно получить доступ к другим серверам в локальной сети за этим NAT с помощью флага -Jв командной строке:

ssh -J jump.example.com 10.10.10.14

В приведённом выше примере, 10.10.10.14 – это адрес конечного хоста в локальной сети, к которому подключаемся.

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

Host 10.10.10.*
    ProxyJump jump.example.com

Теперь, когда пользователь вводит:

ssh 10.10.10.14

SSH-клиент даже не пытается разрешить адрес 10.10.10.14 локально, а вместо этого устанавливает соединение c jump.example.com, которое перенаправляет его на 10.10.10.14 в своем локальном сегменте.

Теперь нужно немного усилить конфигурацию безопасности jump-сервера, отключив интерактивные сеансы SSH на jump-сервере для обычных пользователей, но оставив их включёнными для администраторов. Для этого необходимо обновить конфигурацию 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, что не очень удобно. Вместо этого рассмотрите возможность создания отдельной учётной записи на jump-сервере, предназначенной для перенаправляемых пользователей ssh. Назовём эту учётную запись jumpuser и обновим конфигурацию ssh-сервера:

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

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

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

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

Teleport

Teleport — это SSH-сервер и клиент, ориентированный на работу с кластерами и большим количеством узлов.

  • Teleport настаивает на использовании прокси-сервера SSH по умолчанию, а его прокси-сервер SSH имеет веб-интерфейс, позволяющий пользователям подключаться к SSH с помощью браузера.
  • В отличие от традиционных серверов SSH, Teleport устраняет необходимость в ведении «инвентаризации» серверов, поскольку предлагает оперативный самоанализ, то есть вы можете увидеть все онлайн-серверы за прокси, как показано на скриншоте


Помимо современных функций прокси, Teleport предлагает несколько преимуществ по сравнению с традиционным SSH:

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

Teleport всегда поставляется с прокси (то же самое, что и jump-сервер), и нет необходимости в специальных инструкциях по его настройке. Скачать его можно здесь.

Другие особенности Teleport:

  • Помимо традиционного интерфейса командной строки имеется возможность входа через HTTPS с эмуляцией терминала в web-браузере;
  • Поддержка функций аудита и повторения типовых операций. Содержимое SSH-сеансов может записываться и при необходимости;
    воспроизводиться на других хостах
  • Режим совместного решения проблем, при котором несколько человек могут совместно использовать один сеанс SSH;
  • Автоматическое определение доступных рабочих серверов и контейнеров Docker в кластерах с динамическим присвоением имён хостам;
  • Поддержка обратного туннелирования для подключения к кластерам, ограждённым межсетевым экраном;
  • Возможность определения меток для наглядного разделения узлов кластера;
  • Поддержка блокировки доступа после нескольких неудачных попыток входа;
  • Сопоставление пользователей с логинами на конечных узлах осуществляется через специальные списки маппинга;
  • Для подсоединения к хосту требуется указать два имени — имя кластера и имя узла в кластере. Teleport ориентирован на управление кластерами, а не отдельными серверами. Для каждого пользователя и хоста определяется принадлежность к кластеру;
  • Узлы подключаются к кластеру через определение статичестких или генерацию динамических токенов, которые при желании можно отозвать для запрета входа на данный узел;
  • Для подсоединения к серверам Teleport внутри кластера можно использовать обычный клиент OpenSSH (требуется копирование ключей);
  • Успешно пройден аудит безопасности кода, заказанный в независимой проверяющей компании
ssh_jump_server.txt · Last modified: 2023/04/06 10:28 (external edit)