INTEGRITY Документация

Краткосрочные сертификаты (устаревшие)

Cloudflare Access может заменить традиционные SSH-ключи краткосрочными сертификатами, которые выдаются пользователям на основе токена, полученного при входе через Access. В традиционной модели пользователи создают пару SSH-ключей, а администраторы предоставляют доступ к отдельным SSH-серверам, загружая на них открытые ключи пользователей. Такие SSH-ключи могут оставаться на серверах без изменений месяцами или годами. Cloudflare Access избавляет от необходимости управлять SSH-ключами и одновременно повышает безопасность, заменяя долгоживущие SSH-ключи краткосрочными SSH-сертификатами.

1. Защитите сервер с помощью Cloudflare Access

Краткосрочные сертификаты Cloudflare Access работают с любым современным SSH-сервером, независимо от того, находится ли он за Access. Тем не менее мы рекомендуем размещать сервер за Access ради дополнительной безопасности и таких функций, как аудит и терминалы прямо в браузере.

Чтобы защитить свой сервер, находящийся за Cloudflare Access:

  1. Подключите сервер к Cloudflare как опубликованное приложение.
  2. Создайте локально размещённое приложение Access для сервера.

2. Убедитесь, что имена пользователей Unix совпадают с их SSO-идентификаторами

Cloudflare Access извлекает данные о личности из токена и с помощью краткосрочных сертификатов авторизует пользователя в целевой инфраструктуре.

Проще всего настроить систему так, чтобы имя пользователя Unix совпадало с префиксом адреса электронной почты. Выданные краткосрочные сертификаты будут действительны для этого префикса адреса электронной почты пользователя. Например, если пользователь в вашей организации Okta или GSuite зарегистрирован как [email protected], они будут входить на SSH-сервер как jdoe.

Для тестирования вы можете выполнить следующую команду, чтобы создать пользователя Unix на этой машине:

sudo adduser jdoe

Расширенная настройка: разные имена пользователей

Сертификаты SSH включают один или несколько principals в своей подписи, указывающие имена пользователей Unix, под которыми сертификату разрешено выполнять вход. Cloudflare Access всегда задаёт субъект как префикс адреса электронной почты пользователя. Например, если [email protected] пытается подключиться, Access выдаёт кратковременный сертификат, авторизованный для субъекта jdoe.

По умолчанию SSH-серверы сверяют имя пользователя Unix со списком principals в сертификате пользователя. Вы можете настроить SSH-сервер так, чтобы он принимал principals, не совпадающие с именем пользователя Unix.

Имя пользователя совпадает с другим email-адресом

Чтобы разрешить [email protected] чтобы войти в систему от имени пользователя johndoe, добавьте следующее в принадлежащий серверу /etc/ssh/sshd_config:

Match user johndoe
  AuthorizedPrincipalsCommand /bin/echo 'jdoe'
  AuthorizedPrincipalsCommandUser nobody

Это указывает SSH-серверу, что при попытке аутентификации от имени пользователя johndoe, проверьте их сертификат на наличие принципала jdoe. Это позволило бы пользователю [email protected] чтобы войти на сервер с помощью команды, например:

ssh johndoe@server

Имя пользователя совпадает с несколькими email-адресами

Чтобы разрешить нескольким адресам электронной почты входить как vmuser, добавьте следующее в принадлежащий серверу /etc/ssh/sshd_config:

Match user vmuser
  AuthorizedPrincipalsFile /etc/ssh/vmusers-list.txt

Это указывает SSH-серверу загрузить список principals из файла. Затем в /etc/ssh/vmusers-list.txt, перечислите префиксы электронной почты, которые могут выполнять вход от имени vmuser, по одному на строку:

jdoe
bwayne
robin

Имя пользователя совпадает со всеми пользователями

Чтобы разрешить любому пользователю Access входить как vmuser, добавьте следующую команду в принадлежащий серверу /etc/ssh/sshd_config:

Match user vmuser
  AuthorizedPrincipalsCommand /bin/bash -c "echo '%t %k' | ssh-keygen -L -f - | grep -A1 Principals"
  AuthorizedPrincipalsCommandUser nobody

Эта команда принимает сертификат, предоставленный пользователем, и авторизует любого principal, указанного в нём.

Разрешить всех пользователей

Чтобы разрешить любому пользователю Access входить с любым именем пользователя, добавьте следующее в конфигурацию сервера /etc/ssh/sshd_config:

AuthorizedPrincipalsCommand /bin/bash -c "echo '%t %k' | ssh-keygen -L -f - | grep -A1 Principals"
AuthorizedPrincipalsCommandUser nobody

Поскольку в этом случае безопасность сервера будет полностью зависеть от настройки Access, убедитесь, что ваши Политики доступа правильно настроены.

3. Сгенерируйте открытый ключ краткосрочного сертификата

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Учетные данные службы > SSH.

  2. Выберите Добавьте сертификат.

  3. В Приложение раскрывающемся списке выберите приложение Access, которое представляет ваш SSH-сервер.

  4. Выберите Создать сертификат. В таблице краткосрочных сертификатов появится новая строка с названием вашего приложения Access.

  5. Выберите краткосрочный сертификат для вашего приложения.

  6. Скопируйте его Открытый ключ CA. Вы можете вернуться и скопировать этот открытый ключ в любое время.

4. Сохраните свой публичный ключ

  1. Скопируйте открытый ключ, созданный в панели управления на шаге 3.
  1. Используйте следующую команду, чтобы перейти в каталог конфигурации SSH на удалённой целевой машине:

    cd /etc/ssh
  2. Там вы можете использовать следующую команду, чтобы одновременно создать файл и открыть текстовый редактор для ввода или вставки открытого ключа.

    vim ca.pub
  3. В ca.pub файл, вставьте открытый ключ без каких-либо изменений.

    ca.pub
    ecdsa-sha2-nistp256 <redacted> [email protected]

    ca.pub файл может содержать несколько ключей, перечисленных по одному в строке. Пустые строки и комментарии, начинающиеся с # также разрешены.

  4. Сохраните ca.pub файл. В некоторых системах может потребоваться выполнить следующую команду, чтобы принудительно сохранить файл в зависимости от ваших прав доступа:

    :w !sudo tee %
    :q!

5. Измените свой sshd_config файл

Настройте свой сервер SSH, чтобы он доверял Cloudflare SSH CA, обновив sshd_config файл на удалённой целевой машине.

  1. Находясь в /etc/ssh каталоге на удаленной машине откройте sshd_config файл.

     sudo vim /etc/ssh/sshd_config
  2. Нажмите i чтобы перейти в режим вставки, а затем добавьте следующие строки в начало файла, перед всеми остальными директивами:

    PubkeyAuthentication yes
    TrustedUserCAKeys /etc/ssh/ca.pub
  3. Нажмите esc а затем введите :x и нажмите Enter и сохраните и выйдите.

6. Перезапустите свой SSH-сервер

После изменения вашего sshd конфигурации перезапустите службу SSH на удаленном компьютере, чтобы изменения вступили в силу.

Для Debian/Ubuntu:

sudo systemctl reload ssh

Для CentOS/RHEL 7 и новее:

sudo systemctl reload sshd

7. Подключитесь как пользователь

Настройте свою конфигурацию клиента SSH

На стороне клиента, настроить своё устройство чтобы использовать Cloudflare Access для доступа к защищённой машине. Чтобы использовать краткосрочные сертификаты, необходимо включить следующие настройки в файл конфигурации SSH (~/.ssh/config).

Чтобы сэкономить время, можно использовать следующую команду cloudflared, которая выведет нужную команду конфигурации:

cloudflared access ssh-config --hostname vm.example.com --short-lived-cert

Если вы предпочитаете настраивать вручную, вот пример сгенерированной конфигурации SSH:

Match host vm.example.com exec "/usr/local/bin/cloudflared access ssh-gen --hostname %h"
    HostName vm.example.com
    ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h
    IdentityFile ~/.cloudflared/vm.example.com-cf_key
    CertificateFile ~/.cloudflared/vm.example.com-cf_key-cert.pub

Подключитесь через терминал в браузере

Конечные пользователи могут подключаться к сеансу SSH без какой-либо настройки, используя браузерный терминал Cloudflare. Чтобы включить эту функцию, см. Терминал, отображаемый в браузере.

По умолчанию терминал на основе браузера запрашивает у пользователя вход по имени пользователя и паролю. Если вы хотите использовать аутентификацию по сертификату, убедитесь, что у вас есть создал краткосрочный сертификат для конкретного приложения Access, настроенного для SSH-доступа через браузер.


Теперь ваш SSH-сервер защищен Cloudflare Access: перед подключением пользователям нужно будет пройти аутентификацию у вашего провайдера идентификации.