الفصل 13 العملاء والعمل الجماعي وCLI المسؤول: #pApiAuth

مرجع nextxch-cli: الأوامر وذاكرة المخطط المؤقتة واستعلامات jq وGitOps IaC

باستخدام nextxch-cli تديرون النطاقات وصناديق البريد وقوائم التوزيع والأسماء المستعارة ومفاتيح API محددة النطاق ومسارات SMTP الصادرة (بما في ذلك تجاوزات TLS) وإحماء IP وReputation Shield ومناطق DNS مباشرة من الطرفية أو من خطوط CI/CD (Ansible وGitLab CI وGitHub Actions) - مع إعادة تحميل فورية للعنقود في 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. الاستدعاء ومتغيرات البيئة والمصادقة ورموز الخروج

يعمل بالطريقة نفسها على مضيف البريد ذاته أو عن بُعد من أي محطة عمل إدارية أو مشغّل CI عبر HTTPS.

المرجع / الإعداد
# 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، أو يفحص كل حقل ونوع ومتغير Enum لكائن محدد، مع تخزين المخطط مؤقتًا محليًا حسب 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 للكائنات المفردة، احذفوا المعرّف: 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. ويُخرج NDJSON صارمًا (كائن JSON واحد لكل سطر) مع --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] يتحقق من MX وSPF وDual-DKIM (RSA-2048 + Ed25519) وDMARC وMTA-STS وDANE TLSA وBIMI مباشرةً مقابل DNS العام، أو يصدّر ملف منطقة BIND وفق RFC 1035. Advisor-Tabelle / BIND-Zone بعد إنشاء النطاق مباشرة، شغّلوا nextxch-cli dns company.com --bind -o company.com.zone لاستيراد جميع السجلات بشكل سليم دون أخطاء النسخ واللصق.
snapshot & apply --dry-run (GitOps IaC) يصدّر snapshot الحالة الكاملة للخادم أو المستأجر كعمليات NDJSON مرتبة؛ وينفّذ apply الخطط (مع دعم تعليقات # و//) بشكل متساوي الأثر (Idempotent). Atomarer Zeilen-Bericht اربطوا دائمًا عمليات نشر CI/CD بنجاح الأمر nextxch-cli apply -f plan.ndjson --dry-run (يخرج بالرمز 1 مع تشخيصات دقيقة على مستوى السطر إذا كان أي إدخال غير صالح).
Sammlungen: Tenant, Domain, Account, Alias يدير المستأجرين (ServerAdmin)، والنطاقات مع توليد تلقائي لمفاتيح Dual-DKIM، وصناديق بريد المستخدمين (Account/User)، وقوائم التوزيع (Account/List)، والأسماء المستعارة (بما في ذلك isMasked). Rolle: TenantAdmin+ يؤدي تشغيل create Domain --set dkimSigningMode=Dual إلى توليد زوجي المفاتيح RSA-2048 وEd25519 تلقائيًا وفورًا.
Sammlungen: ApiKey & Route (OutboundRoute) ينشئ ApiKey رموز smk_ ثابتة محصورة بالدور ونطاق CIDR (التدوير عبر create + delete). ويدير Route مضيفات smart-host لكل نطاق وتجاوزات شهادات 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)، وعمّال قائمة الانتظار، والمضيف الذكي (Smart Host) وسياسة TLS (SmtpQueue)، وإخلاءات المسؤولية وFail2Ban (TransportRules)، وserverHostName (Server). Rolle: ServerAdmin تحديث اسم المضيف دون توقف: يحدّث الأمر nextxch-cli update Server --set serverHostName=mail.company.com كلًّا من EHLO والشعارات وAutodiscover مباشرة.