Contrôles préalables au déploiement : version Node et modèle de permissions
Verrouillez le runtime avant tout durcissement. La passerelle et la CLI OpenClaw supposent une ligne Node LTS récente (beaucoup d'équipes sont passées à Node 22+ en 2026). Sur le Mac distant, vérifiez avec node -v et npm -v, et installez via nvm ou le paquet officiel pour des mises à jour reproductibles.
Créez un utilisateur macOS dédié (par ex. openclawsvc) propriétaire du répertoire d'installation et des chemins de journaux. Évitez la passerelle sur un compte admin avec sudo sans mot de passe : un jeton fuité devient alors un accès disque complet. Contrôlez les droits effectifs :
id openclawsvc ls -la ~/openclaw-gateway chmod 750 ~/openclaw-gateway chmod 600 ~/openclaw-gateway/.env.gateway
Accordez les autorisations de confidentialité macOS (TCC) uniquement là où une compétence l'exige. Si une compétence appelle des outils d'automatisation, documentez les invites ; n'activez pas « Accès disque complet » par défaut pour gagner du temps. Pour launchd, utilisez la clé UserName dans le plist pour abandonner les privilèges explicitement.
Jeton de passerelle et contrôle d'accès : étapes de configuration reproductibles
Votre première décision « plan de contrôle » est l'exposition réseau. Liez la passerelle à la boucle locale et placez un reverse proxy devant, ou à une interface privée uniquement. Schéma courant sur Mac distant : OpenClaw écoute 127.0.0.1:PORT ; Caddy ou nginx termine le TLS et proxifie vers ce port, avec filtrage IP optionnel.
Activez l'authentification bearer sur le chemin utilisé par la CI et les clients. Stockez le jeton dans .env.gateway (droits 600) et référencez-le depuis launchd :
export OPENCLAW_GATEWAY_TOKEN="$(openssl rand -hex 32)" # bloc EnvironmentVariables launchd : # OPENCLAW_GATEWAY_TOKEN = <valeur depuis le coffre-fort secrets>
Depuis GitHub Actions ou une autre CI, injectez le jeton via secrets chiffrés — ne l'affichez jamais dans les journaux de workflow. Ajoutez une étape garde-fou qui échoue si grep -R "OPENCLAW_GATEWAY_TOKEN" . trouverait du texte en clair dans les fichiers suivis.
Fragment illustratif openclaw.json (adaptez les clés à votre version OpenClaw) :
{
"gateway": {
"listen": { "host": "127.0.0.1", "port": 18765 },
"auth": { "mode": "bearer", "header": "Authorization" },
"rateLimit": { "perMinute": 120 }
}
}
Combinez le bearer avec VPN uniquement ou tunnel SSH (ssh -L 18765:127.0.0.1:18765 utilisateur@mac-distant) et des règles pare-feu « tout refuser » par défaut sur l'entrant.
Allowlist des domaines sortants et politique proxy : liste de contrôle
Les agents amplifient le risque SSRF si chaque compétence peut appeler n'importe quelle URL. Partez d'une allowlist écrite des hôtes réellement nécessaires, puis appliquez-la en couches.
| Catégorie | Exemples d'hôtes (réduisez à votre stack) | Notes |
|---|---|---|
| API modèles / inférence | api.openai.com, api.anthropic.com, endpoints régionaux utilisés | Fixez les URL de base dans la config ; évitez les jokers. |
| Registres paquets | registry.npmjs.org, github.com, objects.githubusercontent.com | Nécessaires pour install et pulls type ClawHub. |
| Artefacts ML | huggingface.co, cdn-lfs.huggingface.co | Ajoutez seulement si vous tirez des modèles au runtime. |
| Services internes | Hôtes de registre privé | Listez dans NO_PROXY pour contourner le proxy d'entreprise. |
Définissez les variables proxy une fois pour le compte de service et l'environnement launchd :
export HTTPS_PROXY="http://proxy.corp.example:8080" export NO_PROXY="127.0.0.1,localhost,.internal.corp,artifacts.internal"
Sans proxy central, combinez règles de pare-feu macOS et compétences versionnées pour que toute modification de sortie passe par revue.
Audit des journaux et seuils d'alerte
Les journaux structurés battent les captures d'écran. Redirigez stdout/stderr de la passerelle vers des fichiers datés sous /var/log/openclaw/ (propriété du compte de service) ou utilisez StandardOutPath / StandardErrorPath dans launchd. Faites tourner avec newsyslog ou une petite config logrotate pour éviter de remplir le disque pendant les pulls de modèles.
Surveillance minimale viable sur un nœud Mac distant :
- Taux 401/403 : alerte si plus de N échecs d'auth par minute depuis une même IP (souvent 10–30 après baseline).
- Nouveaux hôtes sortants : digest quotidien des noms DNS absents des 7 jours précédents.
- Budget d'erreurs :
ECONNRESETou erreurs de poignée TLS soutenues au-dessus de 5 % des requêtes pendant 10 minutes. - Signaux quota : réponses API 429 corrélées au user-agent passerelle — souvent premier indice de jeton compromis ou sur-utilisé.
Expédiez vers un SIEM si possible ; sinon un cron + grep -E "401|403|EACCES|certificate|handshake" vaut mieux qu'un silence radio.
Erreurs courantes : ports, TLS et permissions
| Symptôme | Commandes / vérifications |
|---|---|
EADDRINUSE sur le port passerelle | lsof -nP -iTCP:18765 -sTCP:LISTEN puis arrêt du processus fantôme ou alignement du port dans openclaw.json et la config proxy. |
TLS UNABLE_TO_VERIFY_LEAF_SIGNATURE | MITM d'entreprise : racine dans le trousseau Mac ou NODE_EXTRA_CA_CERTS=/chemin/corp.pem uniquement pour l'utilisateur de service. |
| Réinitialisation côté client depuis l'extérieur | Vérifiez que proxy_read_timeout dépasse les flux modèle longs ; pare-feu et retour de trafic sur connexions établies. |
EACCES sur cache ou journaux | ls -la sur le répertoire ; propriétaire openclawsvc ; évitez le mélange sudo npm -g / install utilisateur. |
| 401 intermittents depuis la CI | Comparez les noms de secrets entre dépôts ; retours chariot en fin de jeton stocké ; dérive d'horloge minimale (sntp -sS time.apple.com). |
Après chaque changement, exécutez votre commande de santé habituelle (par ex. openclaw doctor si disponible) et un curl -sf -H "Authorization: Bearer $TOKEN" http://127.0.0.1:18765/health local avant d'ouvrir l'écoute du proxy.
Checklist de sécurité avant mise en production
- Passerelle non liée à
0.0.0.0sans allowlist IP + auth forte. - Jeton différent de toute valeur par défaut ; stockage 600 ; absent de git et des sorties CI.
- Allowlist de sortie documentée ;
HTTPS_PROXY/NO_PROXYpour le démon. - Journaux sur disque avec rotation ; au moins une alerte automatisée sur les pics d'échec d'auth.
- Test de restauration : reconstruire le nœud depuis script dans un home utilisateur propre.
FAQ sécurité
La passerelle doit-elle écouter sur 0.0.0.0 ? Plutôt non : boucle locale + reverse proxy TLS et restrictions IP, ou interface privée uniquement. Les passerelles publiques non authentifiées revenaient souvent dans les données d'exposition 2025-2026.
Où garder le jeton bearer ? Fichier env en 600 ou gestionnaire de secrets, injection launchd ; rotation aux départs ; jamais dans les logs CI.
Comment borner les URL sortantes ? Allowlist d'hôtes, proxy et pare-feu de sortie, compétences revues ; exceptions documentées plutôt que filtres désactivés.
Quels motifs journaliser en priorité ? Rafales d'échecs d'auth, pics TLS, nouveaux hôtes sortants vs baseline, 429 soutenus pouvant signaler abus de jeton.
Synthèse et choix de votre nœud Mac distant
Durcir OpenClaw sur un Mac distant, c'est surtout du travail « ennuyeux » bien fait : Node et utilisateur corrects, jetons bearer jamais dans git, chemins de sortie alignés sur une allowlist écrite, et journaux auxquels vous alertez réellement. Ce trio répond directement aux schémas d'exposition de passerelle qui ont dominé les post-mortems 2025-2026.
Pour le choix d'infrastructure, privilégiez un hôte Apple Silicon dédié avec sortie stable et un support clair pour SSH/VNC en secours — afin d'appliquer la checklist sans le bruit du multitenant partagé. Comparez les offres sur tarifs, louez un nœud via achat, consultez le centre d'aide pour les accès, et suivez la série déploiement OpenClaw sur le blog (Docker, MCP, CI).
Exécutez OpenClaw sur du matériel que vous maîtrisez de bout en bout
Parcourez le blog technique, l'accueil, le centre d'aide et achat — consultation sans connexion.