Когда шлюз OpenClaw на macOS принимает вебхуки Slack, GitHub или внутренних ботов в 2026 году, первый «пожар» редко из‑за задержки модели: чаще это тихо падающие проверки HMAC или валидные подписи без защиты от повтора, из‑за чего один и тот же HTML выкатывается дважды. Здесь разобрано, как хешировать ровно те сырые байты, которые подписал отправитель, как выбрать секундное окно для аудита, как дрейф NTP ломает подпись Slack и как ключи идемпотентности поглощают ретраи провайдера. Дополнительно: вебхук → Ollama, диагностика doctor и дрейф NTP/JWT.
Цифры по умолчанию: 300 секунд как первая толерантность повтора для синхронного чата, 600 секунд, если региональные очереди дают длинный хвост. Для стейджинга, повторяющего продовый launchd, аренда Mac mini на Apple Silicon у MacHTML обычно около 16,9 USD за сутки по публичному прайсу — дешевле ночного моста на созвоне, когда подписи «мигают».
Модель угроз
OpenClaw может писать в репозитории, запускать сборки и патчить статику. Каждый неаутентифицированный POST — это поверхность supply chain. Подписи нужны, но при утечке секрета бессильны: ротация, минимальные права инструментов и IP-списки обязательны. Учитывайте сканеры, инсайдерский реплей при разборе инцидентов и скомпрометированного апстрима с легитимными ретраями.
Разделяйте браузерный CORS и машинные вебхуки; отдельные слушатели упрощают rate limit и WAF. Отдельный поддомен с mTLS дороже, но снижает экспозицию.
Сырые байты до JSON.parse
Алгоритмы определены на байтах, а не на объектах. Отдайте rawBody, проверьте, затем парсьте. На nginx избегайте двойного gzip и фильтров, меняющих тело — иначе подпись падает прерывисто при «зелёном» curl.
Логируйте длину и хеш-отпечаток, никогда не клиентский HTML открытым текстом. Сравните ноутбук, CI и арендованный mini, чтобы быстро найти дрейф.
GitHub, Slack, общий HMAC
GitHub шлёт X-Hub-Signature-256 с префиксом sha256= и X-GitHub-Delivery как кандидата на идемпотентность. Slack подписывает v0:{timestamp}:{body} и кладёт Base64 в X-Slack-Signature. Окна времени жёсткие; свяжите мониторинг с timed. Для кастомных партнёров явно запретите слабые семейства хешей.
Матрица повтора
| Источник | Стартовое окно | Заметка |
|---|---|---|
| Slack Events | 300 с | Связка с NTP |
| GitHub | 600 с | Дедуп по delivery ID |
| Внутренние джобы | 120 с | Низкая задержка LAN |
| SaaS без SLA | 900 с | Следите за RAM Redis |
Если proxy_read_timeout 120 с, а окно повтора допускает 300 с, партнёры увидят искусственные таймауты до вашей логики — выровняйте значения в одном runbook.
Часы и Slack
Несколько минут дрейфа на Mac mini отбрасывают валидные события Slack. Алерт, если абсолютный оффсет два раза подряд > 2 секунд — жёстче, чем для десктопа. См. статью про NTP.
TTL Redis
После валидной подписи сохраняйте отпечаток SET NX EX. TTL = max(окно повтора, документированный ретрай); согласуйте с идемпотентностью. Миллион ключей по ~100 байт — порядка 100 МБ до фрагментации.
nginx и TLS
При TLS-терминации на периметре тело до Node не должно меняться. Вынесите healthcheck с путей вебхуков, чтобы большой git push не вытеснил синтетические пробы.
Архив curl
Храните подписанные фикстуры в приватном репо, воспроизводите curl --data-binary @файл с тем же Content-Type. Три волны: валид, подмена тела, просроченный штамп. Метрики свяжите с кодами выхода doctor.
curl -sS -X POST 'https://hooks.staging.example/openclaw/github' \
-H 'Content-Type: application/json' \
-H 'X-GitHub-Delivery: test-delivery-001' \
-H 'X-Hub-Signature-256: sha256=REPLACE' \
--data-binary @fixtures/push-main.json
Чеклист выката
- Зафиксировать версию и архивировать JSON doctor.
- Снять p95 на 1000 синтетических доставок.
- Режим только аудита 24 часа.
- Включить принудительную проверку, следить за бюджетом ошибок, держать откат.
- Двойная ротация секрета минимум 15 минут.
- Приложить curl, diff nginx и номер тикета.
Наблюдаемость и алерты
Без отдельных счётчиков для формата, просроченных меток и криптографических промахов дежурство читает любую ошибку подписи как общий 500. Добавьте низкокардинальные метки: webhook_provider, reject_reason, replay_window_seconds. Если GitHub видит 400 при огромном push из‑за малого лимита тела, это не должно выглядеть как утечка секрета. Стройте гистограммы времени проверки — скачок p95 с 3 мс до 80 мс намекает на throttling CPU или медленный диск во время ротации логов.
В структурных логах храните X-GitHub-Delivery или slack-штамп для корреляции с саппортом. Никогда не пишите в stdout полные Bearer-токены. Для комплаенса — ежедневные агрегаты отказов в SIEM на 90 дней, сырые полезные нагрузки — в шифрованные бакеты с меньшим сроком.
Согласование фронта, платформы и ИБ
Фронт владеет origin-листом браузера, платформа — nginx и сертификатами. Вебхуки между ними: общая таблица публичных URL, порт слушателя, ID Slack-приложения. Без неё команды крутят секреты независимо и «ломают» подписи случайно. Квартальные учения: ИБ подкидывает просроченные подписи — дашборды должны сработать за 5 минут.
На вопрос CAB «скомпрометирован апстрим?» отвечайте runbook’ом: мгновенная ротация, временное окно повтора 120 секунд, пауза очередей, doctor, затем возврат окна при зелёных метриках. Зафиксируйте владельца памяти Redis на время укороченного окна.
Региональная задержка
Шлюз во Франкфурте и GitHub с US-East добавляют миллисекунды в очередь. Синтетические RTT из обоих регионов — минимум раз в неделю. Рост p99 сначала проверяйте на транспорте, а не версией OpenClaw. Второй staging mini в Токио спасает Азию, пока Европа зелёная.
Ротация секретов без простоя
Два активных секрета во время поэтапного рестарта воркеров. Документируйте, какие LaunchAgents читают какие переменные. Избегайте жёсткого pkill на открытых потоках. С Vault/Secrets Manager — poll не реже 60 секунд. На арендованном mini: загрузите B, прогоните 50 хуков, отключите A, наблюдайте 15 минут, удалите A. Иначе старые секреты останутся в забытых бэкапах.
Хосты Apple Silicon ускоряют учения: рестарт за секунды, реже искажают бенчмарки теплотроттлинг.
Комплаенс и хранение
Финансы и медицина часто требуют 30 дней агрегированного аудита отказов без сырой PII. Ежедневно выгружайте счётчики reject_reason в неизменяемый объектный префикс, подписывайте архивы внутренним ключом, отдельным от секретов вебхуков. Для внешнего аудита — клон mini с синтетикой, никаких снапшотов прод-Redis на ноутбуках. Опишите роли, кто может удалять снапшоты.
Нагрузочные сценарии и очереди
Когда монорепозиторий пушит сотни вебхуков за минуту, узким местом становится не HMAC, а глубина очереди исполнителей инструментов OpenClaw. Заранее смоделируйте 500 параллельных доставок на стейджинге, измерьте время ожидания в Redis и убедитесь, что воркеры не блокируют поток приёма HTTP. Если приём отвечает 202 Accepted до фактической обработки, задокументируйте семантику идемпотентности для повторных 202 с тем же delivery ID — иначе партнёры будут считать доставку «висящей» и удваят нагрузку.
На Mac mini с унифицированной памятью проще держать одновременно генератор нагрузки, log stream и мониторинг Redis без swap на ноутбуке. Это практический аргумент в пользу аренды выделенного узла на время нагрузочной кампании, а не разовой команды из пяти инженеров, каждый со своим сном и VPN.
Дополнительно зафиксируйте лимиты на размер тела (1–5 МБ для большинства JSON-событий) и отдельный circuit breaker на исходящие вызовы модели — иначе всплеск вебхуков превратится в каскад таймаутов вниз по цепочке, который ошибочно диагностируют как «битую подпись». Логируйте отдельно отказы по размеру тела и по подписи, чтобы дежурство не смешивало причины. Такой сплит сокращает среднее время разбора инцидентов.
FAQ
Вебхук и SPA на одном порту?
Можно, но лучше разделить квоты и правила.
HTTP при плохой подписи?
401/403 вместо 500 для предсказуемого backoff.
Mac mini на Apple Silicon даёт предсказуемую производительность Node и низкое энергопотребление в простое — часто цитируют 6–12 Вт при лёгкой постоянной нагрузке — и тихо стоит под столом. macOS повторяет launchd, диалоги TCC и смоуки Safari, поэтому staging и prod ведут себя одинаково. Аренда MacHTML с SSH и опциональным VNC удобна для ночных реплеев без отеля и Wi‑Fi ноутбука. Масштабируйте сутки аренды под релизы, а не три года амортизации простаивающего железа.
Если аудиты HTML/CSS завязаны на чат-апрувы, сначала сделайте вебхуки «скучно надёжными»: сырые байты, задокументированные секунды, дедуп и healthcheck doctor. Тогда OpenClaw становится инфраструктурой, которую ИБ может подписать.
Репетиция вебхуков на облачном Mac mini
Проверяйте launchd, nginx и TLS как в проде, затем снова doctor — от ~16,9 USD/сутки по прайсу MacHTML.