Чтобы сделать администрирование серверов под облачную инфраструктуру безопасней и удобней, рекомендуется создать SSH Jumpstation. Из статьи вы узнаете, как настраивается единая точка входа для соединения по ssh – SSH Jump Server. Как это реализовать, покажем на примерах двух программ с открытым исходным кодом.
- Классический подход с применением OpenSSH. Достоинство данного способа в том, что в базовую комплектацию Linux-серверов уже входят пакеты OpenSSH
- Работа с opensource-проектом Teleport
Данные серверы легко установить и настроить, пользоваться ими можно бесплатно.
Что собой представляет 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
принимается, как единственная машина в локальной сети компании, к которой есть доступ из Интернета.
до 40% от каждого клиентаСтать партнёром
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 году. Он ориентирован на работу с кластерами и многочисленными узлами.
- Teleport снабжён веб-интерфейсом, который позволяет подключаться к SSH через браузер.
- Teleport избавляет от ведения инвентаризации серверов. Он предлагает оперативный самоанализ, все серверы можно наблюдать онлайн:
Кроме современных опций прокси, 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 подходит, если:
- Число машин или сотрудников растёт
- Требуется подключиться к внешним серверам, а не только в локальной сети.
- У вас есть время на изучение нового инструмента