Linux
0

Postfix-Mailserver unter Debian 13 einrichten

In diesem Beitrag richten wir gemeinsam einen Mailserver mit Postfix ein.
Als Grundlage dient ein VPS-Server mit Debian 13, der bereits die grundlegende Systemkonfiguration enthält – wie im Beitrag „Linux-Server: Grundkonfiguration“ beschrieben.

Postfix ist ein sogenannter Mail Transfer Agent (MTA). Er ist dafür zuständig, E-Mails anzunehmen, zu verarbeiten und an andere Mailserver weiterzuleiten. Postfix gilt als besonders zuverlässig, sicher und performant und ist daher auf vielen Linux-Servern die bevorzugte Wahl.

PTR-Record prüfen

Bevor wir mit der Installation beginnen, solltest du sicherstellen, dass der PTR-Record (Reverse DNS) korrekt gesetzt ist.
Der PTR-Eintrag verknüpft deine öffentliche IP-Adresse mit dem Hostnamen deines Servers. Viele Mailserver lehnen Verbindungen von Servern ohne gültigen PTR-Eintrag ab, da diese häufig als Spam-Versender eingestuft werden.

Du kannst den PTR-Record ganz einfach mit dem vorinstallierten host-Befehl prüfen:

host <deine_IP>

Erwartete Ausgabe:

15.113.0.203.in-addr.arpa domain name pointer host01.meine-domain.de.

Das am Ende angezeigte host01.meine-domain.de. ist der PTR-Record und sollte dem Hostnamen deines Servers entsprechen.

Falls der Eintrag nicht stimmt, kannst du ihn im Verwaltungsbereich deines Hosting-Anbieters anpassen (z. B. IONOS, Hetzner, Netcup etc.).
Er muss exakt dem Hostnamen entsprechen, den du später in Postfix einträgst.

Installation von Postfix

Nachdem der PTR-Record korrekt gesetzt ist, können wir mit der Installation von Postfix beginnen. Unter Debian 13 lässt sich Postfix ganz einfach über die Paketverwaltung installieren:

sudo apt update
sudo apt install postfix

Während der Installation öffnet sich ein Konfigurationsdialog. Dort wirst du gefragt, welche Art der Mailserver-Konfiguration du verwenden möchtest.

Wähle hier:

→ Internet-Site

Damit wird Postfix so eingerichtet, dass es E-Mails direkt über das Internet sendet und empfängt – also ideal für unseren Mailserver.

Anschließend wirst du nach dem System mail name gefragt.
Hier gibst du den vollständigen Hostnamen deines Servers ein, also zum Beispiel:

host01.meine-domain.de

Dieser Name wird später auch im SMTP-Banner deines Mailservers erscheinen und sollte mit dem PTR-Record übereinstimmen.

Installation prüfen

Nach Abschluss der Installation kannst du überprüfen, ob Postfix aktiv ist:

sudo systemctl status postfix

Wenn alles korrekt installiert wurde, sollte der Dienst mit dem Status active (running) angezeigt werden.

Du kannst außerdem testen, ob Postfix korrekt auf Port 25 (SMTP) lauscht:

sudo ss -tlnp | grep :25

Ausgabe-Beispiel:

LISTEN 0 100 0.0.0.0:25   0.0.0.0:*  users:(("master",pid=1234,fd=13))

Damit ist die Grundinstallation abgeschlossen und Postfix bereit für die weitere Konfiguration (z. B. TLS-Verschlüsselung, Authentifizierung, Spam-Schutz usw.).

Grundkonfiguration von Postfix

Nach der Installation von Postfix schauen wir uns nun die grundlegende Konfiguration an, damit sich der Server korrekt im Internet präsentiert und E-Mails zuverlässig annehmen und versenden kann.

Die zentrale Konfigurationsdatei von Postfix befindet sich unter:

/etc/postfix/main.cf

Öffne sie mit einem Editor deiner Wahl, z. B.:

sudo nano /etc/postfix/main.cf

Hier kannst du die wichtigsten Einstellungen überprüfen und bei Bedarf anpassen.

Konfiguration im Auslieferungszustand

# Kompatibilitätslevel für Postfix-Konfigurationen.
# Empfehlenswert ist der Standardwert, der zu deiner Debian-Version passt.
compatibility_level = 3.9

# Domainname, der für lokale System-E-Mails verwendet wird (z. B. von root).
# Inhalt kommt aus /etc/mailname.
myorigin = /etc/mailname

# Text, den der SMTP-Server im Banner anzeigt.
smtpd_banner = $myhostname ESMTP $mail_name (Debian)

# IPv4 und IPv6 aktivieren (all = beide Protokolle).
inet_protocols = all

# Legt fest, welche Hosts als vertrauenswürdig gelten.
# "host" bedeutet: nur der Server selbst.
mynetworks_style = host

# Liste der vertrauenswürdigen IP-Bereiche.
# 127.0.0.0/8 = IPv4 localhost, ::1 = IPv6 localhost.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

# Verzögert Warnungen an den Absender, wenn Zustellung lange dauert.
# Standard deaktiviert. (Optional)
#delay_warning_time = 4h

# Liste von Domains, für die der Server lokal Mails annimmt.
# Muss Hostname + Hauptdomain enthalten.
mydestination = $myhostname, host01.meine-domain.de, localhost.meine-domain.de, , localhost

# Maximale Größe von Mailboxen (0 = unbegrenzt).
mailbox_size_limit = 0

# Externes Kommando für die Zustellung in Mailboxen.
# Wird heute selten benötigt; Standard ist deaktiviert.
mailbox_command =

# Pfade zu Alias-Datenbanken für lokale Weiterleitungen.
alias_maps = hash:/etc/aliases

# Alias-Datenbank, die beim Befehl "newaliases" aktualisiert wird.
alias_database = hash:/etc/aliases

# Biff war ein altes Benachrichtigungssystem für neue E-Mails.
# Heutzutage nicht mehr relevant → deaktiviert.
biff = no

# Trennzeichen für Adress-Erweiterungen (user+info@domain).
recipient_delimiter = +

# Weiterleitungsserver (SMTP-Relay), falls vorhanden.
# Leer = direkte Zustellung ins Internet.
relayhost =

# Speicherort der SASL-Konfiguration für SMTP-Authentifizierung.
# Wird später relevant, wenn SASL aktiviert wird.
cyrus_sasl_config_path = /etc/postfix/sasl

# TLS-Schlüssel und Zertifikat des SMTP-Servers (Server-Zertifikat).
# Aktuell: Snakeoil-Zertifikat (Platzhalter) → später unbedingt ersetzen.
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem

# TLS-Sicherheitslevel für eingehende Verbindungen:
# may = TLS wird unterstützt, aber nicht erzwungen.
# encrypt = TLS wird erzwungen.
smtpd_tls_security_level = may

# Liste vertrauenswürdiger CA-Zertifikate für den SMTP-Client.
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

# TLS-Sicherheitslevel für ausgehende Verbindungen.
smtp_tls_security_level = may

# Cache-Datenbank für TLS-Sessions (Performance-Optimierung).
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Regeln, die festlegen, wann der Server Mails annimmt oder ablehnt.
# permit_mynetworks = vertrauenswürdige Hosts dürfen relayn
# permit_sasl_authenticated = authentifizierte Nutzer dürfen relayn
# defer_unauth_destination = alle anderen abweisen
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

# Vollständiger Hostname des Servers (FQDN), muss zum PTR passen!
myhostname = host01.meine-domain.de

# Server soll auf allen Netzwerkschnittstellen lauschen.
inet_interfaces = all

Datei /etc/mailname richtig setzen

Die Datei /etc/mailname definiert den Standard-Absender-Domainnamen für System-E-Mails, die vom Server selbst gesendet werden, z. B. durch cron, logrotate oder lokale Benutzerkonten.

In dieser Datei steht nicht der Hostname des Servers, sondern die Absenderdomain, die in E-Mails erscheinen soll.

Beispielinhalt:

meine-domain.de

Damit werden lokale Systemmails (z. B. von root) automatisch mit dem Absender
root@meine-domain.de verschickt.

Empfohlene Kombination

  • myhostname: host01.meine-domain.de
  • /etc/mailname: meine-domain.de

Diese Kombination ist gängig und RFC-konform:
Der Server identifiziert sich gegenüber anderen Mailservern mit seinem vollständigen Hostnamen (host01.meine-domain.de),
verwendet für Absenderadressen aber die Hauptdomain (meine-domain.de), was professioneller wirkt.

Nach einer Änderung der Datei sollte Postfix neu gestartet werden:

sudo systemctl restart postfix

Meine Änderungen in der Konfiguration

# Hauptdomain, für die der Server E-Mails annimmt
mydomain = meine-domain.de

# Aufgeräumtes und sicheres SMTP-Banner
# (Keine Versionen, keine unnötigen Informationen)
smtpd_banner = $myhostname ESMTP

# Anpassen der Liste von Domains, für die der Server lokal Mails annimmt
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# HELO/EHLO muss gesetzt sein
smtpd_helo_required = yes

# VRFY deaktivieren
disable_vrfy_command = yes

Zunächst definiere ich mit mydomain die Hauptdomain, für die der Server E-Mails annehmen soll. Anschließend passe ich das SMTP-Banner an, sodass Postfix sich sauber und ohne unnötige Informationen gegenüber anderen Mailservern meldet.

Damit Postfix weiß, für welche Domains es E-Mails lokal zustellen soll, erweitere ich die Variable mydestination um die Hauptdomain. Zusätzlich aktiviere ich zwei kleine, aber sinnvolle Sicherheitsoptionen: smtpd_helo_required sorgt dafür, dass sich andere Mailserver korrekt identifizieren müssen, und disable_vrfy_command verhindert das Abfragen oder Erraten von lokalen E-Mail-Adressen.

Zum Abschluss muss Postfix neu gestartet werden, damit die Änderungen aktiv werden.

sudo systemctl restart postfix

Damit ist dein Server in seiner Grundkonfiguration vollständig eingerichtet und kann Mails annehmen und versenden.
Im nächsten Schritt kümmern wir uns um die TLS-Verschlüsselung, damit deine Verbindungen abgesichert sind und andere Mailserver deinen Host als vertrauenswürdig einstufen.

Mailversand testen

Nachdem die Grundkonfiguration abgeschlossen ist, können wir testen, ob der Server E-Mails erfolgreich versenden kann. Dazu installieren wir zunächst das Paket mailutils, das das Kommando mail bereitstellt:

sudo apt install mailutils

Jetzt senden wir eine einfache Testmail:

echo "Dies ist eine Test-E-Mail vom Postfix-Server." | mail -s "Postfix Test" deine@mailadresse.de

Da Debian 13 standardmäßig journald verwendet, befinden sich Postfix-Logs nicht mehr in /var/log/mail.log, sondern im Systemd-Journal.
Die E-Mail-Logs siehst du daher mit:

sudo journalctl -u postfix -f

Ein erfolgreicher Versand sieht zum Beispiel so aus:

postfix/smtp[1234]: ABCDE12345: to=<deine@mailadresse.de>, relay=mx.example.com[1.2.3.4]:25, status=sent (250 2.0.0 OK)

Wenn der Status sent (250 OK) erscheint, funktioniert der Mailversand wie erwartet.
Beachte jedoch, dass viele Provider E-Mails zu diesem Zeitpunkt noch ablehnen oder als Spam markieren, solange keine TLS-Konfiguration, SPF, DKIM und DMARC aktiv sind – das folgt später im Tutorial.

Inhalt

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.