Benutzer-Werkzeuge

Webseiten-Werkzeuge


infrastruktur:mailserver

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
infrastruktur:mailserver [2020/12/22 23:54]
keno
infrastruktur:mailserver [2021/01/13 22:26] (aktuell)
keno
Zeile 1: Zeile 1:
 ====== Betrieb eines Email-Servers auf Debian 10 ====== ====== Betrieb eines Email-Servers auf Debian 10 ======
  
-===== Vorbedingungen =====+===== Vorbedingungen =====
  
 Um diese Anleitung befolgen zu können brauchst du: Um diese Anleitung befolgen zu können brauchst du:
Zeile 8: Zeile 8:
   * eine Domain für deinen Server   * eine Domain für deinen Server
  
-===== Ausgehende Emails ​=====+===== - Installation des Mail Transfer Agent =====
  
-Um Emails von deinem Server verschicken zu können, brauchst du einen Mail Transfer Agent (MTA). In dieser Anleitung benutzen wir [[https://​www.exim.org/​|Exim]]. Exim ist auf Debian normalerweise vorinstalliert. Andernfalls kann es mit dem folgenden Befehl installiert werden.+Um Emails von deinem Server verschicken ​und auf ihm empfangen ​zu können, brauchst du einen Mail Transfer Agent (MTA). In dieser Anleitung benutzen wir [[https://​www.exim.org/​|Exim]]. Exim ist auf Debian normalerweise vorinstalliert. Andernfalls kann es mit dem folgenden Befehl installiert werden.
  
-  # apt install ​exim+  # apt install ​exim4
  
 Debian kann über [[https://​wiki.debian.org/​debconf|debconf]] automatisch angepasste Konfigurationsdateien für Exim erstellen. Dies passiert entweder bei der Installation des Pakets oder nachträglich mit: Debian kann über [[https://​wiki.debian.org/​debconf|debconf]] automatisch angepasste Konfigurationsdateien für Exim erstellen. Dies passiert entweder bei der Installation des Pakets oder nachträglich mit:
Zeile 26: Zeile 26:
   System mail name: anarcode.berlin   System mail name: anarcode.berlin
  
-Als nächstes sollen wir angeben, von welchen IP-Adressen ​aus über unseren ​Server Emails ​verschickt werden dürfen. Wenn Emails beispielsweise nur innerhalb eines Netzwerks benutzt werden sollen, kann man hier die IP-Adressen des Netzwerks ​angeben. Wenn Nutzer*innen nur Emails verschicken können sollen, wenn sie direkt in eurem Server eingeloggt sind, könnte man die localhost IP-Adresse 127.0.0.1 ​angeben. In den meisten Fällen dürfte das Feld aber leer bleiben, damit alle Nutzer*innen ​von überall ​Emails verschicken ​können.+Als nächstes sollen wir angeben, von welchen IP-Adressen ​unser Server Emails ​annehmen soll. Wenn Emails beispielsweise nur innerhalb eines Netzwerks benutzt werden sollen, kann man hier die IP-Adressen des Netzwerks angeben. In den meisten Fällen dürfte das Feld aber leer bleiben, damit Emails ​von überall ​empfangen werden ​können.
  
   IP-addresses to listen on for incomming SMTP connections:​ // leer lassen   IP-addresses to listen on for incomming SMTP connections:​ // leer lassen
  
-Beim nächsten Schritt ​werden wir um etwas gefragt, was eigentlich nichts mit der Überschrift dieser Sektion (Ausgehende Emails) zu tun hat. Ein MTA kümmert sich nämlich auch um das Empfangen von Emails, die von anderen Email-Servern an unseren Email-Server geschickt werden. Hier soll nun angegeben werden, für welche Domains sich unser Server als Empfänger entsteht. Wenn unsere Nutzer*innen also Email-Adressen wie //​user@anarcode.berlin//​ haben, dann wäre hier der richtige Wert //​anarcode.berlin//​. Sollte unser Server dann eine Email bekommen, deren Empfänger bspw. //​user@gmail.com//​ ist, dann wird unser Server diese Email als falsch zurückweisen,​ weil //​gmail.com//​ eben keine akzeptierte Domain ist.+Im nächsten Schritt soll angegeben werden, für welche Domains sich unser Server als Empfänger entsteht. Wenn unsere Nutzer*innen also Email-Adressen wie //​user@anarcode.berlin//​ haben, dann wäre hier der richtige Wert //​anarcode.berlin//​. Sollte unser Server dann eine Email bekommen, deren Empfänger bspw. //​user@gmail.com//​ ist, dann wird unser Server diese Email als falsch zurückweisen,​ weil //​gmail.com//​ eben keine akzeptierte Domain ist.
  
   Other destinations for which mail is accepted: anarcode.berlin   Other destinations for which mail is accepted: anarcode.berlin
  
-Die nächsten beiden Schritte interessieren uns nur, wenn wir unseren Server als [[https://​de.wikipedia.org/​wiki/​SMTP-Relay-Server|SMTP-Relay-Server]] benutzen wollen. Wenn du diese Anleitung liest, willst du das wahrscheinlich nicht und du solltest beide Felder leer lassen.+Die nächsten beiden Schritte interessieren uns nur, wenn wir unseren Server als [[wpde>SMTP-Relay-Server|SMTP-Relay-Server]] benutzen wollen. Wenn du diese Anleitung liest, willst du das wahrscheinlich nicht und du solltest beide Felder leer lassen.
  
   Domains to relay mail for: // leer lassen   Domains to relay mail for: // leer lassen
   Machines to relay mail for: // leer lassen   Machines to relay mail for: // leer lassen
  
-Die nächste Option ist nur für [[https://​de.wikipedia.org/​wiki/​Schmalbandkommunikation#​Internetzug%C3%A4nge|Schmalband-Internetzugänge]] relevant. Also für das Internet aus den 90ern, als man sich noch über eine Telefon-Einwahlleitung mit dem Internet verbunden hat. Lasse diese Einstellung deaktiviert.+Die nächste Option ist nur für [[https://​de.wikipedia.org/​wiki/​Schmalbandkommunikation#​Internetzug%C3%A4nge|Schmalband-Internetzugänge]] relevant. Also für das Internet aus den 90ern, als man sich noch über eine Telefon-Einwahlleitung mit dem Internet verbunden hat. Wir lassen ​diese Einstellung ​daher deaktiviert.
  
   Keep number of DNS-queries minimal (Dial-on-Demand)?:​ No   Keep number of DNS-queries minimal (Dial-on-Demand)?:​ No
  
-Die folgenden beiden Seiten sind eigentlich reine Geschmackssache. Zunächst ​geht es darum, in welchem Format die empfangenen Emails auf dem Server abgespeichert werden sollen. ​Wir wählen in dieser Anleitung ​das mbox-Format. Danach ist die Frage, ob die Konfigurationsdatei in mehrere kleine Konfigurationsdateien aufgesplittert werden soll. Das beantworten wir hier mit nein.+Als nächstes ​geht es darum, in welchem Format die empfangenen Emails auf dem Server abgespeichert werden sollen. ​Maildir ist das neuere Format und hat einen Haufen an Verbesserungen gegenüber ​mbox. 
 + 
 +  Delivery method for local mail: Maildir format in home directory 
 + 
 +Danach ist die Frage, ob die Konfigurationsdatei in mehrere kleine Konfigurationsdateien aufgesplittert werden soll. Das beantworten wir hier mit nein.
  
-  Delivery method for local mail: mbox 
   Split configuration into small files?: No   Split configuration into small files?: No
  
-Nun ist dein Email-Server ​fertig eingerichtet. Nur werden die meisten deiner darüber verschickten Emails in Spam-Ordnern landen oder gar nicht erst ankommen. Damit das nicht passiert, musst du folgendes tun:+==== - Einrichtung der Domain ==== 
 + 
 +Nun ist dein Mail Transfer Agent fertig eingerichtet. Nur werden die meisten deiner darüber verschickten Emails in Spam-Ordnern landen oder gar nicht erst ankommen. Damit das nicht passiert, musst du folgendes tun:
  
   - Bei deinem Domain-Anbieter legst du einen A-Record an, der für deine Domain auf deinen Email-Server zeigt. In unserem Beispiel könnte einfach //​anarcode.berlin//​ auf die IP-Adresse unseres Email-Servers zeigen. Falls diese Domain schon auf die Adresse eines anderen Servers zeigt, können wir stattdessen bspw. //​mail.anarcode.berlin//​ benutzen.   - Bei deinem Domain-Anbieter legst du einen A-Record an, der für deine Domain auf deinen Email-Server zeigt. In unserem Beispiel könnte einfach //​anarcode.berlin//​ auf die IP-Adresse unseres Email-Servers zeigen. Falls diese Domain schon auf die Adresse eines anderen Servers zeigt, können wir stattdessen bspw. //​mail.anarcode.berlin//​ benutzen.
   - Für die in Schritt 1 benutzte Domain legst du zusätzlich einen MX Resource Record an. Dieser signalisiert,​ dass die Domain tatsächlich für Email zuständig ist.   - Für die in Schritt 1 benutzte Domain legst du zusätzlich einen MX Resource Record an. Dieser signalisiert,​ dass die Domain tatsächlich für Email zuständig ist.
   - Beim Internetanbieter deines Servers lässt du für die IP-Adresse deines Email-Servers Reverse DNS zu der in Schritt 1 und 2 benutzten Domain einrichten. Wenn du einen Server online mietest (den Internetanbieter also nicht selber kennst), schreib dazu dem Anbieter deines Servers. Unter Umständen kannst du die Einstellung auf der Webseite des Server-Anbieters sogar selber vornehmen.   - Beim Internetanbieter deines Servers lässt du für die IP-Adresse deines Email-Servers Reverse DNS zu der in Schritt 1 und 2 benutzten Domain einrichten. Wenn du einen Server online mietest (den Internetanbieter also nicht selber kennst), schreib dazu dem Anbieter deines Servers. Unter Umständen kannst du die Einstellung auf der Webseite des Server-Anbieters sogar selber vornehmen.
 +
 +==== - Ausgehende Emails testen ====
 +
 +Mit dem folgenden Shell-Skript können ausgehende Emails getestet werden. Dafür kannst du es auf dem Server einfach als //​testmail.sh//​ abspeichern und mit ''​chmod +x testmail.sh''​ sicher stellen, dass die Datei ausführbar ist.
 +
 +<file bash testmail.sh>​
 +#!/bin/sh
 +
 +read -p "​Betreff:​ " subject
 +read -p "​Empfänger*inadresse:​ " to_address
 +read -p "​Absender*inadresse:​ " from_address
 +date=$(date +'%a, %-d %b %Y %H:%M:%S %z')
 +
 +/​usr/​sbin/​sendmail $to_address <<​MAIL_END
 +Subject: $subject
 +To: $to_address
 +From: $from_address
 +Date: $date
 +
 +Dies ist eine Testnachricht
 +.
 +MAIL_END
 +</​file>​
 +
 +Anschließend kannst du das Skript mit ''​./​testmail.sh''​ ausführen (du musst das als Root-Nutzer*in tun). Das Skript fragt dich dann nach Betreff, Empfänger*in- und Absender*inadresse. Wenn du alles eingegeben hast, wird die Test-Email verschickt. Wenn alles gut gelaufen ist, sollte sie bei der angegebenen Empfänger*inadresse ankommen.
 +
 +==== - Eingehende Emails testen ====
 +
 +Du kannst testen, ob dein Server Emails empfangen kann, indem du einfach eine Email an eine Nutzer*in auf deinem Debian-System verschickst. Wenn du zum Beispiel in Debian die Nutzer*in //user// hast und die im MTA eingerichtete Domain //​anarcode.berlin//​ ist, dann kannst du eine Test-Email an //​user@anarcode.berlin//​ verschicken. Diese sollte dann im Home-Ordner der Nutzer*in im Ordner //Maildir// landen (also in der Regel ///​home/​user/​Maildir//​). Einlesen kannst du das Maildir mit dem Programm [[http://​www.mutt.org/​|mutt]].
 +
 +  # apt install mutt
 +  # mutt -f /​home/​user/​Maildir
 +
 +In mutt kannst du dann alle Emails lesen, die an die entsprechende Nutzer*in geschickt wurden.
 +
 +===== - Verschlüsselung mit TLS =====
 +
 +Bisher kann sich mit unserem MTA über SMTP nur unverschlüsselt verbunden werden. Um das zu ändern, können wir uns ein TLS-Zertifikat von [[https://​letsencrypt.org/​de/​|Let'​s Encrypt]] holen:
 +
 +  # apt install certbot
 +  # certbot certonly --standalone -d anarcode.berlin
 +
 +Statt //​anarcode.berlin//​ solltest du hier die Domain angeben, die du als MX Resource Record bei deinem Domain-Anbieter hinterlegt hast. Das generierte Zertifikat und den privaten Schlüssel müssen wir anschließend noch an die richtige Stelle für Exim kopieren und die korrekten Dateizugriffsrechte setzen. Das muss auch immer wiederholt werden, wenn das Zertifikat abgelaufen ist und in ///​etc/​letsencrypt/​live/​anarcode.berlin///​ die neuen Zertifikate liegen (//​anarcode.berlin//​ ist hier wieder mit der Domain aus dem MX Resource Record zu ersetzen).
 +
 +  # cp /​etc/​letsencrypt/​live/​anarcode.berlin/​fullchain.pem /​etc/​exim4/​exim.crt
 +  # cp /​etc/​letsencrypt/​live/​anarcode.berlin/​privkey.pem /​etc/​exim4/​exim.key
 +  # chown root:​Debian-exim /​etc/​exim4/​exim.crt /​etc/​exim4/​exim.key
 +
 +Anschließend muss in der Exim-Konfiguration noch die Benutzung von TLS aktiviert werden und die Konfiguration neu geladen werden.
 +
 +<file txt /​etc/​defaut/​exim4>​
 +...
 +SMTPLISTENEROPTIONS='​-oX 25:​587:​10025 -oP /​run/​exim4/​exim.pid'​
 +...
 +</​file>​
 +
 +  # echo "​MAIN_TLS_ENABLE = yes" >> /​etc/​exim4/​exim4.conf.localmacros
 +  # update-exim4.conf
 +  # systemctl restart exim4.service
 +
 +Der Port 587 für SMTP mit STARTTLS muss nun noch geöffnet werden. Wenn du die [[https://​wiki.debian.org/​Uncomplicated%20Firewall%20%28ufw%29|Uncomplitated Firewall (ufw)]] installiert hast, geht das mit:
 +
 +  # ufw allow 587/tcp
 +
 +<WRAP box info round>
 +Exim unterstützt keine direkte TLS-Verbindung. Die Verbindung zu Port 587 muss erst unverschlüsselt aufgebaut werden und wird dann über STARTTLS verschlüsselt,​ bevor Nutzer*innendaten ausgetauscht werden.
 +</​WRAP>​
 +
 +===== - Message Store und SMTP-Authentifizierung =====
 +
 +Bisher funktionieren Emails einwandfrei,​ solange wir sie direkt von unserem Server verschicken und direkt auf ihm lesen. So werden Emails aber üblicherweise nicht benutzt. Ein [[wpde>​Message_Store|Message Store]] kümmert sich darum, dass Nutzer*innen von ihrem Computer auf die auf dem Server gespeicherten Emails zugreifen können. In dieser Anleitung verwenden wir [[https://​www.dovecot.org/​|Dovecot]] als Message Store. Als Protokoll zum Zugriff auf das Postfach benutzen wir [[wpde>​IMAP]].
 +
 +  # apt install dovecot-core dovecot-imapd
 +
 +Auch für Dovecot müssen wir unser TLS-Zertifikat zur Verfügung stellen, damit eine verschlüsselte Verbindung möglich ist. Anschließend müssen wir den Port 993 für IMAPS öffnen.
 +
 +  # rm /​etc/​dovecot/​private/​*
 +  # ln -s /​etc/​letsencrypt/​live/​anarcode.berlin/​fullchain.pem /​etc/​dovecot/​private/​dovecot.pem
 +  # ln -s /​etc/​letsencrypt/​live/​anarcode.berlin/​privkey.pem /​etc/​dovecot/​private/​dovecot.key
 +  # systemctl restart dovecot
 +  # ufw allow 993/tcp
 +
 +Nun müssen wir Dovecot noch so konfigurieren,​ dass es die Mails von da liest, wo Exim sie hinschreibt.
 +
 +<file txt /​etc/​dovecot/​conf.d/​10-mail.conf>​
 +...
 +mail_location = maildir:​~/​Maildir
 +...
 +</​file>​
 +
 +Nun können Nutzer*innen über IMAP von ihren Computern auf die auf dem Server gespeicherten Emails zugreifen. Um vom eigenen Computer auch noch über SMTP Emails verschicken zu können, müssen wir in Exim die entsprechende Authentifizierungsmethode aktivieren. Dazu installieren wir zunächst [[wpde>​Simple_Authentication_and_Security_Layer|SASL]] und aktivieren es.
 +
 +  # apt install sasl2-bin
 +
 +<file txt /​etc/​default/​saslauthd>​
 +...
 +START=yes
 +...
 +</​file>​
 +
 +  # systemctl enable saslauthd
 +  # systemctl start saslauthd
 +
 +In ///​etc/​exim4/​exim4.conf.template//​ fügen wir nun die folgenden Linien hinzu (sind schon als Kommentar in der Datei vorhanden und wir müssen nur die # am Anfang jeder Zeile entfernen):
 +
 +<file txt /​etc/​exim4/​exim4.conf.template>​
 +plain_saslauthd_server:​
 +  driver = plaintext
 +  public_name = PLAIN
 +  server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
 +  server_set_id = $auth2
 +  server_prompts = :
 +  .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
 +  server_advertise_condition = ${if eq{$tls_in_cipher}{}{}{*}}
 +  .endif
 +</​file>​
 +
 +Schließlich müssen wir noch die Nutzer*in //​Debian-exim//​ zur Gruppe //sasl// hinzufügen und die Exim-Konfiguration neu laden.
 +
 +  # usermod -aG sasl Debian-exim
 +  # update-exim4.conf
 +  # systemctl restart exim4.service
 +
 +Damit sind wir mit diesem Abschnitt fertig. Alle Nutzer*innen des Debian-Systems sollten nun mit ihren normalen Zugangsdaten von ihren Computern aus Emails verschicken und empfangen können. Dazu können sie IMAP mit TLS auf Port 993 und SMTP mit STARTTLS auf Port 587 benutzen. Die Authentifizierungsmethode ist PLAIN, der anzugebende Nutzer*inname ist der, den die Nutzer*in auch auf dem Debian-Server hat.
 +
 +===== - Email-Nutzer*innen ohne Zugriff auf den Server =====
 +
 +Mit den folgenden Befehlen kann eine Nutzer*in mit dem Namen //anna// hinzugefügt werden, die einen Mailaccount benutzen kann, sich allerdings im Server nicht einloggen kann (bspw. per SSH):
 +
 +  # useradd --create-home anna
 +  # passwd anna
 +  # usermod -s /​usr/​sbin/​nologin anna
 +
 +Der Account von //anna// ist dann also ein reiner Email-Account.
infrastruktur/mailserver.1608677677.txt.gz · Zuletzt geändert: 2020/12/22 23:54 von keno