Zum Inhalt

Security

4-Schichten-Modell

Schicht 1: UFW (Host-Firewall)

Default-Deny Incoming. Offene Ports:

Port Protokoll Beschreibung
22 TCP SSH
80, 443 TCP HTTP/HTTPS (Traefik)
2222 TCP SFTP (Hosting)
5060 UDP SIP
5067 TCP SIP/TLS
7443 TCP WebRTC WSS
16384-32768 UDP RTP Media

Config: /home/admin/scripts/ufw-setup.sh

Schicht 2: CrowdSec (IDS/IPS)

  • nftables bouncer — IP-Level Blocking
  • Traefik Plugin — HTTP-Level Blocking

Custom Scenarios:

Scenario Ban-Dauer Trigger
SIP-Bruteforce 24h 5 Fehlversuche / 5 Min
SIP-Scanner 7d Scanner-Pattern erkannt
WSS-Abuse 1h Ueberlast auf WebSocket
Mail-Bruteforce 24h 5 Fehlversuche / 5 Min
Mail-Spam-Sender 24h 20 Mails / 10 Min

Config: /etc/crowdsec/

Schicht 3: fail2ban (Legacy)

Wird schrittweise durch CrowdSec ersetzt.

4 Jails: sshd, freeswitch, freeswitch-scanner, wss-proxy

Schicht 4: Traefik Middleware

Per-Request Chain:

crowdsec@file → security-headers@file → rate-limit-*@file → [auth-check] → backend

ForwardAuth (SSO)

Der auth-service (auth.xynap.tech) schuetzt Services via ForwardAuth:

Traefik → auth-check middleware → GET http://auth-service:8091/verify
  → 200: Zugriff erlaubt (X-Auth-User, X-Auth-Name, X-Auth-Role Header)
  → 302: Redirect zu Login

Cookie-Domain: .xynap.tech

Ausfuehrliche Dokumentation

Siehe Zugangsportal fuer Benutzeranleitungen, Benutzerverwaltung fuer Admin-Funktionen und Technische Referenz fuer Deployment und Debugging.

Platform API Security

  • JWT mit konfigurierbarer Expiry
  • TOTP 2FA (Authenticator App)
  • Telegram 2FA (Code via Bot)
  • OAuth2 (GitHub, Google)
  • RBAC — 5 Rollen, 30+ Permissions
  • Tenant-Isolation — Kunden sehen nur eigene Daten
  • Audit-Log — Alle Aenderungen werden protokolliert
  • Encrypted Credentials — DNS-Provider/DB-Passwoerter mit Fernet verschluesselt

Security-by-Design (v2.4, 2026-03-11)

Architekturprinzip: Alle Datenzugriffe laufen ueber die API, die API erzwingt RBAC basierend auf Rollen/Rechten.

XSS-Schutz (Frontend)

Alle v-html-Verwendungen werden mit DOMPurify sanitized:

Komponente Risiko Massnahme
SignatureManager.vue E-Mail-Signaturen (HTML) sanitizeHtml() Wrapper
TextBlock.vue CMS-Benutzercontent sanitizeHtml() Wrapper
ClientSetupView.vue i18n-Translations sanitizeHtml() (Defense-in-depth)

Utility: src/shell/utils/sanitizeHtml.ts — Zentraler DOMPurify-Wrapper.

Webhook-HMAC-Verifikation

Payment-Webhooks (Stripe, PayPal) pruefen HMAC-SHA256-Signaturen:

  • Header: X-Webhook-Signature (Hex-Digest)
  • Secret aus Settings: payments.stripe_webhook_secret / payments.paypal_webhook_secret
  • Ohne konfiguriertes Secret: Dummy-Modus (Requests werden akzeptiert)
  • Mit Secret: Signatur wird erzwungen, ungueltige Requests → 403

User-Preferences via API

Nutzer-Praeferenzen (Mail-Handler, Call-Handler) werden ueber die API verwaltet:

  • GET /api/v1/settings/preferences — Eigene Praeferenzen lesen
  • PUT /api/v1/settings/preferences — Eigene Praeferenzen setzen
  • Whitelist-Validierung: Nur erlaubte Keys (mail_handler, call_handler) und Werte (internal, system, ask)
  • Scope: user mit scope_id = user.id — RBAC erzwingt, dass jeder User nur eigene Praeferenzen aendern kann
  • Frontend: localStorage nur als Offline-Cache, primaere Quelle ist die API

Alle klickbaren Kontakt-Links werden vor Verwendung sanitized:

Typ Sanitierung
E-Mail Steuerzeichen entfernt, @ geprueft, javascript: blockiert
Telefon Nur +, Ziffern, Leerzeichen, Klammern, Bindestriche
Website Nur http:// / https://, javascript: / data: / vbscript: blockiert
Telegram Handle-Regex ([a-zA-Z0-9_]{3,32}) oder t.me-URL
WhatsApp Nur Ziffern und +, Mindestlaenge 5
Externe Links noopener,noreferrer bei window.open()

Compose-Parameter Sanitierung

URL-Parameter (?to=, ?cc=, ?subject=, ?body=) im Webmailer werden validiert:

  • E-Mail-Adressen: Steuerzeichen entfernt, @ geprueft
  • Subject: Max 200 Zeichen, Steuerzeichen entfernt
  • Body: Max 2000 Zeichen, HTML-escaped (kein v-html)

Netzwerk-Sicherheit

  • Hetzner MAC-Filtering auf Bridge-Level
  • VM-Routing ohne NAT (transparente IPs)
  • IPv6 via ndppd (NDP Proxy)
  • Network Watchdog ueberwacht Bridge-Status