Der einfachste Weg, einen sicheren IMAP-E-Mail-Server einzurichten? [geschlossen]


17

Ich möchte Google als E-Mail-Anbieter loswerden und eine vollständige E-Mail-Lösung auf meinem dedizierten Server einrichten. Das Problem: Ich möchte, dass das Setup so einfach wie möglich ist, damit es nicht mühsam ist, bei Problemen alles neu einzurichten.

Voraussetzungen

  • Nur ein Benutzerkonto auf dem Computer.
    • (Name diti; Haupt-E-Mail kra@diti.me; andere Aliase werden umgeleitet, aber ein E-Mail-Client kann die verschiedenen Aliase verwalten und entsprechend reagieren)
  • Benutzt vorzugsweise kein MySQL.
    • (Im Falle von Datensicherung und Wiederherstellung sowie der Einfachheit halber ist es besser, wenn Sie MySQL nicht installieren und sichern müssen, bevor Sie einen funktionsfähigen E-Mail-Server erhalten.)
  • Auf E-Mails kann von außen zugegriffen werden (IMAP und SMTP).
  • SSL / TLS-Verschlüsselung für die IMAP- und SMTP-Authentifizierung (Ich verwende CAcert- Zertifikate, ist das wichtig?).

Ich glaube, dass Einfachheit, IMAP / SMTP-Zugriff und sichere Authentifizierung die "grundlegenden" Funktionen sind, die jeder, der Google verlassen möchte, oder was auch immer, haben möchte. Wenn ich mich irre und es eine einfachere Lösung gibt (zum Beispiel eine ownCloud-ähnliche Lösung mit allem, was dazu gehört), würde ich mich freuen zu hören.

Ich denke, die Kombination von Postfix und Dovecot wäre der richtige Weg. Übrigens leite ich Debian.

Die Infos habe ich bisher gefunden

  • In einem französischen Artikel wird sehr ausführlich beschrieben, wie eine vollständige und sichere E-Mail-Lösung eingerichtet wird. Es ist langwieriger, schwerer zu warten, schwerer zu sichern und wiederherzustellen usw. Ist außerdem ein DNS-Cache erforderlich?
  • Das Gentoo-Wiki ( Complete_Virtual_Mail_Server/SSL_CertificatesSeite) erwähnt die Verwendung von CAcert-Zertifikaten, ist sich aber weder darüber im Klaren (sind all diese SubjectAltNameSubdomains notwendig?) Noch über Postfix (ich habe gelesen, dass Courier schwieriger ist).
  • Verschiedene Tutorials zum Thema Selbsthosting, die alle unterschiedlich sind und nur selten beschreiben, was sie tun und warum (selbst gehostete E-Mails mit Fernzugriff scheinen kompliziert einzurichten zu sein. Warum also nur eine Liste von Befehlen ohne Erklärung für "Dummies" bereitstellen?) .

Ich hoffe, ich habe die richtigen Dinge gefragt, und dass sie nicht zu albern sind.


1
Irgendeine Idee, wie diese Frage umformuliert und wieder geöffnet werden könnte?
Diti

Antworten:


19
  • Nein, es ist nicht erforderlich, einen DNS-Cache auf dem Server einzurichten. Der Server sollte einen Cache-DNS-Resolver verwenden, der sich in der Nähe befindet. Die meisten Hosting-Unternehmen führen jedoch bereits eigene Resolver für das gesamte Rechenzentrum aus und konfigurieren die Server so, dass sie diese standardmäßig verwenden.

  • Standardmäßig verwenden sowohl Postfix als auch Dovecot für alles lokale Konten. Wenn Sie ein Linux-Konto mit dem Namen haben diti, können Sie sich mit diesem bei Dovecot anmelden und Postfix so einrichten, dass SMTP-Anmeldungen gegen Dovecot validiert werden .

  • Wenn Sie keine Probleme damit haben, dass alle E-Mails an dasselbe Konto gesendet werden, können Sie einfache Aliase (wie in, /etc/aliases) einrichten , um E-Mails für kra@oder postmaster@an das ditiKonto umzuleiten .

  • Alle diese subjectAltNames sind nicht erforderlich. Die einzigen, die Sie benötigen, sind Domainnamen, die Sie tatsächlich verwenden werden , z . B. mail.diti.meoder glaux.diti.me. Ich bin nicht sicher, ob Sie die Domain selbst (dh diti.me) einschließen müssen .


Im Folgenden wird davon ausgegangen, dass in der Domäne bereits MX-Einträge konfiguriert sind, die auf diesen Server verweisen. Ich versuche im Allgemeinen, meine Konfiguration einigermaßen klar zu halten, da ich mich einige Monate später immer wieder frage, "wozu zum Teufel das ist".

1. Installieren Sie zuerst die Pakete postfixund dovecot-imapd. Wenn Sie zur Postfix-Konfiguration aufgefordert werden, wählen Sie die Option "Internet Site" und geben Sie diti.meden E-Mail-Namen ein. Zu diesem Zeitpunkt können Sie bereits E-Mails senden und empfangen diti@diti.meund möglicherweise sogar eine Verbindung zu IMAP herstellen.

Es verfügt jedoch noch nicht über SSL und ermöglicht weder das Senden von E-Mails über SMTP von außen noch das Speichern von E-Mails an einem vernünftigen Ort (die Standardeinstellung ist eine Mbox-Datei in /var/mail, die unzuverlässig ist und insbesondere mit IMAP eine schlechte Leistung erbringt).

2. Wenn Sie bereits ein SSL-Zertifikat haben, geben Sie es /etc/ssl/private/diti.me.pemund den privaten Schlüssel ein /etc/ssl/private/diti.me.key. Der genaue Ort spielt eigentlich keine Rolle, aber /etc/ssl/privatedort werden sie von Debian aufbewahrt.

Stellen Sie sicher, dass beide Dateien Eigentum der ssl-certGruppe sind und von dieser gelesen werden können, damit Postfix und Dovecot darauf zugreifen können. Fügen Sie dieser Gruppe auch die Konten beider Dämonen hinzu, indem Sie verwenden gpasswd -a.

3. Debians automatisch generiertes Postfix main.cfist ebenfalls ein bisschen chaotisch, deshalb werde ich nur eine aufgeräumte Minimalversion veröffentlichen:

# Serverinformation
mydomain = diti.me
Myorigin = $ mydomain
  # Verschiedene andere Parameter verwenden diese beiden Variablen als Standardwerte.

# SMTP-Dienst
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Dadurch kann STARTTLS für alle eingehenden SMTP-Verbindungen verwendet werden.
  # Beachten Sie, dass `postfix` zur Gruppe` ssl-cert` hinzugefügt werden muss, damit dies möglich ist
  # um auf Dateien in / etc / ssl / private zuzugreifen.

# Richtlinien
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0‹/104
  # Dies listet die IP-Adressen auf, die als "vertrauenswürdig" gelten und verwendet werden können
  # diesen Server, um E-Mails nach außen zu senden (dh an andere Domains). Durch
  # Standardmäßig ist nur "localhost" zulässig. Von allen anderen nur Mail an
  # Domains in $ mydestination werden akzeptiert.
mydestination = $ mydomain, localhost
  # Liste der Domänen, für die E-Mails von einer beliebigen IP-Adresse akzeptiert werden sollen. 
# Lieferung
alias_maps = hash: / etc / alias
  # Dadurch werden systemweite Aliase beibehalten. Es ist gut, es explizit festzulegen, weil
  # Der Standardwert enthält manchmal NIS, was keinen Sinn ergibt.
recipient_delimiter = +
  # Weist postfix an, den lokalen Teil der Adressen beim ersten '+' aufzuteilen.
  # Sogenannte "Plus-Adressierung": Mail an diti + foo @ wird zugestellt
  # an die diti @ mailbox.

Für Dovecot verwendet Debian nur die Standard-Beispielkonfigurationen und sie sind mit jeder beschriebenen Option gut genug.

Wenn Sie die Konfiguration ändern, laden Sie die Daemons mit postfix reloadund / oder neu doveadm reload.

4. Standardmäßig liefert Postfix E-Mails /var/mail/$USERim Mbox- Format aus, das einfach genug ist (Sie können es problemlos mit einem Texteditor anzeigen), es treten jedoch viele Probleme auf, insbesondere bei IMAP, da die gesamte Datei jedes Mal neu geschrieben werden muss, wenn Sie eine E-Mail verschieben Nachricht oder markieren Sie eine als "gelesen" oder "ungelesen".

Ändern Sie beide Daemons, um Maildir zu verwenden. (Es gibt andere Formate, diese sind jedoch in der Regel spezifisch für den MTA- oder MDA- oder IMAP-Server oder was auch immer. Maildir wird weitgehend unterstützt.)

In /etc/postfix/main.cfFügen Sie die folgende auf die „Delivery“ Abschnitt:

home_mailbox = Mail /

Konfigurieren Sie Dovecot so, dass derselbe Pfad verwendet wird /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. Irgendwann müssen Sie Dovecot anweisen, auch SSL zu verwenden. Die entsprechenden Einstellungen sind in /etc/dovecot/conf.d/10-ssl.conf. Tatsächlich verwendet das Debian-Paket für Dovecot bereits SSL, obwohl ein selbstsigniertes Zertifikat meistens unbrauchbar ist. Konfigurieren Sie es so, dass es Ihr eigenes Zertifikat verwendet:

ssl = ja

ssl_cert = </etc/ssl/private/diti.me-mail.pem
ssl_key = </etc/ssl/private/diti.me-mail.key

6. Jetzt können Sie E-Mails nach außen senden und empfangen. Es ist weiterhin erforderlich, Postfix so zu konfigurieren, dass Sie von außen senden können, indem Sie eine Verbindung mit Ihrem E-Mail-Client über SMTP herstellen.

Weisen Sie Postfix zunächst an, Dovecot zur Überprüfung der Anmeldungen zu verwenden. Die folgenden Anweisungen stammen größtenteils aus Dovecots Wiki .

Dovecot /etc/dovecot/conf.d/10-master.confmuss einen Socket abhören, auf den Postfix zugreifen konnte. Die Standardkonfiguration enthält bereits ein auskommentiertes Beispiel:

Serviceauth {
    ...
    unix_listener / var / spool / postfix / private / auth {
        mode = 0660
        Benutzer = Postfix
        Gruppe = Postfix
    }
    ...
}

Und Postfix muss es verwenden - /etc/postfix/main.cfwieder:

# Authentifizierung
smtpd_sasl_type = Taubenschlag
smtpd_sasl_path = private / auth
  # Der andere mögliche Typ ist "cyrus", für die Cyrus SASL "saslauthd"
  # Daemon. Ich wähle hier Dovecot, da es gut als SASL-Server funktioniert, und
  # Es ist einfacher, die Authentifizierung für beide Daemons durchführen zu lassen.

7. Beachten Sie, dass das oben Gesagte smtpd_sasl_auth_enablenirgendwo eingestellt wurde. Die aktuelle Konvention ist nicht SMTP - Auth global zu aktivieren, aber / 25 zu halten tcp rein als „Server-zu-Server“ SMTP - Port. Währenddessen werden neue Nachrichten von Benutzern über SMTP auf tcp / 587, dem "Mail Submission" -Port, akzeptiert, für den eine Authentifizierung erforderlich ist. Einige ISPs blockieren TCP / 25 sogar wegen Spam, lassen TCP / 587 jedoch offen, da es normalerweise besser gesichert ist.

Aktivieren Sie den "Submission" /etc/postfix/master.cf-Port mit SASL-Authentifizierung. Die Standardeinstellung enthält master.cfbereits die erforderlichen Zeilen, die nur unkommentiert sein müssen, obwohl einige von ihnen weiterhin weggelassen werden sollten.

Einreichung inet n - - - - smtpd
  -o Syslog-Name = Postfix / Submission
  -o smtpd_tls_security_level = verschlüsseln
    # Der "Submission" -Port erfordert TLS, anstatt ihn optional zu machen
  -o smtpd_sasl_auth_enable = yes
    # ... sowie Benutzern erlauben, sich einzuloggen.
# -o smtpd_reject_unlisted_recipient = no
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
    # Diese vier Optionen können auskommentiert werden. Wenn aktiviert, würden sie
    # Erwarten Sie, dass Sie benutzerdefinierte Einschränkungsregeln in 'main.cf' festlegen
    # Standardeinstellungen sind in Ordnung.
  -o smtpd_recipient_restrictions = permit_sasl_authenticated, ablehnen
    # Die Standard-Empfängerbeschränkungen überprüfen die IP-Adresse und
    # $ meinZiel. Lassen Sie für den Port "Submission" alles so lange zu
    # Wenn der Benutzer angemeldet ist, lehnen Sie jedoch alle anonymen E-Mails ab.
  -o milter_macro_daemon_name = URSPRUNG
    # Wenn Sie sich später entscheiden, einen DKIM-Proxy oder einen solchen einzurichten, ist dies zulässig
    # it, um vom Benutzer übermittelte E-Mails von empfangenen E-Mails zu unterscheiden.
    # Es ist Teil der Standardkonfiguration, daher auch hier enthalten.

Wenn Sie einen Mail-Client haben, der einen alten "impliziten SSL" -Port (tcp / 465) benötigt, können Sie die smtpsZeilen aus dem Kommentar entfernen. master.cfWenn Sie dies tun, behalten Sie die Einstellungen bei, die submissiondenen des Ports ähneln .

8. Richten Sie schließlich Aliase für Ihr Konto ein, indem Sie sie bearbeiten /etc/aliases. Der postmasterAlias ​​ist grundsätzlich erforderlich; Es ist die Anlaufstelle, wenn Probleme mit Ihrem Mailserver auftreten. Zeigen rootund andere ähnliche Aliase sind auch gut.

Das Grundformat ist in Aliases (5) dokumentiert:

postmaster: root
admin:      root
root:       diti
kra:        diti

Verwenden Sie postaliasoder newaliases, um die Hash-Datenbank /etc/aliases.dbjedes Mal zu aktualisieren, wenn Sie diese Datei bearbeiten.

Jetzt haben Sie noch ein Konto, ditidas für Postfix und Dovecot aufgerufen wird , aber die an gesendete E-Mail kra@...wird ebenfalls dort weitergeleitet. Einige Mail-Clients (z. B. Thunderbird) unterstützen mehrere "Identitäten" oder "Personas" für einen einzelnen Mail-Server, sodass Sie zwischen verschiedenen "Von:" - Adressen wählen können.

Das ist alles. Möglicherweise werde ich später Anweisungen für procmail, virtuelle Domänen, SPF und / oder DKIM zurückgeben.


1
Das ist großartig ! Es ist wirklich das einfachste Tutorial zum Thema E-Mail-Selbsthosting. Der Teil, der mich am meisten erstaunt hat, war zu sehen, dass ich in der Tat bereits E-Mails von meinem / zu meinem Server senden und empfangen konnte. Wie auch immer, ich werde Ihre Nachricht bearbeiten, um einige Punkte zu klären! Es gelingt mir jedoch nicht, meine E-Mail von außen einzurichten (ich meine Thunderbird). Ich verwende mail.diti.me(= die IP-Adresse meines Servers) sowohl für IMAP als auch für SMTP, meine Domain verfügt bereits über die MX-Einträge. Habe ich beim Einrichten meines Servers etwas falsch gemacht oder habe ich nur Thunderbird-Probleme?
Diti

@Diti: Anscheinend sind alle relevanten Ports (außer TCP / 25) auf Ihrem Server durch eine Firewall geschützt .
Grawity

Was soll der Output ps auxw | grep "dovecot"sein? Ich habe es mit einem der komplexen Setups meines Freundes verglichen, und er hat dovecot-authund imap-logindas habe ich nicht. Könnte es möglich sein, dass die Ports tatsächlich offen sind (ich erinnere mich nicht, dass ich eine Firewall verwendet habe), aber kein Dämon eingestellt ist, um diese Ports von außen abzuhören, oder so? Wenn ich openssl s_client -connect mail.diti.me:993auf dem Server laufe , funktioniert es (und sagt "Dovecot ready."), Aber nichts von außen. Vielleicht sollte ich versuchen, eine Firewall zu installieren und diese Ports explizit zuzulassen?
Diti

@Diti: Dovecot Architektur verändert sich erheblich zwischen v1 und v2, so dass Sie verschiedene Prozesse sehen werden - in v2, werde da sein dovecot, dovecot/anvil, dovecot/logund andere. Außerdem werden einige Prozesse nur gestartet, wenn eine Verbindung hergestellt wird oder wenn Authentifizierungsdetails überprüft werden.
Grawity

1
@Diti: Nein, beide Daemons überwachen standardmäßig alle Schnittstellen und Adressen. Die Verbindungen werden jedoch nicht abgelehnt. Stattdessen verwirft der Server stillschweigend alle Verbindungsversuche (siehe den von mir verknüpften nmap-Scan), was ein sicheres Zeichen für eine Firewall ist. Versuchen Sie mit iptables -n -v -Lzu überprüfen, ob es Regeln zum Verwerfen von Paketen gibt.
Grawity
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.