Если перед Ринго установлен WAF (F5 ASM, PT AF, Nemesida, Cloudflare и подобные), одного проксирования конечных точек недостаточно.
Устройства обмениваются с сервером подписанными бинарными данными — CMS/PKCS#7 и plist-структурами. Сигнатурный анализ распознаёт их как аномалию и блокирует запрос до того, как он дойдёт до приложения. Веб-интерфейс при этом продолжает работать, и проблема выглядит как сбой на стороне устройства.
Типовой симптом. При установке профиля на macOS появляется окно «Сбой установки профиля» с текстом
<InternalError:1>, аcurl -X POSTна/mdm/enroll/profileвозвращает403и HTML-страницу блокировки со строкойSupport ID. Заголовки приложения (content-security-policy,strict-transport-security) в таком ответе отсутствуют — отвечает WAF, а не Ринго.
Для перечисленных ниже адресов инспекцию трафика необходимо отключить.
MDM (обмен данными между устройствами и сервером)
| Эндпоинт | Методы | Content-Type запроса |
|---|---|---|
| /mdm/checkin | PUT |
application/x-apple-aspen-mdm-checkin |
| /mdm/connect | PUT |
application/x-apple-aspen-mdm |
| /scep | GET, POST |
application/x-pki-message, application/octet-stream |
| /scep-proxy | GET, POST |
application/x-pki-message, application/pkcs7-mime |
Apple использует для check-in и connect метод PUT, а не POST. Если правило WAF ограничивает набор методов, регистрация пройдёт этап enroll и молча остановится на первом обращении устройства.
Регистрация устройства (Enroll)
| Эндпоинт | Методы | Content-Type запроса |
|---|---|---|
| /mdm/enroll | GET |
— |
| /mdm/enroll/profile | POST |
application/pkcs7-signature |
| /enroll | GET |
— |
| /enroll/auth | POST |
application/json |
| /api/v1/auth | POST |
application/json |
Агент и Self Service
| Эндпоинт | Методы | Примечание |
|---|---|---|
| /socket.io/ | GET |
Требуется поддержка WebSocket и заголовка Upgrade |
| /agent/bundle | GET |
Отдача бинарного дистрибутива |
| /agent/manifest | GET |
— |
| /api/v1/self-service | GET, POST |
Обращения с устройства, в том числе до получения токена |
application/pkcs7-signature, application/pkcs7-mime, application/x-pki-message, application/x-apple-aspen-mdm, application/x-apple-aspen-mdm-checkin, application/octet-stream;MDM/1.0, Profile/1.0, MDM-OTA/1.0, и универсальные правила часто классифицируют их как ботов;5 МБ, ответы устройств с инвентаризацией бывают крупными.Для остальных адресов, включая
/api/v1/*и веб-интерфейс, защиту отключать не нужно — там работает браузер администратора с токеном.
X-Real-IP и X-Forwarded-For — иначе в журнале событий все устройства будут отображаться с одним адресом;300 секунд: установка крупных пакетов и сбор инвентаризации выполняются дольше стандартных 60 секунд;/socket.io/ должна быть отключена, иначе события агента приходят с задержкой или соединение разрывается.Команды выполняются с любой машины, имеющей доступ к серверу.
Проверка SCEP:
curl -si "https://mdm.mydomain.com/scep?operation=GetCACaps" | head -5
Проверка check-in:
curl -si -X PUT https://mdm.mydomain.com/mdm/checkin \
-H 'Content-Type: application/x-apple-aspen-mdm-checkin' \
--data-binary @/dev/null | head -5
Проверка OTA-регистрации:
curl -si -X POST https://mdm.mydomain.com/mdm/enroll/profile \
-H 'Content-Type: application/pkcs7-signature' \
--data-binary @/dev/null | head -5
Настройки применены корректно, если в ответе присутствуют заголовки приложения (content-security-policy, x-content-type-options), а код состояния — 400 или 500. Ошибка разбора от приложения является ожидаемым результатом: она подтверждает, что запрос дошёл до Ринго. Ответ 403 с HTML-страницей и строкой Support ID означает, что запрос по-прежнему блокируется.

Строку
Support IDиз страницы блокировки следует передать администраторам WAF — по ней в журнале находится конкретное сработавшее правило.