Eigener Mailserver mit Postfix & Dovecot: Installation und Konfiguration

Eigener Mailserver mit Postfix & Dovecot: Installation und Konfiguration
💡
Dieser Post basiert auf einer Reihe von beiträgen
Der eigene E-Mail-Server - Simon Zipperling
Installation von Postfix als Mailserver, Dovecot für die IMAP Anbindung und weitere Erweiterungen zum besseren Nutzen eines Mailservers

Basisinformation

Ich benutze meinen Server, den ich bei 1Blu hoste, als Mailserver. Auf meinem Server läuft Proxmox und in einem eigenen LXC läuft der Mailserver. Dafür müssen die Ports freigegeben werden.

Vorbereitung

Zunächst ändert man den Hostnamen. Dieser muss dem FQDN (Fully Qualifty Domain Name) entsprechen.

hostnamectl set-hostname <fqdn>

Im weiteren muss beim Provider ein MX-Record in den DNS Einstellungen auf die Domain des Mailservers weisen. Wenn der FQDN des Mailservers mail.example.com ist und die Domain @example.com für die Mailkonten sein soll, so muss bei der Domain example.com ein MX Record auf mail.example.com gesetzt werden.

Postfix installieren

apt install postfix -y

Sollte Postfix schon installiert sein so kann man den Konfigurationsdialog mit folgendem Befehl wieder aufrufen:

dpkg-configure postfix

Nun öffnet sich ein Fenster wählt man Internet-Site aus und gibt nun bei System-Mail-Name die Stammdomain an (example.com).

Im weiteren überprüft man die Version.

postconf mail_version

Nun schaut man sich die Socket Statistics an um zu schauen ob Port 25 geöffnet wurde.

ss -lnpt | grep master

Überprüfen des Outbound für Port 25

apt install telnet
tenet gmail-smtp-in.google.com 25

Hier sollte 220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp das stehen. Der Wert 220 sagt, das der Service ok ist.

Grundkonfiguration testen

Zum Test versendet man über das System eine E-Mail an eine bestehende E-Mail-Adresse.

echo "test email" | sendmail your-account@gmail.com

Im weiteren wird mit dem Mail User Agent eine Mail verschickt. Hier können weitere Parameter, wie Absender, Betreff und ein CC verwendet werden.

apt install mailutils
mail -a FROM:account@deine-domain.com empaenger@domain.com

Danach sollte die weitere Ausgabe wie folgt aussehen

Cc:
Subject: Eine E-Mail zum verlieben
Dies ist die erste richtige E-Mail, obwohl ich die zweite E-Mail bin.

Mit STRG + D wird die E-Mail verschickt.

Maximale Größe von Anhang ändern

Erstmal lässt man sich die Größe für Anhänge anzeigen:

postconf| grep message:size_limit

Dieser liegt bei der Standardkonfiguration bei 10MB. Nun soll dieser Maximalwert auf 50MB angehoben werden.

postconf -e message_size_limit=52428800

Größe der Mailbox ändern

Zunächst, dass selbe prozetere wie bei den Anhängen, man lässt sich anzeigen, welche Größe aktuell eingestellt ist.

postconf | grep mailbox_size_limit

Hier steht oft 0, dies heißt, dass es keine Beschränkung für das Postfach gibt. Mit diesem Befehl ändert man die Größe auf 48MB.

postconf -e mailbox_size_limit=51200000

Danach wird Postfix neu gestartet.

systemctl restart postfix

Hostnamen in Postfix ändern

In der Datei /etc/postfix/main.cf wird ein Teil der Postfix Konfiguration gesichert. Hier muss die eigene Domain eingepflegt werden als Hostname.

myhostname = mail.yourdomain.com

Danach wieder neustarten.

systemctl restart postfix

E-Mail Alias erstellen

Bei Produktivsystemen sollten Alias E-Mail Adressen angelegt werden, die später E-Mails an andere Konten weitergeben.

nano /etc/aliases
postmaster: root
root: <eigenen Benutzer>

Danach muss dies neu in die Datenbank eingelesen werden

newaliases

Wenn nun eine E-Mail an postmaster@deine-domain.com geht wird diese an root@deine-domain.com geschickt. Die zweite Reihe besagt, dass alle Mails von Root an den angegebenen Benutzer geschickt werden.

E-Mail Verkehr mit TLS absichern

E-Mails sollten stehts verschlüsselt versendet werden!

Submisson Service von Postfix aktivieren

Hier stellt man die SMTP Einstellungen ein und kann hier die einzelnen Ports aktivieren.

nano /etc/postfix/master.cf

Wir fügen in die Datei folgendes ein. Damit geben wir Port 465 frei. Microsoft Outlook unterstützt Submission.

submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

Dann öffnet man den Port 587 für SMTPS

smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

Damit auch Port 25 offen ist, muss folgende Zeile für SMTP enthalten sein:

smtp     inet  n       -       y       -       -       smtpd

Nun muss der Ort, der TLS Zertifikate angegeben werden.

nano /etc/postfix/main.cf
#Enable TLS Encryption when Postfix receives incoming emails
smtpd_tls_cert_file=<PFAD><FullChain>.pem
smtpd_tls_key_file=<PFAD><PrivKey>.pem
smtpd_tls_security_level=may 
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

#Enable TLS Encryption when Postfix sends outgoing emails
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#Enforce TLSv1.3 or TLSv1.2
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

In dieser Sammlung an Befehlen muss diese beiden Zeilen geändert werden: <PFAD><FullChain>.pem <PFAD><PrivKey>.pem.

Danach wird Postfix neu gestartet.

systemctl restart postfix
ss -lnpt | grep master

Mit dem zweiten Befehl sieht man die geöffneten Ports. Das sollte so nun aussehen:

LISTEN 0      100          0.0.0.0:465       0.0.0.0:*    users:(("master",pid=24699,fd=20))                                                                                                                                                       
LISTEN 0      100          0.0.0.0:25        0.0.0.0:*    users:(("master",pid=24699,fd=13))                                                                                                                                                       
LISTEN 0      100          0.0.0.0:587       0.0.0.0:*    users:(("master",pid=24699,fd=17))

Dovecot für IMAP installieren

Dafür müssen die benötigten Pakete geladen werden:

apt install dovecot-core dovecot-imapd dovecot-lmtpd

Dovecot-Imapd ist der Service für IMAP und Dovecot-Lmtpd ist die spätere Brücke, dass E-Mails an den Message Store weitergeleitet werden.

Darauffolgend wird nun IMAP aktiviert.

nano /etc/dovecot/dovecot.conf

Dafür wird protocols = imap lmtp hinzugefügt. Das lmtp wird später für die Brücke gebraucht.

protocols = imap lmtp

Die Mailbox Location wird auch geändert, so das die E-Mails nicht mehr im Verzeichnis /var/mail/%u liegen, sondern im Maildir im vom Benutzerkonto.

sudo nano /etc/dovecot/conf.d/10-mail.conf

Dafür wird mail_location abgeändert:

mail_location = maildir:~/Maildir

Danach wird überprüft, ob folgende Zeile schon existiert. Sonst muss diese hinzugefügt werden.

mail_privileged_group = mail

Danach wird Dovecot noch in die Gruppe mail aufgenommen.

adduser dovecot mail

Im weiteren wird die Brücke zum Mailstore erstellt.

nano /etc/dovecot/conf.d/10-master.conf

Hier wird der Service LMTP so abgeändert:

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}

Damit die Brücke funktioniert, muss dies auch Postfix mitgeteilt werden.

nano /etc/postfix/main.cf

Da wird der Transport über LMTP eingefügt.

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

Dovecot Authentifikation konfigurieren

Zunächst deaktiviert man den Login ohne SSL/TLS und ändert das Username Format, da wir hier auf PAM User zugreifen und diese User keine Domainendung besitzen:

nano /etc/dovecot/conf.d/10-auth.conf

Diese Zeile wird entkommentiert:

disable_plaintext_auth = yes

Dann nach wird diese Zeile:

#auth_username_format = %Lu

So geändert:

auth_username_format = %n

Das Anmeldeverfahren muss ebenso noch geändert werden von plain auf plain login

auth_mechanisms = plain login

SSL in Dovecot konfigurieren

Öffne die /etc/dovecot/conf.d/10-ssl.conf da ändert man ssl = yes auf ssl = required. Ich benutze hier Zertifikate die ich mit Letsencrypt erstellen lasse. Dies kann man über eine DNS Challenge machen, oder über einen Webserver.

Danach müssen die SSL Zertifikate implementiert werden:

ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem

Dann wird der Chipher aktiviert und die minimum Version von SSL/TLS angegeben:

ssl_min_protocol = TLSv1.2

Der FIPS Provider muss ebenso ausgeschaltet werden:

nano /etc/openssl/openssl.cnf

Dafür wird diese Zeile aus kommentiert:

#providers = provider_sect

SASL konfigurieren

SASL ist ein Framework, welches es ermöglicht Authentifikation über Netzwerke abzusichern.

nano /etc/dovecot/conf.d/10-master.conf
service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

Auto-Create von Sent und Trash Ordnern

Dafür wird die Konfiguration um eine Zeile pro Ordner ergänzt:

nano /etc/dovecot/conf.d/15-mailboxes.conf
 mailbox Trash {
    auto = create
    special_use = \Trash
 }

Es wurde das auto = create hinzugefügt, damit diese Ordner beim Login erstellt werden. Bei den Meisten Mailclients muss sich nach der Einrichtung nochmal neu angemeldet werden, damit diese nachgeladen werden.

E-Mail Konto erstellen

Dazu erstellt man einen Systemnutzer. Dieser wird dann mit syncronisiert.

adduser user1
doveadm user '*'
systemctl restart dovecot

Postfix main.conf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

append_dot_mydomain = no

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

mynetworks = Netzwerk des Servers, 127.0.0.0/8
inet_interfaces = all
recipient_delimiter = +

compatibility_level = 2

mailbox_size_limit = 0
inet_protocols = ipv4
message_size_limit = 52428800

#OWN
myhostname = mail.domain.com
mydomain = domain.com
mydestination = $myhostname, localhost.localdomain, localhost, $mydoamin
myorigin = $mydomain



#Enable TLS Encryption when Postfix receives incoming emails
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.zipperling.net/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.zipperling.net/privkey.pem
smtpd_tls_security_level=may 
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

#Enable TLS Encryption when Postfix sends outgoing emails
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#Enforce TLSv1.3 or TLSv1.2
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1


#LMTP SUPPORT
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no