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