第 13 章 客户端、Groupware & CLI 管理:#pApiAuth

nextxch-cli 参考:命令、Schema 缓存、jq 查询 & GitOps IaC

借助 nextxch-cli,您可以直接在终端或 CI/CD 流水线(Ansible、GitLab CI、GitHub Actions)中管理域、邮箱、通讯组列表、别名、作用域 API 密钥、出站 SMTP 路由(含 TLS 覆盖设置)、IP 预热、Reputation Shield 和 DNS 区域,集群热重载 0 ms,无需重启。

运维提示与架构说明

开箱即预装到 PATH:Windows .msi 安装程序 (C:\Program Files\nextxch\nextxch-cli.cmd)、Debian/Ubuntu .deb 软件包 (/usr/bin/nextxch-cli)、install.sh (/usr/local/bin/nextxch-cli) 和 OCI 镜像都会自动注册 nextxch-cli。请始终通过 NEXTXCH_API_KEY(或 NEXTXCH_TOKEN)传递凭据,以免机密出现在进程参数中。

1. 调用、环境变量、身份验证 & 退出代码

无论在邮件主机本机上,还是通过 HTTPS 从任意管理工作站或 CI Runner 远程使用,效果完全相同。

参考 / 配置
# 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. 架构发现(describe)、筛选查询(query)& jq 管道

使用 --json 时,get 输出单个紧凑 JSON 对象,而 query 以换行分隔的 JSON (NDJSON) 流式输出,可直接交给 jq 或 PowerShell 处理。

参考 / 配置
# 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. 创建、修补和删除对象(create、update、delete · @file.json & stdin)

标量、布尔值、数字和逗号分隔的数组可通过 --set key=value 自动转换类型;嵌套的 JSON 负载请通过 --data @file.json 或 stdin (-) 传入。

参考 / 配置
# 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. 实时 DNS 检查、BIND 区域导出 & 声明式 GitOps(snapshot & apply --dry-run)

.ndjson 计划中的每一行描述一个幂等操作(upsert 或 delete);原生支持 # 和 // 注释,便于 Git 代码评审。

参考 / 配置
# Ö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

设置、默认值与最佳实践

设置 / 位置 说明 默认值 生产环境最佳实践
Globale Flags & Umgebungsvariablen 控制服务器 URL(--url / NEXTXCH_URL)、API 密钥(--api-key、--token / NEXTXCH_API_KEY、NEXTXCH_TOKEN)、Basic 认证(-u/-p)、JSON 模式(--json)、实验环境 TLS(--insecure / -k)、颜色(--no-color / NO_COLOR)以及 HTTP 跟踪(--debug / NEXTXCH_DEBUG=1)。 URL: http://localhost 在自动化脚本中务必导出 NEXTXCH_URL + NEXTXCH_API_KEY 并传递 --json;--insecure (-k) 仅限用于本地测试环境。
describe [Type] (Schema & Offline-Cache) 列出全部 12 种服务器对象类型,或检查特定对象的每个字段、类型和枚举值,并按 X-Nextxch-Schema-Version 在本地缓存架构。 Lokaler XDG/AppData-Cache 在编写新策略脚本之前先运行 nextxch-cli describe <Type>(例如 nextxch-cli describe TransactionalSend);最低角色:ComplianceAuditor。
get <Type> [IdOrName] [--json] 按名称、电子邮件、slug 或 GUID 获取单个集合对象,或读取全局单例策略(自动推断 'singleton')。 Kartenansicht / 1-Zeilen-JSON 对于单例对象,省略 ID:nextxch-cli get SpamGuard 或 nextxch-cli get ReputationShield --json。
query <Type> (Alias: list) 使用逗号 AND 筛选(--filter k=v,k2=v2)、列投影(--fields a,b,c)和 --limit N 搜索集合。配合 --json 输出严格的 NDJSON(每行 1 个 JSON 对象)。 Tabelle / NDJSON-Stream 非常适合安全审计:nextxch-cli query Account --json | jq -r 'select(.twoFactorEnabled==false) | .email' 会列出未启用 2FA 的账户。
create <Type[/Variant]> & update <Type> (Alias: patch) 创建新的集合条目,或修补现有对象/单例的单个字段,而不会覆盖未改动的属性(0 ms 集群热重载)。 --set k=v · @file.json · stdin 标量/数组字段通过 --set key=value 传递(数组以逗号分隔),复杂的嵌套策略通过 --data @policy.json 或 stdin (--data -) 传递。
delete <Type> <IdOrName> (Alias: rm) 安全地软停用域/账户,删除次要别名或自定义路由,并立即吊销作用域 API 密钥。 Schutz vor Selbstlöschung 内置锁定保护,防止删除当前已认证的 API 密钥或管理员主体。
dns <Domain> [--live] [--bind] [-o Datei] 针对公共 DNS 实时校验 MX、SPF、双 DKIM(RSA-2048 + Ed25519)、DMARC、MTA-STS、DANE TLSA 和 BIMI,或导出 RFC 1035 BIND 区域文件。 Advisor-Tabelle / BIND-Zone 创建域后立即运行 nextxch-cli dns company.com --bind -o company.com.zone,即可干净地导入所有记录,避免复制粘贴出错。
snapshot & apply --dry-run (GitOps IaC) snapshot 将完整的服务器或租户状态导出为有序的 NDJSON 操作;apply 以幂等方式执行计划(支持 # 和 // 注释)。 Atomarer Zeilen-Bericht CI/CD 部署务必以 nextxch-cli apply -f plan.ndjson --dry-run 作为关卡(任一条目无效时以退出码 1 结束,并给出精确到行的诊断)。
Sammlungen: Tenant, Domain, Account, Alias 管理租户 (ServerAdmin)、自动生成双 DKIM 密钥的域、用户邮箱 (Account/User)、通讯组列表 (Account/List) 和别名(含 isMasked)。 Rolle: TenantAdmin+ 执行 create Domain --set dkimSigningMode=Dual 会立即自动生成 RSA-2048 和 Ed25519 两组密钥对。
Sammlungen: ApiKey & Route (OutboundRoute) ApiKey 签发不可变、按角色和 CIDR 限定范围的 smk_ 令牌(通过 create + delete 轮换)。Route 管理按域的智能主机和 TLS 证书覆盖设置。 ApiKey: TenantAdmin+ · Route: ServerAdmin 当合作方 MX 因 RemoteCertificateNameMismatch 失败时,请运行:nextxch-cli create Route --set domain=partner.com --set tlsMode=StartTlsIgnoreCert(targetHost 留空 = Auto DNS-MX)。
Singletons: TransactionalSend & ReputationShield 控制 IP/域预热、类别和服务商配额 (TransactionalSend),以及抑制列表、ARF FBL、RFC 8058 退订和熔断器 (ReputationShield)。 Presets per 1 Befehl 通过预设快速配置:nextxch-cli update TransactionalSend --set preset=warming_28d 和 nextxch-cli update ReputationShield --set preset=recommended。
Singletons: SpamGuard, SmtpQueue, TransportRules & Server 配置垃圾邮件阈值 & ClamAV (SpamGuard)、队列工作线程、智能主机 & TLS 策略 (SmtpQueue)、免责声明 & Fail2Ban (TransportRules) 以及 serverHostName (Server)。 Rolle: ServerAdmin 零停机主机名更新:nextxch-cli update Server --set serverHostName=mail.company.com 会实时更新 EHLO、横幅和 Autodiscover。