Table of Contents
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 (требуется копирование ключей);
- Успешно пройден аудит безопасности кода, заказанный в независимой проверяющей компании