Table of Contents
- Konfiguration
- Getestet unter
- Konfigurationskonzept verstehen
- Konfigurationsdatei-Struktur
- Server-Grundkonfiguration
- CORS-Konfiguration für Frontend-Integration
- Standard-SMTP-Konfiguration
- API-Keys für verschiedene Websites
- Mail-Routing pro Website
- Websites mit eigenen SMTP-Servern
- Externe Mail-Provider integrieren
- Administrative API-Keys
- Sicherheitseinstellungen
- Konfiguration validieren
- Konfiguration neu laden
- Konfiguration testen
Konfiguration
furt für mehrere Websites einrichten
Getestet unter
- OpenBSD 7.7
- Debian 12
- Arch Linux
Konfigurationskonzept verstehen
furt wurde als Gateway für mehrere Websites entwickelt. Ein einzelner furt-Server kann Formulardaten von verschiedenen Websites entgegennehmen und an unterschiedliche E-Mail-Adressen weiterleiten. Jede Website erhält einen eigenen API-Key mit spezifischen Berechtigungen und Mail-Routing-Regeln.
Diese Architektur ermöglicht es einem Hosting-Provider mehrere Kunden über eine furt-Instanz zu bedienen, oder einem Unternehmen verschiedene Websites zentral zu verwalten. Jeder API-Key definiert wohin Mails weitergeleitet werden, welche SMTP-Server verwendet werden und von welchen IP-Adressen Anfragen akzeptiert werden.
Konfigurationsdatei-Struktur
furt nutzt INI-Format mit mehreren Abschnitten. Die Konfigurationsdatei liegt je nach System unter:
- OpenBSD:
/usr/local/etc/furt/furt.conf - Linux:
/etc/furt/furt.conf
Das INI-Format macht die Konfiguration für Menschen lesbar und ermöglicht einfache Anpassungen ohne komplexe Parser oder spezielle Tools.
# Server-Grundkonfiguration
[server]
host = 127.0.0.1
port = 7811
# Standard-SMTP für alle Websites
[smtp_default]
host = mail.example.com
user = noreply@example.com
# Website-spezifische API-Keys
[api_key "website-name"]
name = "Beschreibung"
permissions = mail:send
Server-Grundkonfiguration
Der [server]-Abschnitt definiert auf welcher IP-Adresse und welchem Port furt lauscht:
[server]
host = 127.0.0.1
port = 7811
log_level = info
log_requests = true
client_timeout = 10
Die Standard-Konfiguration bindet furt an localhost Port 7811. In Produktionsumgebungen läuft oft ein Reverse-Proxy wie nginx oder Apache vor furt, der SSL-Terminierung und Load-Balancing übernimmt. Die Logging-Optionen steuern wie detailliert furt Anfragen protokolliert.
Der client_timeout bestimmt nach wie vielen Sekunden eine HTTP-Verbindung geschlossen wird wenn der Client keine vollständige Anfrage sendet.
CORS-Konfiguration für Frontend-Integration
Moderne Websites nutzen oft JavaScript für Formular-Submissions. Der CORS-Mechanismus kontrolliert von welchen Domains Browser API-Anfragen akzeptieren:
cors_allowed_origins = http://localhost:1313,https://example.com,https://www.example.com
Diese Liste enthält alle Domains von denen furt Cross-Origin-Requests akzeptiert. Entwicklungsserver laufen oft auf localhost mit verschiedenen Ports, während Produktions-Websites ihre eigenen Domains nutzen.
Standard-SMTP-Konfiguration
Der [smtp_default]-Abschnitt definiert die Standard-SMTP-Einstellungen die alle API-Keys verwenden, außer sie überschreiben diese mit eigenen Werten:
[smtp_default]
host = mail.example.com
port = 465
user = noreply@example.com
password = your-smtp-password-here
use_ssl = true
Port 465 ist der Standard für SMTP mit SSL-Verschlüsselung. Alternativ kann Port 587 mit STARTTLS verwendet werden. Die meisten modernen Mail-Provider erwarten verschlüsselte Verbindungen und verweigern unverschlüsselte Logins.
API-Keys für verschiedene Websites
Jede Website die furt nutzen möchte benötigt einen eigenen API-Key-Abschnitt. Der Abschnittsname in Anführungszeichen wird als API-Key verwendet:
[api_key "daw-frontend-key"]
name = "Dragons@Work Website"
permissions = mail:send
allowed_ips = 127.0.0.1, 10.0.0.0/8, 192.168.0.0/16
mail_to = admin@dragons-at-work.de
mail_from = noreply@dragons-at-work.de
mail_subject_prefix = "[DAW Contact] "
Das name-Feld dient der menschenlesbaren Beschreibung in Logs und Fehlermeldungen. Die permissions definieren welche API-Endpunkte dieser Key verwenden darf. Aktuell unterstützt furt mail:send für Mail-Weiterleitung und health:check für Monitoring.
Die allowed_ips Liste kontrolliert von welchen IP-Adressen Anfragen mit diesem API-Key akzeptiert werden. CIDR-Notation ermöglicht Netzwerk-Bereiche statt einzelner IPs.
Mail-Routing pro Website
Jeder API-Key definiert wohin eingehende Mails weitergeleitet werden. Die mail_to Adresse ist das finale Ziel, mail_from erscheint als Absender der weitergeleiteten Mail:
mail_to = admin@example.com
mail_from = noreply@example.com
mail_subject_prefix = "[Website] "
Das mail_subject_prefix wird allen Betreffzeilen vorangestellt um Mails verschiedener Websites zu unterscheiden. So kann ein Postfach Mails von mehreren Websites empfangen ohne dass diese vermischt werden.
Websites mit eigenen SMTP-Servern
Manche Kunden möchten ihre eigenen SMTP-Server verwenden statt den Standard-Server. API-Keys können die Standard-SMTP-Einstellungen überschreiben:
[api_key "kunde-eigener-smtp"]
name = "Kunde mit eigenem Mail-Server"
permissions = mail:send
allowed_ips = 198.51.100.0/24
mail_to = support@kunde-server.com
mail_from = noreply@kunde-server.com
# Überschreibt smtp_default-Einstellungen
mail_smtp_host = mail.kunde-server.com
mail_smtp_port = 587
mail_smtp_user = api@kunde-server.com
mail_smtp_pass = kunde-smtp-passwort
mail_smtp_ssl = true
Die mail_smtp_* Parameter überschreiben selektiv die Standard-SMTP-Konfiguration. Andere API-Keys nutzen weiterhin den Standard-SMTP-Server. Diese Flexibilität ermöglicht es Unternehmen ihre eigene Mail-Infrastruktur zu nutzen während andere Kunden den Hosting-Provider-SMTP verwenden.
Externe Mail-Provider integrieren
Auch kommerzielle Mail-Provider wie Gmail können als SMTP-Backend fungieren:
[api_key "kunde-gmail"]
name = "Kunde mit Gmail"
permissions = mail:send
allowed_ips = 9.10.11.12/32
mail_to = support@kunde.com
mail_from = website@kunde.com
# Gmail SMTP Konfiguration
mail_smtp_host = smtp.gmail.com
mail_smtp_port = 587
mail_smtp_user = website@kunde.com
mail_smtp_pass = gmail-app-password
mail_smtp_ssl = true
Gmail erfordert App-Passwörter statt des normalen Account-Passworts für SMTP-Zugriff. Andere Provider haben ähnliche Authentifizierungs-Mechanismen.
Administrative API-Keys
Neben Website-spezifischen API-Keys kannst du Administrative Keys für Monitoring und Verwaltung definieren:
[api_key "admin-management-key"]
name = "Admin Access"
permissions = *, mail:send, auth:status
allowed_ips = 127.0.0.1, 10.0.0.0/8
Das * in permissions gewährt Zugriff auf alle API-Endpunkte. Administrative Keys sollten restriktive IP-Beschränkungen haben um unbefugten Zugriff zu verhindern.
Monitoring-Keys benötigen oft nur Health-Check-Zugriff:
[api_key "monitoring-health-key"]
name = "Monitoring Service"
permissions = health:check
allowed_ips = 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12
Diese Keys können von Monitoring-Systemen verwendet werden ohne Zugriff auf sensitive Mail-Funktionen zu gewähren.
Sicherheitseinstellungen
Der [security]-Abschnitt definiert globale Sicherheitsparameter:
[security]
rate_limit_api_key_max = 60
rate_limit_ip_max = 100
rate_limit_window = 3600
enable_test_endpoint = false
Rate-Limiting verhindert Missbrauch durch zu viele Anfragen. Die Limits gelten pro API-Key und pro IP-Adresse innerhalb eines Zeitfensters. Der Test-Endpunkt sollte in Produktionsumgebungen deaktiviert bleiben da er interne Informationen preisgeben kann.
Konfiguration validieren
Nach Änderungen an der Konfiguration solltest du die Syntax prüfen:
# OpenBSD
doas /usr/local/share/furt/scripts/validate-config.sh
# Linux
sudo /usr/local/share/furt/scripts/validate-config.sh
Das Validations-Script prüft die INI-Syntax und stellt sicher dass alle erforderlichen Abschnitte vorhanden sind. Bei Syntax-Fehlern gibt es spezifische Hinweise auf die problematischen Zeilen.
Konfiguration neu laden
furt liest die Konfigurationsdatei beim Start. Nach Änderungen musst du den Service neu starten:
# OpenBSD
doas rcctl restart furt
# Linux
sudo systemctl restart furt
Ein Neustart ist notwendig da furt die komplette Konfiguration in den Speicher lädt und nicht kontinuierlich auf Datei-Änderungen überwacht.
Konfiguration testen
Nach Konfigurationsänderungen solltest du die Funktionalität testen:
# Health-Check für Service-Status
curl http://127.0.0.1:7811/health
# API-Key-Authentifizierung testen
curl -H "X-API-Key: daw-frontend-key" http://127.0.0.1:7811/v1/auth/status
# Mail-Weiterleitung testen
curl -X POST http://127.0.0.1:7811/v1/mail/send \
-H "X-API-Key: daw-frontend-key" \
-H "Content-Type: application/json" \
-d '{"name":"Test","email":"test@example.com","subject":"Config Test","message":"Konfiguration funktioniert"}'
Der Auth-Status-Endpunkt zeigt welche Permissions der verwendete API-Key hat. Der Mail-Test sendet eine echte E-Mail an die konfigurierte Adresse und bestätigt dass SMTP-Routing funktioniert.
Diese flexible Konfigurationsarchitektur ermöglicht es furt als zentraler Mail-Gateway für komplexe Multi-Website-Umgebungen zu fungieren, während jede Website ihre spezifischen Routing- und Sicherheitsanforderungen erfüllen kann.