Chapitre 13 Clients, groupware & CLI Admin : #pApiAuth

Référence nextxch-cli : commandes, cache de schéma, requêtes jq & GitOps IaC

Avec nextxch-cli, vous gérez les domaines, les boîtes aux lettres, les listes de distribution, les alias, les clés API à portée limitée, les routes SMTP sortantes (y compris les substitutions TLS), la montée en charge IP, Reputation Shield et les zones DNS directement depuis votre terminal ou vos pipelines CI/CD (Ansible, GitLab CI, GitHub Actions), avec rechargement à chaud du cluster en 0 ms et sans aucun redémarrage.

Conseil d'exploitation & note d'architecture

Préinstallée dans le PATH dès l'installation : l'installateur Windows .msi (C:\Program Files\nextxch\nextxch-cli.cmd), le paquet Debian/Ubuntu .deb (/usr/bin/nextxch-cli), install.sh (/usr/local/bin/nextxch-cli) et l'image OCI enregistrent tous automatiquement nextxch-cli. Transmettez toujours les identifiants via NEXTXCH_API_KEY (ou NEXTXCH_TOKEN) afin que les secrets n'apparaissent jamais dans les arguments du processus.

1. Invocation, variables d'environnement, authentification & codes de sortie

Fonctionne de manière identique sur le serveur de messagerie lui-même ou à distance depuis n'importe quel poste d'administration ou runner CI via HTTPS.

Référence / configuration
# Linux / macOS / GitLab CI / GitHub Actions:
export NEXTXCH_URL="https://mail.firma.de"
export NEXTXCH_API_KEY="smk_01968f2a_..."   # Alias: NEXTXCH_TOKEN

# PowerShell (Windows Server / Admin-Workstation):
$env:NEXTXCH_URL = "https://mail.firma.de"
$env:NEXTXCH_API_KEY = "smk_01968f2a_..."

# Docker-Host ohne lokalen Wrapper (direkt im Container):
docker exec -i nextxch nextxch-cli describe

# Interaktive Erst-Anmeldung vor dem ersten API-Key (fragt Passwort verdeckt ab, nur ohne 2FA):
nextxch-cli --url https://localhost --insecure -u admin@firma.de create ApiKey \
  --set label="Ansible Prod" --set role=ServerAdmin --set allowedCidrs=10.0.0.0/8 --set expiresInDays=90

# Hilfe zu jedem Unterbefehl direkt im Terminal + definierte Exit-Codes für Skripte:
nextxch-cli --help
nextxch-cli help create
# Exit-Codes: 0 = Erfolg · 1 = HTTP-/Auth-/Server-Fehler · 2 = Ungültige CLI-Parameter / JSON

2. Découverte du schéma (describe), requêtes filtrées (query) & pipelines jq

Avec --json, get affiche un unique objet JSON compact, tandis que query diffuse du JSON délimité par des sauts de ligne (NDJSON), prêt pour jq ou PowerShell.

Référence / configuration
# Alle 12 verfügbaren Objekttypen oder die Felder eines einzelnen Typs anzeigen:
nextxch-cli describe
nextxch-cli describe Route
nextxch-cli describe TransactionalSend

# Einzelnes Objekt oder globale Singleton-Konfiguration lesen:
nextxch-cli get Domain firma.de
nextxch-cli get SmtpQueue --json | jq '{paused: .outboundQueuePaused, tls: .outboundTlsCertValidation}'

# Gefilterte Tabellen-Abfrage mit Spaltenprojektion:
nextxch-cli query Account --filter domain=firma.de,isActive=true --fields email,role,quotaMb,twoFactorEnabled

# NDJSON-Pipeline (Bash + jq): Alle aktiven Admin-Konten ohne 2FA auflisten:
nextxch-cli query Account --filter isActive=true --json \
  | jq -r 'select(.role != "User" and .twoFactorEnabled == false) | "\(.email)\t\(.role)"'

# PowerShell-Pipeline auf Windows Server: Postfächer > 80 % Quota finden:
nextxch-cli query Account --json | ForEach-Object { $_ | ConvertFrom-Json } |
  Where-Object { $_.quotaMb -gt 0 -and ($_.usedBytes / 1MB) -gt ($_.quotaMb * 0.8) } |
  Select-Object email, quotaMb, @{N="UsedMB";E={[math]::Round($_.usedBytes/1MB,1)}}

3. Créer, modifier & supprimer des objets (create, update, delete · @file.json & stdin)

Les scalaires, booléens, nombres et tableaux séparés par des virgules sont convertis automatiquement via --set key=value ; transmettez les charges utiles JSON imbriquées via --data @file.json ou stdin (-).

Référence / configuration
# 1. Domain mit Dual-DKIM (RSA-2048 + Ed25519) und 10 Jahren GoBD-Aufbewahrung anlegen:
nextxch-cli create Domain \
  --set name=firma.de \
  --set dkimSigningMode=Dual \
  --set retentionLockMode=Compliance \
  --set retentionDays=3650

# 2. Benutzerpostfach, Verteilerliste & Datenschutz-Alias anlegen:
nextxch-cli create Account/User --set email=buchhaltung@firma.de --set displayName="Buchhaltung" --set password='...' --set quotaMb=15360
nextxch-cli create Account/List --set email=rechnung@firma.de --set members=buchhaltung@firma.de,archiv@firma.de
nextxch-cli create Alias --set address=info@firma.de --set target=buchhaltung@firma.de --set description="Zentrale"

# 3. Scoped API-Key für Webshop/ERP (nur /api/v1/send, feste Absenderadresse & Subnetz-Filter):
nextxch-cli create ApiKey \
  --set label="Shopware Produktion" \
  --set role=User \
  --set senderAddress=bestellung@firma.de \
  --set defaultCategory=transactional \
  --set allowedCidrs=10.20.0.0/16,198.51.100.12/32 \
  --set expiresInDays=180

# 4. Ausgehende Route / TLS-Ausnahme für Partner-MX mit RemoteCertificateNameMismatch (Auto DNS-MX):
nextxch-cli create Route --set domain=neff.me --set tlsMode=StartTlsIgnoreCert --set description="Shared-MX TLS Override"

# 5. IP-Warming & Reputation Shield aktivieren oder JSON per Pipe (stdin) übergeben:
nextxch-cli update TransactionalSend --set preset=warming_28d
nextxch-cli update ReputationShield --set preset=recommended
echo '{"junkScoreThreshold":4.2,"clamAvEnabled":true}' | nextxch-cli update SpamGuard --data -

4. Vérifications DNS en direct, export de zone BIND & GitOps déclaratif (snapshot & apply --dry-run)

Chaque ligne d'un plan .ndjson décrit une opération idempotente (upsert ou delete) ; les commentaires # et // sont pris en charge nativement pour les revues de code Git.

Référence / configuration
# Öffentliche DNS-Einträge live gegen die konfigurierten DKIM/DMARC/TLSA-Werte prüfen & als BIND-Zone speichern:
nextxch-cli dns firma.de --live
nextxch-cli dns firma.de --bind --output firma.de.zone

# Aktuellen Serverzustand als versionierbaren NDJSON-Plan exportieren (ohne Geheimnisse für Git):
nextxch-cli snapshot Domain Account Alias Route TransactionalSend ReputationShield --output infra/mail-prod.ndjson

# Beispiel für deklarative Zeilen in infra/mail-prod.ndjson (inkl. Kommentaren & gezieltem Löschen):
# {"op":"upsert","type":"Domain","key":"firma.de","fields":{"name":"firma.de","dkimSigningMode":"Dual","retentionDays":3650}}
# {"op":"upsert","type":"Route","key":"neff.me","fields":{"domain":"neff.me","tlsMode":"StartTlsIgnoreCert","enabled":true}}
# {"op":"delete","type":"Alias","key":"alt-kampagne@firma.de"}

# CI/CD Pull-Request Check (verändert NICHTS in der Datenbank, Exit-Code != 0 bei Fehlern):
nextxch-cli apply --file infra/mail-prod.ndjson --dry-run

# Nach Freigabe idempotent auf Produktion anwenden:
nextxch-cli apply --file infra/mail-prod.ndjson

Paramètres, valeurs par défaut & bonnes pratiques

Paramètre / emplacement Description Valeur par défaut Bonne pratique en production
Globale Flags & Umgebungsvariablen Contrôle l'URL du serveur (--url / NEXTXCH_URL), la clé API (--api-key, --token / NEXTXCH_API_KEY, NEXTXCH_TOKEN), l'authentification Basic (-u/-p), le mode JSON (--json), le TLS de laboratoire (--insecure / -k), les couleurs (--no-color / NO_COLOR) et la trace HTTP (--debug / NEXTXCH_DEBUG=1). URL: http://localhost Exportez toujours NEXTXCH_URL + NEXTXCH_API_KEY et passez --json dans les scripts d'automatisation ; réservez --insecure (-k) strictement aux environnements de préproduction locaux.
describe [Type] (Schema & Offline-Cache) Liste les 12 types d'objets serveur ou inspecte chaque champ, type et variante d'énumération d'un objet donné, en mettant le schéma en cache localement selon X-Nextxch-Schema-Version. Lokaler XDG/AppData-Cache Exécutez nextxch-cli describe <Type> avant de scripter de nouvelles stratégies (par ex. nextxch-cli describe TransactionalSend) ; rôle minimal : ComplianceAuditor.
get <Type> [IdOrName] [--json] Récupère un objet de collection par nom, e-mail, slug ou GUID, ou lit une politique singleton globale ('singleton' est déduit automatiquement). Kartenansicht / 1-Zeilen-JSON Pour les singletons, omettez l'ID : nextxch-cli get SpamGuard ou nextxch-cli get ReputationShield --json.
query <Type> (Alias: list) Recherche dans les collections avec filtres combinés en ET par virgule (--filter k=v,k2=v2), projection de colonnes (--fields a,b,c) et --limit N. Produit du NDJSON strict (1 objet JSON par ligne) avec --json. Tabelle / NDJSON-Stream Idéal pour les audits de sécurité : nextxch-cli query Account --json | jq -r 'select(.twoFactorEnabled==false) | .email' liste les comptes sans 2FA.
create <Type[/Variant]> & update <Type> (Alias: patch) Crée de nouveaux éléments de collection ou modifie des champs individuels d'objets/singletons existants sans écraser les propriétés non concernées (rechargement à chaud du cluster en 0 ms). --set k=v · @file.json · stdin Transmettez les champs scalaires/tableaux via --set key=value (tableaux séparés par des virgules) et les politiques imbriquées complexes via --data @policy.json ou stdin (--data -).
delete <Type> <IdOrName> (Alias: rm) Désactive en douceur et en toute sécurité des domaines/comptes, supprime des alias secondaires ou des routes personnalisées et révoque immédiatement des clés API à portée limitée. Schutz vor Selbstlöschung Une protection intégrée contre le verrouillage empêche de supprimer la clé API ou le principal administrateur actuellement authentifié.
dns <Domain> [--live] [--bind] [-o Datei] Vérifie MX, SPF, Dual-DKIM (RSA-2048 + Ed25519), DMARC, MTA-STS, DANE TLSA et BIMI en direct sur le DNS public, ou exporte un fichier de zone BIND RFC 1035. Advisor-Tabelle / BIND-Zone Juste après avoir créé un domaine, exécutez nextxch-cli dns company.com --bind -o company.com.zone pour importer proprement tous les enregistrements, sans fautes de frappe dues au copier-coller.
snapshot & apply --dry-run (GitOps IaC) snapshot exporte l'état complet du serveur ou du locataire sous forme d'opérations NDJSON ordonnées ; apply exécute les plans (avec prise en charge des commentaires # et //) de manière idempotente. Atomarer Zeilen-Bericht Conditionnez toujours les déploiements CI/CD à nextxch-cli apply -f plan.ndjson --dry-run (se termine avec le code 1 et des diagnostics précis par ligne si une entrée est invalide).
Sammlungen: Tenant, Domain, Account, Alias Gère les locataires (ServerAdmin), les domaines avec génération automatique des clés Dual-DKIM, les boîtes aux lettres utilisateur (Account/User), les listes de distribution (Account/List) et les alias (y compris isMasked). Rolle: TenantAdmin+ L'exécution de create Domain --set dkimSigningMode=Dual génère immédiatement et automatiquement les deux paires de clés RSA-2048 et Ed25519.
Sammlungen: ApiKey & Route (OutboundRoute) ApiKey émet des jetons smk_ immuables, limités par rôle et par CIDR (rotation via create + delete). Route gère les smart hosts par domaine et les substitutions de certificats TLS. ApiKey: TenantAdmin+ · Route: ServerAdmin Lorsqu'un MX partenaire échoue avec RemoteCertificateNameMismatch, exécutez : nextxch-cli create Route --set domain=partner.com --set tlsMode=StartTlsIgnoreCert (targetHost vide = Auto DNS-MX).
Singletons: TransactionalSend & ReputationShield Contrôle la montée en charge IP/domaine, les catégories et les quotas fournisseur (TransactionalSend) ainsi que les listes de suppression, ARF FBL, le désabonnement RFC 8058 et les disjoncteurs (ReputationShield). Presets per 1 Befehl Configuration rapide via des préréglages : nextxch-cli update TransactionalSend --set preset=warming_28d et nextxch-cli update ReputationShield --set preset=recommended.
Singletons: SpamGuard, SmtpQueue, TransportRules & Server Configure les seuils antispam & ClamAV (SpamGuard), les workers de file d'attente, le smart host & la politique TLS (SmtpQueue), les clauses de non-responsabilité & Fail2Ban (TransportRules) ainsi que serverHostName (Server). Rolle: ServerAdmin Mise à jour du nom d'hôte sans interruption : nextxch-cli update Server --set serverHostName=mail.company.com met à jour en direct EHLO, bannières et Autodiscover.