Давайте построим и настроем минимальный хост бастиона SSH (Right Box) с нуля, используя Ubuntu 20,04 LTS.
Какой хост бастиона?
Бастион — это военный смысл «выступающая часть укрепления».
Точно так же, что домашний Wi-Fi маршрутизатор сидит между обширным и опасным Интернетом и часто небезопасными устройствами в локальной сети, хост-бастион сидит между общедоступным Интернетом и внутренней сетью (например, VPC), действуя как шлюз Для достижения внутренних хостов при защите их от прямого воздействия диких природов общественного Интернета. Хосты на бастиона часто запускают OpenSSH или удаленный рабочий стол.
Хост-бастион служит важной уловой точкой в сети. Учитывая его позицию, это может Возьмите много обязанностей: журнал аудита и сеанса, аутентификация пользователя для внутренних хостов и расширенное обнаружение угроз. Но это не нужно делать все это. Мы собираемся держать вещи простыми здесь и построить бастион с нуля, который поддерживает прокси в области соединений SSH. Тогда мы поговорим о некоторых фаршных вещах, которые мы могли бы сделать.
Почему хозяин бастиона?
Если у вас есть внутренняя сеть, и вам нужно добраться до этих хостов из общедоступного Интернета, Host Bastion — это простой вариант.
Вам даже нужен бастион? Как и почти любое решение в технологии, это зависит. Вот некоторые альтернативы, которые вы могли бы рассмотреть.
Альтернативы бастионам
Настройте IPSec VPN
Если вам нужен более глубокий доступ к вашей внутренней сети, чем вы можете получить с SSH или RDP, вы можете захотеть VPN. Но IPsec VPNS добавляет много сложности и нагрузки на обслуживание по сравнению с другими вариантами, включая хосты на бастион.
Настройте сеть наложений
Наложенная сеть — легче и проще вроде VPN, которая поддерживает конечные точки роуминга. Это все еще берет немного установки. Наиболее распространенные варианты с открытым исходным кодом для этого являются Промежуточный и Туманность Отказ Вы можете запустить один из них на краю внутренней сети (например, VPN), или на всех хостах вы хотите получить доступ, а туннель SSH трафик через него. Все ваши клиенты также должны будут запустить Rizeguard или Nebula.
Используйте размещенный прокси
Google IAP и AWS Session Manager Разрешены решения, которые туннель SSH трафик к вашей внутренней облачной сети. Пособие здесь состоит в том, что вы можете использовать Cloud IAM Roles для аутентификации, и вы можете реализовать более сложные политики безопасности (политики безопасности или политики безопасности или политики уровня устройства, а не на основе IP-политики), которые не выполняются, если вы запускаете свой собственный хост бастиона Отказ Эти услуги могут свободно использовать, но недостаток является то, что IAP и AWS Manager — это более сложный, чем чистый SSH, и они добавляют некоторую блокировку в GCP или AWS.
Настройка бастиона
Давайте сделаем некоторые предположения:
- Мы хотим только для этого бастиона пересылать SSH-соединения на наших внутренних хозяев. Поскольку мы используем SSH здесь, пользователи должны будут аутентифицировать как к бастиону, а затем на внутренний хост. Чтобы завершить соединение, пользователи понадобятся действительные учетные данные для обоих хостов, но Можно использовать разные учетные данные для бастиона и внутреннего хозяина и мы собираемся воспользоваться этой функцией.
- У нас будет один общий пользователь для всех, и не допускаются интерактивные сеансы терминалов.
- Пользователи будут подключаться к внутренним хостам, используя
SSH -J. [Бастион] [Внутренний хост]
или сProxyJump
Директива вМатч-хост
Блок их.ssh/config
Отказ
Запустить экземпляр.
Встаньте экземпляр Linux на вашем любимом поставщике облака. Мы будем использовать Ubuntu 20.04 LTS, потому что это просто, Это хорошо поддерживается, и он включает в себя недавно выпущенный Openssh 8.2.
Настройте политику брандмауэра или групповой группы безопасности, чтобы ограничить соединения с бастионом в порт 22 (SSH), и, если вы можете, разрешены только соединениями из IPS, которые вы доверяете.
Настроить бастион
Нам нужно сделать несколько вещей, чтобы получить наш бастион.
Настроить OpenSSH
Мы рекомендуем исполнять Руководство по безопасности Mozilla OpenSSH Отказ К сожалению, их гид только охватывает только onenssh 6.7. Вот руководящие принципы, которые по-прежнему относятся к OpenSSH 8.2:
- Деактивировать короткие модули Отказ Модули используются для обмена ключами в начале соединения SSH. Mozilla рекомендует только использовать 3071-битные или большие модули для дополнительной безопасности. Чтобы обеспечить это, запустить:
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli`
- В
/etc/ssh/sshd_config
Рассмотрите следующие параметры конфигурации SSHD:
# Supported HostKey algorithms by order of preference. HostKey /etc/ssh/ssh_host_ed25519_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_rsa_key # Password based logins are disabled - only public key based logins are allowed. AuthenticationMethods publickey # LogLevel VERBOSE logs user's key fingerprint on login. # Needed to have a clear audit track of which key was using to log in. LogLevel VERBOSE PermitRootLogin no # Log sftp level file access (read/write/etc.) that would not be easily logged otherwise. Subsystem sftp /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO
- Вы также должны учитывать, какие алгоритмы и ключевые типы вы хотели бы поддержать. Mozilla рекомендует следующие типы ключей (более ограничительные, чем openssh по умолчанию):
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
На вершине рекомендаций Mozilla (которые только охватывают openssh 6.7), вот некоторые вещи, которые вы можете сделать, чтобы поднять свою безопасность SSHD:
Требуется ключ безопасности :
Вы можете настроить SSHD, чтобы принять только ключевые ключи, которые используют токены FIDO U2F.
PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com
Примечание: Это предотвратит будущие соединения для хоста, используя оригинальный ключ PEM, который вы получили после запуска. Итак, вам нужно создать новый -СК
Тип ключ для Ubuntu
Счет. Мы написали инструкции для этого здесь Отказ
Примечание: Это требует, чтобы все ваши клиенты имели OpenSSH 8.2+.
Если вы не хотите ограничить доступ по IP-адресу в правилах вашей группы безопасности, рассмотрите дополнительное отверждение:
- Измените свой порт SSH по умолчанию. Это будет удержать много базовых ботов.
Port 37271
-
Порт-стук усложняет задачу подключения к бастиону, но это может быть хорошим вариантом, если вам нужен ваш бастион для любого IP-адреса.
Установить обнаружение вторжений и профилактическое программное обеспечение
Отключить пересылку
Поскольку мы не позволяем раковину доступа, мы также хотим запретить все пересылки, кроме пересылки TCP, которые SSH -J
использует для поддержки бастионов.
AllowAgentForwarding no AllowStreamLocalForwarding no X11Forwarding no
Если все, что вам нужно, это шлюз SSH, вы можете отключить доступ корпуса на сам бастион.
Match User *,!ubuntu ForceCommand /bin/echo 'This bastion does not support interactive commands.'
По умолчанию переадресация порта TCP SSHD позволит пользователю переслать свое соединение с любым удаленным портом TCP в вашей частной сети. Вы можете ограничить переадресацию порта 22 (SSH), если вы не хотите, чтобы другие виды трафика для пересылки для внутренних хостов:
PermitOpen *:22
Перезапустите SSHD (и пересекайте пальцы)
Вы можете проверить вашу конфигурацию с SSHD -T
Затем перезапустите SSHD Server. Убедитесь, что вы все еще можете SSH.
в машину, прежде чем продолжить! 😱
Отправьте своих пользователей SSH-ключи в бастион
- Если у вас есть несколько пользователей, вы можете создать одну учетную запись в Bastion, который каждый будет использовать, и убедитесь, что все их открытые ключи добавлены к нему.
- Если у вас много пользователей, используйте Smallstep SSH и выдать недолговечные сертификаты SSH.
Отправить журналы в облако
Вы можете Установите AWS CloudWatch Agent или Google Облако Регистрационный агент Так что ваши журналы SSH в частности пойдут в облако. С этим на месте вы можете настроить предупреждения для подозрительной активности SSH.
Разрешить аварийный корневой доступ
Смотрите наши SSH Аварийный доступ Руководство для безопасного подхода, который позволяет аварийный доступ к хосту.
После того, как вы настроили ключевые ключи аварийного доступа, вы можете отключить любой другой вариант для root Access — поскольку никто не будет регулярно иметь причину для использования root
Счет на этой машине.
Настройте ваши внутренние хосты, чтобы разрешить только SSH доступа от бастиона
Это важная нулевая доверительная политика: любой внутренний хост, который вы подключаетесь к тому, должен разрешать только соединения SSH из бастиона. Самый простой способ реализации это с входящим 1G
Настройте клиентов SSH.
Ваши клиенты должны принимать новые ключи хоста, предлагаемые известным хостом, создавая вращение ключа хоста намного проще. (Это будет по умолчанию в будущем openssh.)
UpdateHostKeys yes
И вы можете добавить директиву конфигурации, чтобы облегчить добраться до внутренних хостов через бастион. Допустим, все ваши внутренние хозяевы имеют имена в. Innernal домен, как и в случае на AWS. Вы можете использовать эту директиву, чтобы добраться до них:
Host *.internal ProxyJump bastion.example.com
Тогда, просто SSH Host.innernal
подключиться к внутреннему хосту через бастион. Здесь одна тонкая заметка: внутреннее имя хоста будет разрешено через поиск DNS на бастионе, а не на вашем локальном компьютере. Так что до тех пор, пока бастион знает, как посмотреть ваши внутренние хозяева по своим внутренним именам и IPS, это все, что вам нужно.
Чтобы узнать больше о SSH-сертификатах посетите Shallstep сайт Отказ Вы даже можете попробовать бесплатное размещенное предложение и испытать значение сертификатов SSH в течение пяти минут!
Оригинал: «https://dev.to/smallstep/diy-ssh-bastion-hosts-34b2»