Для работы с облачной инфраструктурой рекомендуется создавать SSH Jumpstation. Это позволяет повысить безопасность и удобство администрирования серверов. В этой статье мы расскажем, как настроить единую точку входа для подключений по ssh – SSH Jump Server. Для реализации выбраны два проекта с открытым исходным кодом.
Традиционный подход с использованием OpenSSH. Преимущество в том, что на ваших Linux-серверах уже предустановлены необходимые пакеты OpenSSH
Использование альтернативного opensource-проекта Teleport
Оба этих сервера просты в установке и настройке, бесплатны, имеют открытый исходный код и представляют собой демоны Linux с одним бинарником.
Что такое SSH Jump Server?
SSH Jump Server — это обычный сервер Linux, доступный из интернета, который используется в качестве шлюза для доступа к другим машинам Linux в частной сети с использованием протокола SSH. Иногда SSH Jump Server также называют jump host или bastion host. Назначение SSH Jump Server — быть единственным шлюзом для доступа к вашей инфраструктуре, уменьшая размер потенциальной поверхности атаки. Наличие выделенной точки доступа SSH также упрощает ведение сводного журнала аудита всех SSH подключений.
Почему бы не использовать термин SSH-proxy? Отчасти по историческим причинам. В первые дни использования SSH пользователям приходилось подключаться по SSH к Jump Server, а оттуда им приходилось снова вводить ssh, чтобы «перейти» к хосту назначения. Сегодня это делается автоматически, и Teleport фактически использует термин SSH-proxy для описания этой функции.
Настройка SSH Jump Server
Одной из хороших практик информационной безопасности будет использование выделенного SSH Jump-сервера, то есть отказаться от размещения на нём какое-либо другого общедоступного программного обеспечения. Кроме того, нужно запретить пользователям напрямую входить на jump-сервер. Вот парочка причин:
Чтобы предотвратить непреднамеренное обновление конфигурации jump-сервера
Чтобы исключить возможность использования jump-сервера для других задач
Также неплохо изменить порт TCP по умолчанию на сервере перехода SSH с 22 на другой.
Давайте рассмотрим настройку сервера перехода SSH с использованием двух проектов с открытым исходным кодом. Начнём с OpenSSH, самого распространённого варианта.
Но сначала давайте введём некоторые имена, которые будут использоваться в примерах ниже:
Домен организации:
example.com
DNS-имя jump-сервера организации будет
proxy.example.com
Также предполагается, что proxy.example.com
— это единственная машина в локальной сети организации, доступная из Интернета.
OpenSSH
Этот пакет SSH-сервера по умолчанию входит в состав большинства дистрибутивов Linux, и есть почти 100% вероятность, что он у вас уже установлен. Если у вас есть доступ к jump-серверу proxy.example.com, вы можете получить доступ к другим серверам в локальной сети за этим NAT с помощью -J флага в командной строке:
$ ssh -J proxy.example.com 10.3.3.1
В приведённом примере 10.3.3.1
– это адрес конечной станции в локальной сети, к которой вы подключаетесь. Выглядит довольно просто.
Чтобы не печатать в командной строке параметры -J proxy.example.com
, вы можете обновить конфигурацию SSH на вашем клиенте в файле ~/.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 на 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
.
Надо заметить, что описанная выше настройка работает только когда общедоступные ключи SSH правильно распределены не только между клиентами и jump-сервером, но также между клиентами и серверами назначения.
Teleport
Teleport — это SSH-сервер и клиент, который был выпущен в 2016 году. 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 сервер с помощью двух проектов с открытым исходным кодом: OpenSSH и Teleport. Но какой же выбрать?
Используйте OpenSSH, если:
Количество серверов и/или пользователей в вашей организации невелико
Вам нужна быстрая настройка jump-сервера, и у вас не так много времени, чтобы изучить новые технологии
Используйте Teleport, если:
Ваш парк серверов или размер вашей команды растёт
Вам необходимо подключиться к серверам, расположенным «в дикой природе», то есть не ограничиваться только локальной сетью.
У вас есть пара часов, чтобы
поигратьсяизучить новый инструмент
Что ещё интересного есть в блоге Cloud4Y
→ В тюрьму за приложение
→ Детям о Кубернете, или приключения Фиппи в космосе
→ Определённо не Windows 95: какие операционные системы поддерживают работу в космосе?
→ Рассказываем про государственные защищенные сервисы и сети
→ Внутри центра обработки данных Bell Labs, 1960-е
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.