Eigener Mailserver mit Postfix & Dovecot: Installation und Konfiguration
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