Selbst gehostet

Erste Schritte

Unsere selbst gehostete E-Mail-Lösung ist, wie alle unsere Produkte, zu 100 % Open Source – sowohl im Frontend als auch im Backend. Das bedeutet:

  1. VollstÀndige Transparenz: Jede Codezeile, die Ihre E-Mails verarbeitet, ist öffentlich einsehbar.
  2. Community-BeitrÀge: Jeder kann Verbesserungen beitragen oder Probleme beheben.
  3. Sicherheit durch Offenheit: Schwachstellen können von einer globalen Community identifiziert und behoben werden.
  4. Keine AbhÀngigkeit von einem Anbieter: Sie sind nicht von der Existenz unseres Unternehmens abhÀngig.

Der gesamte Code ist auf GitHub unter https://github.com/forwardemail/forwardemail.net, verfĂŒgbar und unterliegt der MIT-Lizenz.

Die Architektur umfasst Container fĂŒr:

  • SMTP-Server fĂŒr ausgehende E-Mails
  • IMAP/POP3-Server fĂŒr den E-Mail-Abruf
  • WeboberflĂ€che fĂŒr die Verwaltung
  • Datenbank zur Konfigurationsspeicherung
  • Redis fĂŒr Caching und Performance
  • SQLite fĂŒr sichere, verschlĂŒsselte Postfachspeicherung

Note

Schauen Sie sich unbedingt unseren selbst gehosteter Blog an.

Wer eine detailliertere Schritt-fĂŒr-Schritt-Anleitung sucht, findet in unseren Anleitungen Ubuntu und Debian weitere Informationen.

Anforderungen

Stellen Sie vor dem AusfĂŒhren des Installationsskripts sicher, dass Sie ĂŒber Folgendes verfĂŒgen:

  • Betriebssystem: Ein Linux-basierter Server (aktuell mit UnterstĂŒtzung fĂŒr Ubuntu 22.04+).
  • Ressourcen: 1 vCPU und 2 GB RAM
  • Root-Zugriff: Administratorrechte zum AusfĂŒhren von Befehlen.
  • DomĂ€nenname: Eine benutzerdefinierte DomĂ€ne, bereit fĂŒr die DNS-Konfiguration.
  • Saubere IP-Adresse: Stellen Sie sicher, dass Ihr Server eine saubere IP-Adresse ohne Spam-Reputation hat, indem Sie Blacklists prĂŒfen. Weitere Informationen: Hier.
  • Öffentliche IP-Adresse mit UnterstĂŒtzung fĂŒr Port 25
  • Möglichkeit, umgekehrter PTR festzulegen
  • IPv4- und IPv6-UnterstĂŒtzung

Tip

Sehen Sie sich unsere Liste mit tolle Mailserver-Anbieter an

Cloud-Init / Benutzerdaten

Die meisten Cloud-Anbieter unterstĂŒtzen eine Cloud-Init-Konfiguration fĂŒr die Bereitstellung des virtuellen privaten Servers (VPS). Dies ist eine hervorragende Möglichkeit, einige Dateien und Umgebungsvariablen vorab fĂŒr die anfĂ€ngliche Einrichtungslogik des Skripts festzulegen. Dadurch entfĂ€llt die Notwendigkeit, wĂ€hrend der AusfĂŒhrung des Skripts zusĂ€tzliche Informationen abzufragen.

Optionen

  • EMAIL – E-Mail-Adresse fĂŒr Certbot-Erinnerungen zum Ablauf
  • DOMAIN – Benutzerdefinierte Domain (z. B. example.com) fĂŒr die Einrichtung des Self-Hostings
  • AUTH_BASIC_USERNAME – Benutzername fĂŒr die Ersteinrichtung zum Schutz der Website
  • AUTH_BASIC_PASSWORD – Passwort fĂŒr die Ersteinrichtung zum Schutz der Website
  • /root/.cloudflare.ini – (Nur fĂŒr Cloudflare-Nutzer) Cloudflare-Konfigurationsdatei, die Certbot fĂŒr die DNS-Konfiguration verwendet. Sie mĂŒssen Ihren API-Token ĂŒber dns_cloudflare_api_token festlegen. Weitere Informationen finden Sie unter Hier.

Beispiel:

#cloud-config
write_files:
  - path: /root/.cloudflare.ini
    content: |
      dns_cloudflare_api_token = "xxx"
    owner: root:root
    permissions: '0600'
  - path: /etc/profile.d/env.sh
    content: |
      export EMAIL="test@myemail.com"
      export DOMAIN="mydomain.com"

runcmd:
  - chmod +x /etc/profile.d/env.sh

Installieren Sie

FĂŒhren Sie den folgenden Befehl auf Ihrem Server aus, um das Installationsskript herunterzuladen und auszufĂŒhren:

bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Debug-Installationsskript

FĂŒgen Sie DEBUG=true vor dem Installationsskript hinzu, um eine ausfĂŒhrliche Ausgabe zu erhalten:

DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Eingabeaufforderungen

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • Ersteinrichtung: Laden Sie den neuesten Code zur E-Mail-Weiterleitung herunter, konfigurieren Sie die Umgebung, geben Sie Ihre benutzerdefinierte DomĂ€ne ein und richten Sie alle erforderlichen Zertifikate, SchlĂŒssel und Geheimnisse ein.
  • Backup einrichten: Richtet einen Cron-Befehl ein, um MongoDB und Redis mithilfe eines S3-kompatiblen Speichers fĂŒr sichere Remote-Speicherung zu sichern. SQLite wird bei der Anmeldung separat gesichert, falls Änderungen fĂŒr sichere, verschlĂŒsselte Backups vorgenommen werden.
  • Upgrade einrichten: Richten Sie einen Cron-Befehl ein, um nĂ€chtliche Updates zu prĂŒfen und Infrastrukturkomponenten sicher wiederherzustellen und neu zu starten.
  • Zertifikate erneuern: Certbot/Lets Encrypt wird fĂŒr SSL-Zertifikate verwendet, deren SchlĂŒssel alle 3 Monate ablaufen. Dadurch werden die Zertifikate fĂŒr Ihre DomĂ€ne erneuert und im entsprechenden Ordner abgelegt, damit die zugehörigen Komponenten sie nutzen können. Siehe wichtige Dateipfade.
  • Aus Backup wiederherstellen: Löst die Wiederherstellung von MongoDB und Redis aus Backup-Daten aus.

Ersteinrichtung (Option 1)

WĂ€hlen Sie zum Beginnen die Option 1. Initial setup.

Nach Abschluss sollte eine Erfolgsmeldung angezeigt werden. Sie können auch docker ps ausfĂŒhren, um die Komponenten hochzufahren. Weitere Informationen zu den Komponenten finden Sie weiter unten.

Dienste

Dienstname Standardport Beschreibung
Web 443 WeboberflĂ€che fĂŒr alle Administratorinteraktionen
API 4000 API-Schicht zum Abstraktion von Datenbanken
Bree Keiner Hintergrundjob und Task-Runner
SMTP 465/587 SMTP-Server fĂŒr ausgehende E-Mails
SMTP Bree Keiner SMTP-Hintergrundjob
MX 2525 Mail-Austausch fĂŒr eingehende E-Mails und E-Mail-Weiterleitung
IMAP 993/2993 IMAP-Server fĂŒr eingehende E-Mails und Postfachverwaltung
POP3 995/2995 POP3-Server fĂŒr eingehende E-Mails und Postfachverwaltung
SQLite 3456 SQLite-Server fĂŒr Interaktionen mit SQLite-Datenbank(en)
SQLite Bree Keiner SQLite-Hintergrundjob
CalDAV 5000 CalDAV-Server zur Kalenderverwaltung
CardDAV 6000 CardDAV-Server zur Kalenderverwaltung
MongoDB 27017 MongoDB-Datenbank fĂŒr die meisten Datenverwaltungen
Redis 6379 Redis fĂŒr Caching und Statusverwaltung
SQLite Keiner SQLite-Datenbank(en) fĂŒr verschlĂŒsselte PostfĂ€cher

Wichtige Dateipfade

Hinweis: Der unten stehende Hostpfad ist relativ zu /root/forwardemail.net/self-hosting/.

Komponente Hostpfad Containerpfad
MongoDB ./mongo-backups /backups
Redis ./redis-data /data
SQLite ./sqlite-data /mnt/{SQLITE_STORAGE_PATH}
Env-Datei ./.env /app/.env
SSL-Zertifikate/SchlĂŒssel ./ssl /app/ssl/
Privater SchlĂŒssel ./ssl/privkey.pem /app/ssl/privkey.pem
VollstÀndiges Kettenzertifikat ./ssl/fullchain.pem /app/ssl/fullchain.pem
Zertifizierte Zertifizierungsstellen ./ssl/cert.pem /app/ssl/cert.pem
Privater DKIM-SchlĂŒssel ./ssl/dkim.key /app/ssl/dkim.key

Important

Speichern Sie die Datei .env sicher. Sie ist fĂŒr die Wiederherstellung im Fehlerfall unerlĂ€sslich. Sie finden sie in /root/forwardemail.net/self-hosting/.env.

Konfiguration

Erste DNS-Einrichtung

Konfigurieren Sie die entsprechenden DNS-EintrĂ€ge bei Ihrem DNS-Anbieter. Beachten Sie, dass alle EintrĂ€ge in Klammern (<>) dynamisch sind und mit Ihrem Wert aktualisiert werden mĂŒssen.

Reverse-DNS-/PTR-Eintrag

Reverse DNS (rDNS) oder Reverse Pointer Records (PTR-Records) sind fĂŒr E-Mail-Server unerlĂ€sslich, da sie die LegitimitĂ€t des Servers, der die E-Mail sendet, bestĂ€tigen. Jeder Cloud-Anbieter handhabt dies anders. Sie mĂŒssen daher nachschauen, wie Sie „Reverse DNS“ hinzufĂŒgen, um Host und IP dem entsprechenden Hostnamen zuzuordnen. Meistens finden Sie dies im Netzwerkbereich des Anbieters.

Port 25 blockiert

Einige ISPs und Cloud-Anbieter blockieren Port 25, um böswillige Akteure zu verhindern. Möglicherweise mĂŒssen Sie ein Support-Ticket einreichen, um Port 25 fĂŒr SMTP/ausgehende E-Mails freizugeben.

Einarbeitung

  1. Öffnen Sie die Landingpage. Navigieren Sie zu https://<DomĂ€nenname> und ersetzen Sie <DomĂ€nenname> durch die in Ihren DNS-Einstellungen konfigurierte DomĂ€ne. Die Landingpage „E-Mail weiterleiten“ sollte angezeigt werden.

  2. Melden Sie sich an und integrieren Sie Ihre Domain

  • Melden Sie sich mit einer gĂŒltigen E-Mail-Adresse und einem gĂŒltigen Passwort an.
  • Geben Sie den DomĂ€nennamen ein, den Sie einrichten möchten (dieser muss mit der DNS-Konfiguration ĂŒbereinstimmen).
  • Folgen Sie den Anweisungen, um die erforderlichen MX- und TXT-EintrĂ€ge zur ÜberprĂŒfung hinzuzufĂŒgen.
  1. Einrichtung abschließen
  • Rufen Sie nach der Verifizierung die Seite „Aliase“ auf, um Ihren ersten Alias zu erstellen.
  • Konfigurieren Sie optional SMTP fĂŒr ausgehende E-Mails in den DomĂ€neneinstellungen. HierfĂŒr sind zusĂ€tzliche DNS-EintrĂ€ge erforderlich.

Note

Es werden keine Informationen außerhalb Ihres Servers gesendet. Die selbst gehostete Option und das Startkonto dienen lediglich dem Administrator-Login und der Webansicht zur Verwaltung von DomĂ€nen, Aliasen und zugehörigen E-Mail-Konfigurationen.

Testen

Erstellen Sie Ihren ersten Alias

  1. Navigieren Sie zur Alias-Seite. Öffnen Sie die Alias-Verwaltungsseite:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. FĂŒgen Sie einen neuen Alias hinzu
  • Klicken Sie oben rechts auf Alias hinzufĂŒgen.
  • Geben Sie den Aliasnamen ein und passen Sie die E-Mail-Einstellungen nach Bedarf an.
  • (Optional) Aktivieren Sie die IMAP/POP3/CalDAV/CardDAV-UnterstĂŒtzung, indem Sie das KontrollkĂ€stchen aktivieren.
  • Klicken Sie auf Alias erstellen.
  1. Legen Sie ein Passwort fest
  • Klicken Sie auf Passwort generieren, um ein sicheres Passwort zu erstellen.
  • Dieses Passwort wird fĂŒr die Anmeldung bei Ihrem E-Mail-Client benötigt.
  1. Konfigurieren Sie Ihren E-Mail-Client
  • Verwenden Sie einen E-Mail-Client wie Thunderbird.
  • Geben Sie den Aliasnamen und das generierte Passwort ein.
  • Konfigurieren Sie die IMAP- und SMTP-Einstellungen entsprechend.

E-Mail-Servereinstellungen

Benutzername: <alias name>

Typ Name Inhalt TTL
A "@", "." oder leer Auto
CNAME API <DomÀnenname> Auto
CNAME caldav <DomÀnenname> Auto
CNAME carddav <DomÀnenname> Auto
CNAME Fe-Bounces <DomÀnenname> Auto
CNAME imap <DomÀnenname> Auto
CNAME mx <DomÀnenname> Auto
CNAME pop3 <DomÀnenname> Auto
CNAME SMTP <DomÀnenname> Auto
MX "@", "." oder leer mx.<DomÀnenname> (PrioritÀt 0) Auto
TXT "@", "." oder leer „v=spf1 a -all“ Auto
Typ Hostname Hafen Verbindungssicherheit Authentifizierung
SMTP smtp.<DomÀnenname> 465 SSL / TLS Normales Passwort
IMAP imap.<DomÀnenname> 993 SSL / TLS Normales Passwort

Senden/Empfangen Ihrer ersten E-Mail

Nach der Konfiguration sollten Sie in der Lage sein, E-Mails an Ihre neu erstellte und selbst gehostete E-Mail-Adresse zu senden und zu empfangen!

Fehlerbehebung

Warum funktioniert das nicht außerhalb von Ubuntu und Debian

Wir arbeiten derzeit an der UnterstĂŒtzung von macOS und werden uns auch um weitere Betriebssysteme kĂŒmmern. Bitte öffnen Sie ein Diskussion oder leisten Sie einen Beitrag, wenn Sie möchten, dass auch andere Betriebssysteme unterstĂŒtzt werden.

Warum schlÀgt die Certbot-Acme-Challenge fehl?

Die hĂ€ufigste Falle besteht darin, dass Certbot/Letsencrypt manchmal 2 Challenges anfordert. Sie mĂŒssen unbedingt BEIDE TXT-EintrĂ€ge hinzufĂŒgen.

Beispiel: Sie sehen möglicherweise zwei Herausforderungen wie diese: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Es ist auch möglich, dass die DNS-Verbreitung noch nicht abgeschlossen ist. Sie können Tools wie https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain> verwenden. Dies gibt Ihnen Aufschluss darĂŒber, ob Ihre TXT-EintragsĂ€nderungen berĂŒcksichtigt werden sollten. Es ist auch möglich, dass der lokale DNS-Cache auf Ihrem Host noch einen alten, veralteten Wert verwendet oder die letzten Änderungen nicht ĂŒbernommen hat.

Alternativ können Sie die automatisierten Cerbot-DNS-Änderungen nutzen, indem Sie die Datei /root/.cloudflare.ini mit dem API-Token in Ihren Cloud-Init-/Benutzerdaten bei der Ersteinrichtung Ihres VPS festlegen oder diese Datei erstellen und das Skript erneut ausfĂŒhren. Dadurch werden die DNS-Änderungen und Challenge-Updates automatisch verwaltet.

Wie lauten der Benutzername und das Passwort fĂŒr die Basisauthentifizierung

FĂŒr das Self-Hosting fĂŒgen wir beim ersten Mal ein natives Browser-Authentifizierungs-Popup mit einem einfachen Benutzernamen (admin) und einem zufĂ€llig generierten Passwort bei der Ersteinrichtung hinzu. Dies dient lediglich als Schutz fĂŒr den Fall, dass Automatisierungs-/Scraper-Programme Ihre Anmeldung im Web-Erlebnis ĂŒberlisten. Sie finden dieses Passwort nach der Ersteinrichtung in Ihrer Datei .env unter AUTH_BASIC_USERNAME und AUTH_BASIC_PASSWORD.

Wie erkenne ich, was ausgefĂŒhrt wird?

Sie können docker ps ausfĂŒhren, um alle laufenden Container anzuzeigen, die aus der Datei docker-compose-self-hosting.yml gestartet werden. Sie können auch docker ps -a ausfĂŒhren, um alles anzuzeigen (einschließlich nicht laufender Container).

Wie erkenne ich, ob etwas nicht lÀuft, das eigentlich laufen sollte?

Sie können docker ps -a ausfĂŒhren, um alles anzuzeigen (einschließlich nicht laufender Container). Möglicherweise wird ein Exit-Protokoll oder eine Notiz angezeigt.

Wie finde ich Protokolle

Weitere Protokolle erhalten Sie ĂŒber docker logs -f <container_name>. Falls etwas passiert ist, liegt dies wahrscheinlich an einer fehlerhaften Konfiguration der Datei .env.

Innerhalb der Web-BenutzeroberflĂ€che können Sie /admin/emails und /admin/logs fĂŒr ausgehende E-Mail-Protokolle bzw. Fehlerprotokolle anzeigen.

Warum kommt es bei meinen ausgehenden E-Mails zu einer ZeitĂŒberschreitung?

Wenn beim Verbinden mit dem MX-Server die Meldung „Verbindungs-Timeout“ angezeigt wird, sollten Sie prĂŒfen, ob Port 25 blockiert ist. ISPs oder Cloud-Anbieter blockieren diesen Port hĂ€ufig standardmĂ€ĂŸig. Sie mĂŒssen sich dann an den Support wenden oder ein Ticket erstellen, um die Sperre zu öffnen.

Welche Tools sollte ich verwenden, um Best Practices fĂŒr die E-Mail-Konfiguration und die IP-Reputation zu testen?

Schauen Sie sich unseren FAQ hier an.