Для работы с облачной инфраструктурой рекомендуется создавать 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-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.
ссылка на оригинал статьи https://habr.com/ru/company/cloud4y/blog/530516/
Добавить комментарий