← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-tunnel / use-cases / ssh
SSH с Access for Infrastructure
Access for Infrastructure обеспечивает детальный контроль над тем, как пользователи подключаются к вашим SSH-серверам. Как и собственные ключи SSH метод использует Cloudflare One Client на устройствах пользователей и Cloudflare Tunnel на сервере для создания безопасного приватного соединения через сеть Cloudflare. Access for Infrastructure добавляет политики на уровне приложений с элементами управления по целевому объекту и по имени пользователя, а также ведение логов SSH-команд.
Access for Infrastructure также заменяет традиционные SSH-ключи краткосрочными сертификатами, которые выдаются пользователям на основе токена, полученного при входе через Access. В традиционных моделях пользователи создают пару SSH-ключей, а администраторы предоставляют доступ к отдельным SSH-серверам, разворачивая на них открытые ключи пользователей. Такие SSH-ключи могут годами оставаться без изменений на этих серверах. Cloudflare Access избавляет от необходимости управлять SSH-ключами и одновременно повышает безопасность, заменяя долгоживущие SSH-ключи временными SSH-сертификатами.
1. Подключите сервер к Cloudflare
-
В панели управления Cloudflare перейдите в Сеть > Tunnels.
Перейдите в Tunnels ↗ -
Создать новый туннель или отредактировать существующий
cloudflaredтуннель.
-
В панели управления Cloudflare перейдите в Сеть > Маршруты.
Перейдите в Маршруты ↗ -
Выберите Создать маршрут > Tunnel CIDR. Выберите только что созданный туннель, введите IP-адрес или CIDR-адрес вашего сервера (обычно приватный IP-адрес, но допускаются и публичные) и выберите Создать маршрут.
2. Настройте клиент
Чтобы подключить свои устройства к Cloudflare:
- Разверните Cloudflare One Client на ваших устройствах в режиме Traffic and DNS.
- Включите Gateway proxy для TCP.
- Создать правила регистрации устройств чтобы определить, какие устройства могут регистрироваться в вашей организации Zero Trust.
3. Направьте IP-адреса сервера через Cloudflare One Client
По умолчанию WARP исключает трафик, направленный на Пространство адресов RFC 1918 ↗, то есть IP-адреса, обычно используемые в частных сетях и недоступные из интернета. Чтобы Cloudflare One Client мог отправлять трафик на ваш SSH-сервер, необходимо настроить Split Tunnels чтобы трафик к IP-адресу/CIDR вашего SSH-сервера направлялся через Cloudflare One Client.
-
Сначала проверьте, ваш Режим Split Tunnels имеет значение Exclude или Включить режим.
-
Измените маршруты Split Tunnel в зависимости от режима:
Если вы используете Exclude режим:
a. Удалите маршрут содержащий диапазон IP/CIDR вашего SSH-сервера. Например, если в вашей сети используется диапазон AWS по умолчанию
172.31.0.0/16, удалите172.16.0.0/12.b. Повторно добавить диапазоны IP/CIDR которые явно не используются вашим SSH-сервером. Для приведенного выше примера AWS вы бы добавили новые записи для
172.16.0.0/13,172.24.0.0/14,172.28.0.0/15, а также172.30.0.0/16. Это гарантирует, что только трафик к172.31.0.0/16маршруты через Cloudflare One Client.Чтобы определить, какие IP-адреса нужно добавить повторно, можно воспользоваться следующим калькулятором:
Инструкции для калькулятора
- В Базовый CIDR, введите диапазон RFC 1918, который вы удалили из Split Tunnels.
- В Вычтенные CIDR, введите диапазон IP/CIDR, используемый вашим SSH-сервером.
- Повторно добавьте результаты калькулятора в список режима Exclude для Split Tunnel.
Сужая диапазон частных IP-адресов, включенный в Cloudflare One Client, вы снижаете риск нарушить работу пользовательского доступ к локальным ресурсам.
Если вы используете Включить режим:
- Добавьте необходимые Домены Zero Trust или IP-адреса в список включений Split Tunnel.
- Добавьте маршрут чтобы включить диапазон IP/CIDR вашего SSH-сервера.
4. Добавьте цель
Цель представляет собой отдельный ресурс вашей инфраструктуры (например, сервер, кластер Kubernetes, базу данных или контейнер), к которому пользователи будут подключаться через Cloudflare.
Цели не зависят от протокола: не нужно определять отдельную цель для каждого протокола, работающего на сервере. Чтобы создать новую цель:
- В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Цели.
- Выберите Добавьте цель.
- В Имя хоста цели, введите понятное для пользователя имя для цель. Рекомендуем использовать имя хоста сервера, например
production-server. Имя хоста цели не обязательно должно быть уникальным: его можно использовать повторно для нескольких целей. Имена хостов используются для определения целей, защищённых приложением Access; они не используются для разрешения DNS-адресов.Ограничения формата имени хоста
- Без учёта регистра
- Содержать не более 253 символов
- Содержать только буквенно-цифровые символы,
-, или.(пробелы не допускаются) - Начинаться и заканчиваться буквенно-цифровым символом
- В IP-адреса, введите IPv4- и (или) IPv6-адрес целевого ресурса. Раскрывающееся меню не заполнится, пока вы не введете полный IP-адрес.
- В раскрывающемся меню выберите IP-адрес и виртуальная сеть где расположен ресурс. Эта пара из IP-адреса и виртуальной сети теперь назначена этой цели и по замыслу не может быть повторно использована для другой цели.
- Выберите Добавить целевой объект.
Сделайте POST запрос к Целевые объекты Infrastructure Access конечная точка:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/infrastructure/targets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"hostname": "infra-access-target",
"ip": {
"ipv4": {
"ip_addr": "187.26.29.249",
"virtual_network_id": "c77b744e-acc8-428f-9257-6878c046ed55"
},
"ipv6": {
"ip_addr": "64c0:64e8:f0b4:8dbf:7104:72b0:ec8f:f5e0",
"virtual_network_id": "c77b744e-acc8-428f-9257-6878c046ed55"
}
}
}'-
Добавьте следующее разрешение в свой
cloudflare_api_token↗:Zero Trust Write
-
Настройте
cloudflare_zero_trust_infrastructure_access_target↗ ресурс:resource "cloudflare_zero_trust_infrastructure_access_target" "infra-ssh-target" { account_id = var.cloudflare_account_id hostname = "infra-access-target" ip = { ipv4 = { ip_addr = "187.26.29.249" virtual_network_id = "c77b744e-acc8-428f-9257-6878c046ed55" } ipv6 = { ip_addr = "64c0:64e8:f0b4:8dbf:7104:72b0:ec8f:f5e0" virtual_network_id = "c77b744e-acc8-428f-9257-6878c046ed55" } } }
Далее создайте приложение Access, чтобы защитить целевой ресурс.
5. Добавьте инфраструктурное приложение
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Приложения.
-
Выберите Создать новое приложение.
-
Выберите Infrastructure.
-
Введите любое имя для приложения.
-
В Критерии цели, выберите имена хостов цели, которые вы хотите защитить. Это определение приложения будет применяться ко всем целям с выбранным именем хоста, включая цели, добавленные в будущем. Аналогично, если впоследствии вы решите изменить имя хоста для цели, переименованная цель больше не будет попадать под действие этого приложения.
-
Введите Протокол и Порт который будет использоваться для подключения к серверу.
-
(Необязательно) Если протокол работает на нескольких портах, выберите Добавить новые критерии цели и перенастройте то же имя целевого хоста и протокол с другим номером порта.
-
Выберите Далее.
-
Чтобы защитить свои цели, настройте политику, определяющую, кто может подключаться и каким образом:
-
Введите любое имя для вашей политики.
-
Создайте правило, которое соответствует пользователям, которым разрешён доступ к целям. Дополнительную информацию см. в Политики доступа и просмотрите список селекторы инфраструктурных политик.
-
В Контекст подключения, настройте следующие параметры:
- Пользователь SSH: Введите имена пользователей UNIX, под которыми пользователи могут входить в систему (например,
rootилиec2-user). - Разрешить пользователям входить под алиасом электронной почты: (Необязательно) Если этот параметр включён, пользователи, соответствующие определению вашей политики, смогут получать доступ к цели, используя префикс своего адреса электронной почты в нижнем регистре. Например,
[email protected]могла войти в систему какjdoe.
- Пользователь SSH: Введите имена пользователей UNIX, под которыми пользователи могут входить в систему (например,
-
-
Выберите Добавить приложение.
Сделайте POST запрос к Приложения Access конечная точка:
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Access: Apps and Policies Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Example infrastructure app",
"type": "infrastructure",
"target_criteria": [
{
"target_attributes": {
"hostname": [
"infra-access-target"
]
},
"port": 22,
"protocol": "SSH"
}
],
"policies": [
{
"name": "Allow a specific email",
"decision": "allow",
"include": [
{
"email": {
"email": "[email protected]"
}
}
],
"connection_rules": {
"ssh": {
"usernames": [
"root",
"ec2-user"
]
}
}
}
]
}'-
Добавьте следующее разрешение в свой
cloudflare_api_token↗:Access: Apps and Policies Write
-
Используйте
cloudflare_zero_trust_access_application↗ ресурс, чтобы создать инфраструктурное приложение:resource "cloudflare_zero_trust_access_application" "infra-app" { account_id = var.cloudflare_account_id name = "Example infrastructure app" type = "infrastructure" target_criteria { port = 22 protocol = "SSH" target_attributes { name = "hostname" values = ["infra-access-target"] } } } -
Используйте
cloudflare_zero_trust_access_policy↗ ресурс, чтобы добавить в приложение инфраструктурную политику:resource "cloudflare_zero_trust_access_policy" "infra-app-policy" { application_id = cloudflare_zero_trust_access_application.infra-app.id account_id = var.cloudflare_account_id name = "Allow a specific email" decision = "allow" precedence = 1 include { email = ["[email protected]"] } connection_rules { ssh { usernames = ["root", "ec2-user"] } } }
Теперь цели в этом приложении защищены вашими политиками инфраструктуры.
6. (Рекомендуется) Настройте сетевые политики
Трафик от Cloudflare One Client к целевым объектам вашей инфраструктуры фильтруется одновременно с помощью Политики Network Gateway и специфичными для приложения политиками Access.
Общая политика блокировки
Чтобы запретить пользователям Cloudflare One Client доступ ко всей вашей частной сети, рекомендуем создать catch-all-политика блокировки Gateway для вашего частного IP-пространства. После этого вы можете добавить политики Allow с более высоким приоритетом (в Access или Gateway), которые предоставляют пользователям доступ к конкретным приложениям или IP-адресам.
Разрешить целевые объекты инфраструктуры Access
По умолчанию Cloudflare оценивает политики приложений Access только после оценки всех Политики Network Gateway. Чтобы оценивать приложения Access до или после определенных политик Gateway:
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Политики трафика > Политики Firewall. В Сеть, создать политику Network со следующей конфигурацией:
Селектор Оператор Значение Действие Access Infrastructure Target является Present Allow Обновите в политике порядок приоритета с помощью панели управления или API.
Эта политика Gateway будет применяться ко всем целям Access for Infrastructure, включая RDP и SSH.
7. Настройте SSH-сервер
Далее настройте свой SSH-сервер так, чтобы он доверял Cloudflare SSH CA. Это позволяет Access выполнять аутентификацию с помощью краткосрочных сертификатов вместо традиционных SSH-ключей.
Создайте Cloudflare SSH CA
Чтобы создать SSH CA Cloudflare и получить его открытый ключ:
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Учетные данные службы > SSH.
-
Выберите Добавьте сертификат.
-
В разделе SSH с Access for Infrastructure, выберите Создать SSH CA. В таблице краткосрочных сертификатов появится новая строка с именем SSH с Access for Infrastructure.
-
Выберите SSH с Access for Infrastructure сертификат.
-
Скопируйте его Открытый ключ CA. Вы можете вернуться и скопировать этот открытый ключ в любое время.
-
Создание API-токена со следующими разрешениями:
Type Элемент Разрешение Аккаунт Access: аудит SSH Изменить -
Если вы ещё не создали Cloudflare SSH CA, создайте
POSTзапрос к API Cloudflare:
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Access: SSH Auditing Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/gateway_ca" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- Если вы уже создали Cloudflare SSH CA или получаете сообщение об ошибке
access.api.error.gateway_ca_already_exists, создайтеGETзапрос вместо этого:
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Access: SSH Auditing WriteAccess: SSH Auditing Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/gateway_ca" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- Скопируйте
public_keyзначение, возвращённое в ответе.
Сохраните открытый ключ
-
Используйте следующую команду, чтобы перейти в каталог конфигурации SSH на удалённой целевой машине:
cd /etc/ssh -
Там вы можете использовать следующую команду, чтобы одновременно создать файл и открыть текстовый редактор для ввода или вставки открытого ключа.
vim ca.pub -
В
ca.pubфайл, вставьте открытый ключ без каких-либо изменений.ca.pubecdsa-sha2-nistp256 <redacted> [email protected]ca.pubфайл может содержать несколько ключей, перечисленных по одному в строке. Пустые строки и комментарии, начинающиеся с#также разрешены. -
Сохраните
ca.pubфайл. В некоторых системах может потребоваться выполнить следующую команду, чтобы принудительно сохранить файл в зависимости от ваших прав доступа::w !sudo tee % :q!
Измените ваш sshd_config файл
Настройте свой сервер SSH, чтобы он доверял Cloudflare SSH CA, обновив sshd_config файл на удалённой целевой машине.
-
Находясь в
/etc/sshкаталоге на удаленной машине откройтеsshd_configфайл.sudo vim /etc/ssh/sshd_config -
Нажмите
iчтобы перейти в режим вставки, а затем добавьте следующие строки в начало файла, перед всеми остальными директивами:PubkeyAuthentication yes TrustedUserCAKeys /etc/ssh/ca.pub -
Нажмите
escа затем введите:xи нажмитеEnterи сохраните и выйдите.
Перезапустите SSH-сервер
После изменения вашего sshd конфигурации перезапустите службу SSH на удаленном компьютере, чтобы изменения вступили в силу.
Для Debian/Ubuntu:
sudo systemctl reload sshДля CentOS/RHEL 7 и новее:
sudo systemctl reload sshd8. (Необязательно) Требуйте отдельную MFA для SSH
Вы можете потребовать от пользователей аутентификацию с помощью ключа PIV или ключа FIDO2 перед подключением к серверам SSH. При настройке пользовательской MFA выберите Ключ PIV, Ключ FIDO2, или оба варианта.
Чтобы настроить независимую MFA для SSH, см. Принудительно применять MFA для инфраструктурных приложений.
Прежде чем пользователи смогут подключаться с включенной MFA, они должны зарегистрировать свой ключ и настроить SSH-клиент.
- Для ключей PIV зарегистрируйте ключ и настроить SSH-клиент.
- Для ключей FIDO2 зарегистрируйте ключ и настроить SSH-клиент.
Когда пользователь выполняет ssh <username>@<target IP>, прокси-сервер SSH проверяет, требуется ли MFA для соответствующей политики. Если требуется, пользователь проходит аутентификацию с помощью аппаратного ключа. Будет ли ключ запрашивать прикосновение, PIN-код или и то, и другое, зависит от настроенных вами политик PIV key либо от собственной конфигурации ключа FIDO2. После этого прокси-сервер завершает подключение.
9. Подключитесь как пользователь
Пользователи могут использовать любой SSH-клиент, будучи авторизованными в Cloudflare One Client. Если целевой узел использует виртуальную сеть, подключиться к этой виртуальной сети сначала.
ssh <username>@<target IP>Access for Infrastructure также поддерживает scp, sftp, а также rsync команды. См. Известные ограничения для списка неподдерживаемых команд и функций SSH.
Чтобы узнать больше о подключениях пользователей, см. Документация Access for Infrastructure.
логи SSH-команд
Логи SSH-команд содержат непосредственно команды SSH, которые пользователь выполнил на целевом узле. Клиенты на любом тарифном плане могут хранить логи SSH в Cloudflare и загружать их из панели управления. Загружаемые журналы шифруются открытым ключом, который предоставляет заказчик, и не видны Cloudflare. Загружаемые журналы SSH доставляются по принципу best effort; для гарантированной доставки клиенты с планом Enterprise могут настроить задание Logpush чтобы отправлять журналы SSH в места хранения. Полезные данные Logpush не шифруются с помощью открытого ключа, предоставленного клиентом.
Скачать зашифрованные журналы SSH
Следуйте этим инструкциям, чтобы зашифровать и загрузить журналы команд SSH из Zero Trust.
Включите журналирование команд SSH
Чтобы вести логи SSH-команд, необходимо сгенерировать пару ключей HPKE и загрузить открытый ключ в Cloudflare.
-
Скачать ↗ Cloudflare
ssh-log-cliутилиты. -
С помощью
ssh-log-cliутилиты сгенерируйте пару открытого и закрытого ключей../ssh-log-cli generate-key-pair -o sshkey lsREADME.md ssh-log-cli sshkey sshkey.pubЭта команда выводит два файла:
sshkey.pubоткрытый ключ и соответствующийsshkeyзакрытый ключ. -
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Политики трафика > Настройки трафика.
-
В Открытый ключ шифрования журналов SSH, вставьте содержимое
sshkey.pubи выберите Save.
Все проксируемые команды SSH сразу же шифруются этим открытым ключом. Для просмотра журналов требуется соответствующий закрытый ключ.
Отключить журналирование команд SSH
Чтобы отключить логирование SSH-команд, удалите загруженный открытый ключ:
- В Панель управления Cloudflare ↗, перейдите в Zero Trust > Политики трафика > Настройки трафика > Открытый ключ шифрования журналов SSH.
- Выберите Удалить.
- Выберите Удалить ключ для подтверждения.
Cloudflare прекратит логировать SSH-команды на ваших целевых серверах.
Чтобы удалить открытый ключ шифрования SSH с помощью API:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/audit_ssh_settings" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"public_key": ""
}'Просмотр журналов SSH
Логи SSH-команд недоступны непосредственно в панели управления: их необходимо экспортировать и расшифровать.
Чтобы вручную получить журналы:
- В Панель управления Cloudflare ↗, перейдите в Zero Trust > Insights > Журналы.
- Выберите логи SSH-команд.
- Фильтруйте журналы по имени вашего приложение SSH.
- Выберите SSH-сессию, для которой нужно экспортировать журналы команд.
- На боковой панели прокрутите вниз до Журналы SSH и выберите Скачать.
-
Чтобы расшифровать журнал, следуйте инструкциям в репозиторий SSH Logging CLI ↗. В следующем примере
sshkeyявляется закрытым ключом, соответствующим открытому ключу, загруженному в Cloudflare../ssh-log-cli decrypt -i sshlog -k sshkeyЭта команда выводит
sshlog-decrypted.zipфайл с расшифрованными журналами.
Экспорт журналов SSH с помощью Logpush
Cloudflare позволяет отправлять журналы команд SSH в места хранения, настроенные в Logpush, включая сторонние ресурсы назначения. Список доступных полей данных приведён в Набор данных журналов SSH.
Чтобы настроить задание Logpush, см. в интеграция Logpush.
Известные ограничения
Функции SSH
Следующие функции SSH не поддерживаются:
- Локальное и удалённое перенаправление портов
ProxyJump- проброс SSH-агента
- Переадресация X11
Длительность сессии
Максимальная ожидаемая продолжительность сеанса SSH составляет 10 часов. Дополнительную информацию см. в Устранение неполадок Access.
Устранение неполадок
Ошибка подключения к конечной точке SSH может быть вызвана разными причинами. Чтобы найти и устранить причину сбоя подключения, выполните следующие действия.
- Убедитесь, что ваши политики Access позволяют пользователю получить доступ к цели.
- Проверить Cloudflare Tunnel работоспособность.
- Подтвердите наличие пользователя на сервере.
- Проверьте
sshd_configфайл на наличие ошибок конфигурации.
1. Просмотрите политики Access
Пользователь может быть заблокирован политикой Access при попытке доступа к вашему серверу, поскольку не существует явной разрешающей политики Access, а Access по умолчанию настроен на отказ пользователю в доступе.
Конечные пользователи
Как конечный пользователь выполните команду warp-cli target list чтобы убедиться, что у вас есть доступ к цели.
warp-cli target list╭──────────────────────────────────────┬──────────┬───────┬───────────────────────┬──────────────────────┬────────────╮
│ Target ID │ Protocol │ Port │ Attributes │ IP (Virtual Network) │ Usernames │
├──────────────────────────────────────┼──────────┼───────┼───────────────────────┼──────────────────────┼────────────┤
│ 0193f22a-9df3-78e3-b5bb-7ab631903306 │ SSH │ 22 │ hostname: do-target │ 10.116.0.3 (a1net) │ alice │
├──────────────────────────────────────┼──────────┼───────┼───────────────────────┼──────────────────────┼────────────┤
│ 0193f22a-9df3-78e3-b5bb-7ab631903306 │ SSH │ 23 │ hostname: do-target │ 10.116.0.3 (a1net) │ root │
├──────────────────────────────────────┼──────────┼───────┼───────────────────────┼──────────────────────┼────────────┤
│ 01943cff-6130-7989-8bff-cbc02b59a2b1 │ SSH │ 80 │ hostname: az-target │ 172.16.0.0 (b1net) │ alice, bob │
╰──────────────────────────────────────┴──────────┴───────┴───────────────────────┴──────────────────────┴────────────╯-
Если цель отображается в списке, убедитесь, что имя пользователя, с которым выполняется подключение, присутствует в выводе. Если это имя пользователя отсутствует, администратор должен найти политику Access, связанную с этой целью, и добавить это имя пользователя в политику. Администратор должен был создать политику Access в Подшаг 9 шага 5: Добавьте инфраструктурное приложение. Если имя пользователя отображается, это означает, что политика Access должна предоставлять доступ, и вам следует убедиться, что туннель работает исправно в шаг 2.
-
Если цель не отображается в списке, администратору необходимо проверить политики Access для этой цели в Cloudflare One на предмет ошибок конфигурации, которые могут блокировать подключение.
Администраторы
Как администратор, вместо выполнения команды warp-cli target list на устройстве конечного пользователя, вы можете использовать логи Access, чтобы проверить, не вызывает ли проблемы с подключением политика Access. Просмотр логов полезен при устранении проблем с подключением от имени конечного пользователя.
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Insights > Журналы.
-
Выберите Журналы аутентификации Access.
-
Выберите приложение, которое вы тестируете, или отфильтруйте Infrastructure как App Type.
-
Просмотрите Решение. Если Решение это
Access denied, выберите приложение и скопируйте имя в поле App.Если решение имеет значение
Access granted, политики Access не мешают вашим попыткам подключения, а проблема с подключением связана с Cloudflare Tunnel (шаг 2), SSH-сервер (шаг 3), илиsshd_configфайл (Шаг 4). -
Перейдите в Контроль доступа > Приложения.
-
Введите название приложения в строке поиска и выберите приложение.
-
Выберите Настройте.
-
Перейдите в Политики и проверьте, какие критерии могут блокировать пользователя.
Добавив Access политика чтобы разрешить доступ пользователю, проблема с подключением должна быть устранена. После сохранения изменений политики попробуйте подключиться к серверу.
Если после проверки политик Access проблемы с подключением сохраняются, на следующем шаге проверьте работоспособность туннеля.
2. Проверьте подключение к целевому объекту
Если конечный пользователь не может подключиться к цели, туннель, настроенный в Шаг 1: Подключите сервер к Cloudflare может быть недоступен или неактивен.
Чтобы проверить статус туннеля:
-
В панели управления Cloudflare перейдите в Сеть > Маршруты.
Перейдите в Маршруты ↗ -
Найдите свой IP-адрес, чтобы увидеть маршрут и связанный с ним туннель.
Этот IP-адрес будет виден в
warp-cli target listвывод в предыдущий шаг. Если вы администратор, вы также можете перейти в Сети > Цели и найдите IP-адрес рядом со своим Hostname. -
Выберите имя туннеля в Connector столбец, чтобы открыть страницу сведений о туннеле.
-
Проверьте, что Статус туннеля указывает
Active, а неDown,Degraded, илиInactive.
| Статус | Значение | Рекомендуемое действие |
|---|---|---|
| Исправно | Туннель активен и обслуживает трафик через четыре подключения к глобальной сети Cloudflare. | Действие не требуется. Ваш туннель работает корректно. |
| Неактивен | Туннель создан (через API или панель управления), но cloudflared connector ни разу не запускался для установления подключения. |
Установите и запустите cloudflared на вашем исходном сервере, чтобы подключить туннель к Cloudflare. Команду установки можно найти в панели управления Cloudflare в разделе Сеть > Tunnels : выберите свой туннель, затем на Обзор вкладке выберите Добавьте реплику. Для настройки через API см. Установите и запустите туннель. |
| Down | Ранее туннель был подключён, но сейчас отключён, потому что cloudflared процесс остановлен. |
1. Убедитесь, что cloudflared служба или процесс активно выполняется на вашем сервере. 2. Проверьте возможные проблемы на стороне сервера: например, компьютер выключен, произошёл сбой приложения или недавно изменилась сеть. |
| Degraded | cloudflared connector работает, и туннель обслуживает трафик, но как минимум одно отдельное подключение завершилось сбоем. Дальнейшее ухудшение доступность туннеля может привести к тому, что туннель отключится и перестанет обслуживать трафик. |
1. Просмотрите свой cloudflared журналы для сбоев подключения или сообщений об ошибках. 2. Проверьте правила локальной сети и брандмауэра и убедитесь, что они не блокируют подключения к IP-адреса и порты Cloudflare Tunnel. |
Подробные шаги по устранению неполадок см. в Документация по устранению неполадок Tunnel. Ознакомьтесь с Документация по туннелю с межсетевым экраном чтобы убедиться, что ваша сеть настроена так, чтобы разрешать cloudflared подключения.
Убедившись, что с работоспособностью туннеля всё в порядке, на следующем шаге подтвердите наличие пользователя на сервере.
3. Убедитесь, что пользователь существует на сервере
Чтобы проверить наличие пользователя на сервере UNIX, выполните id <USERNAME> команду на сервере, чтобы проверить существование имени пользователя. Если имя пользователя не существует, необходимо добавить пользователя на сервер.
Если пользователь существует на сервере, выполните отладку sshd_config файл на следующем шаге.
4. Отладьте sshd_config неправильная настройка файла
Одна из причин, по которой пользователь не может подключиться к вашей конечной точке SSH, может быть в неправильно настроенном sshd_config файл. Выполните следующие шаги, чтобы проверить свой sshd_config файл на наличие неправильных настроек.
Проверьте свои sshd логи
sshd логи могут подтвердить, доходит ли пользователь до сервера. Расположение вашего sshd логов определяется в вашем sshd_config. Расположение журналов, скорее всего, находится по адресу journalctl -u ssh в Ubuntu и tail /var/log/auth.log для Red Hat.
Использование вашего sshd логи, чтобы убедиться, что попытки подключения по SSH доходят до сервера.
Проверьте свои sshd_config файл на наличие неправильных настроек
Чтобы исключить проблемы в вашей sshd_config файл, сравните свой существующий sshd_config файл с примером ниже, чтобы проверить, не вызывают ли какие-либо директивы проблемы с аутентификацией. В следующем примере sshd_config файл приведёт к успешной аутентификации:
Пример sshd_config файл
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
PubkeyAuthentication yes
TrustedUserCAKeys /etc/ssh/ca.pub
Include /etc/ssh/sshd_config.d/*.conf
# When systemd socket activation is used (the default), the socket
# configuration must be re-generated after changing Port, AddressFamily, or
# ListenAddress.
#
# For changes to take effect, run:
#
# systemctl daemon-reload
# systemctl restart ssh.socket
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
LogLevel DEBUG3
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin yes
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs serverУбедитесь, что аккаунт авторизует principal сертификата
Если ваш sshd логи показывают, что сертификат был принят как подписанный CA, но подключение всё равно не удаётся, возможно, учётная запись не авторизует принципала сертификата. sshd отображает это как:
Certificate invalid: name is not a listed principalПроверьте действующую конфигурацию для аккаунта, от имени которого выполняется подключение, так как эти директивы часто задаются в Match блок:
sudo sshd -T -C user=<USERNAME> | grep -i principalsЕсли authorizedprincipalsfile или authorizedprincipalscommand установлено в любое значение, отличное от none, убедитесь, что имя пользователя SSH указано в этом файле или в выводе команды. Если его нет, добавьте его и проверьте свою конфигурацию с помощью sudo sshd -t, затем Обновить вашего SSH-сервера.
Замените и протестируйте с использованием примера конфигурации
Следующие шаги проведут вас через процедуру устранения неполадок. Вы временно замените свой существующий sshd_config файл предоставленным примером, чтобы исключить проблемы с настройкой. Прежде чем продолжить, внимательно Просмотреть и сравнить оба файла чтобы выявить любые конфликтующие директивы.
-
Создайте резервную копию существующего
sshd_configфайл.mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak -
Создайте новый
sshd_configфайл.vi /etc/ssh/sshd_config -
Перейдите в режим вставки, нажав
iклавишу на клавиатуре. -
Вставьте в пример файла.
-
Выйдите из режима вставки, нажав клавишу escape (
esc) ключ. -
Введите
:xи сохраните и выйдите. -
Перезагрузить вашего SSH-сервера.
После изменения вашего
sshdконфигурации перезапустите службу SSH на удаленном компьютере, чтобы изменения вступили в силу.Для Debian/Ubuntu:
sudo systemctl reload sshДля CentOS/RHEL 7 и новее:
sudo systemctl reload sshd
Выполнив все четыре шага устранения неполадок, вы должны были устранить любые проблемы с подключением, вызванные неправильной настройкой SSH-сервера. Если проблемы сохраняются, повторная проверка sshd логи. Пример sshd_config указанный выше включает отладочное журналирование и может выявлять более конкретные проблемы.
5. Получите помощь
Чтобы устранение неполадок прошло как можно быстрее, указывайте в обращении в поддержку максимально подробную информацию: чем больше контекста вы предоставите, тем быстрее удастся выявить и решить проблему.
Чтобы обеспечить эффективное разрешение запросов, когда обращение в поддержку, укажите в тикете как можно больше релевантных деталей: