公開 Webhook は自己ホスト型ゲートウェイの急所だ。リスナーに届く者なら誰でもツール呼び出しをスパムできる——HMAC を検証し、古いタイムスタンプを拒否し、配信識別子を重複排除しない限り。本稿は二つのマトリクス(署名アルゴリズム対 CPU コスト、リプレイキャッシュ設計対メモリ)、JSON-LD と整合した七つの HowTo 手順、FAQ の構造化データ、チャネル固有ガイドと冪等メッセージングへリンクする。NodeMac フリート向けに既に公開しているパターンと揃えて読むことを意図している。
ゲートウェイをインターネットに晒す設計では、最初から「悪意ある再送」と「正当なプロバイダ再試行」を同じ HTTP ログの形で見る。運用チームが切り分けやすいよう、署名失敗・スキュー拒否・重複ブロックを別カウンタに分け、ダッシュボードで相関させる。アラート閾値は攻撃より秘密ローテーションずれを先に疑う値に置く。
ポートを開いた瞬間から引き受ける脅威
- キャプチャ後のリプレイ:攻撃者は正当な署名付きペイロードを保存し、副作用がクォータを枯らすまで再投稿する。
- 時計スキューの悪用:不安定なプロバイダを直すためにスキュー窓を広げると、リプレイ面も広がる。
- パーサ差分:ボディを変形したあとで署名を検証すると JSON 正規化攻撃が素朴な比較をすり抜ける。
Slack と Discord の Webhook 配線でチャネル癖を押さえ、続けて 冪等なリプレイ処理を読む。署名が成功してもツール呼び出しを二重消費できないようにする。
マトリクス A — 署名検証コストと保証
| 方式 | セキュリティ | M4 上の CPU | 注記 |
|---|---|---|---|
| 生バイト列への HMAC-SHA256 | 強い | Apple Silicon では誤差 | Slack 互換リスナーのデフォルト |
| クエリ文字列の共有秘密 | 弱い | N/A | アクセスログに漏れる——本番禁止 |
| 非対称 Ed25519(カスタム) | 強い | 低いがコードリスク高 | ベンダが義務付ける場合のみ。十分に検証する |
マトリクス B — リプレイキャッシュ設計(✓ / ✗)
| 設計 | 再起動で生存 | RAM 境界 | トレードオフ |
|---|---|---|---|
| イベント ID のインメモリ LRU | ✗ | ✓ | 単純。ゲートウェイ再起動後はリプレイ可能——スキューを厳しくしない限り |
| TTL 付き APFS 上 SQLite | ✓ | ✓ | コードは増える。規制チーム向け |
| リプレイキャッシュなし | ✗ | ✓ | ツールが本番を変えるなら決して許容しない |
HowTo:macOS ゲートウェイ向け七手順(本文版)
手順 1 は Keychain 前提のシークレットと同型にする。世界読み取り可能なワークスペースに署名材料を置かない。手順 2 はリバースプロキシから生の HTTP ボディを読み、JSON ミドルウェアが空白を整形する前に検証する——不一致の多くは攻撃ではなく pretty-print だ。
- 署名シークレットを読み込む:Keychain または launchd
EnvironmentVariables。ローテーション手順とロールバックを同じ PR に書く。 - 先に署名を検証する:生バイト列で HMAC。ボディストリームを一度だけ消費する設計に注意。
- タイムスタンプのスキューを確認する:NTP とセット。CI 時計ドリフトのテレメトリと同じボードにスキュー拒否を載せる。
- リプレイ窓を強制する:リプレイ TTL はプロバイダ最大再試行間隔のおおよそ二倍を下限に。週次で重複配信をグラフ化する。
- 冪等性を揃える:HTTP でブロックされたリプレイがワークスペース半適用を残さないよう、メッセージ層の重複排除とツール層のキーを対応づける。
- 秘匿した失敗をログする:カウンタのみ。フォレンジックでシークレットを syslog に流さない。
- doctor を実行する:doctor でリスナーと TLS の食い違いを攻撃者より先に掴む。
運用オンボーディングの短い SOP としては、まず herupu で SSH とポート公開の型を確認し、SKU とリージョンは ryokin、GUI でしか進めないプロバイダ同意は vnc でオペレータが触る、の順がブレにくい。
設定に集約すべき数値デフォルト
- スキュー窓:300 秒から始め、三十日間クリーンなら締める。
- リプレイ TTL:プロバイダ文書の最大再試行間隔の少なくとも 2×。
- アラート:署名失敗率が十分間にトラフィックの 1% を超えたらページ——多くは攻撃ではなく秘密ローテのズレだ。
警告:デモのために署名検査を「一時的に」無効化しない。クライアントを直し秘密を回転させる。
OpenClaw 運用 FAQ
TLS クライアント証明書は HMAC に取って代わるか?
トランスポートの認証であり個々の Webhook イベントの認証ではない。プロバイダがエンドツーエンドで mTLS のみと明記しない限り HMAC を残す。
ゲートウェイは Cloudflare か nginx の背後に置くべきか?
はい——上流で TLS を終端し、生ボディを転送し、署名方式が期待する元ヘッダを保持する。
リージョナルホスティングはなぜ重要か?
チャットプロバイダの出口近く(HK、JP、KR、SG、US)でゲートウェイを動かし RTT が長いこと由来の再試行を減らす。暗号を省略するためではない。
複数リスナーを同じ Mac で動かすときの注意は?
ポートと証明書 SAN を doctor で突き合わせ、ループバック経由のテストと本番の SNI パスを一致させる。
シークレットをローテした日に何を見るか?
署名失敗の段階的増加、特定チャネルだけの失敗、再送キューの滞留。ロールバック手順を fifteen-minute に収まる Runbook にしておく。
強い Webhook 衛生は Mac mini M4 ゲートウェイを本番家電として扱う一部だ。Apple Silicon は暗号を安くする——検証を飛ばす言い訳にはならない。ネイティブ macOS に SSH 自動化と緊急オペ用の VNC を載せるのは他デーモンと同じ運用だ。香港・日本・韓国・シンガポール・米国で 専用 Mac mini M4 をレンタルすればテナントごとに爆風半径を分け、予測可能なネットワークは攻撃に見える偽陽性再試行を減らす。署名が安定したら 料金(ryokin)で水平拡張し、不安定ならファイアウォールを広げる前に ヘルプ(herupu)を読む。