linux-ubuntu-debian mail postfix security smtp mta

Postfix Mail Server: Setup & Hardening (Artikel 033)

Konfiguration von Postfix als Mail Transfer Agent (MTA). Sicheres Relaying, Spam-Abwehr und die Implementierung von Verschlüsselung für den Enterprise-Mailversand.

# Postfix Deep Dive: Sicherer Mailversand im Enterprise

TL;DR / Management Summary Postfix ist der De-facto-Standard für Mail Transfer Agents (MTA) unter Linux. Ob für System-Benachrichtigungen, automatisierte Reports oder als vollwertiger Mailserver: Ein falsch konfigurierter Postfix ist eine Gefahr (Spam-Relay). Wir fokussieren uns auf das Härten der SMTP-Kommunikation, das Relaying über Smarthosts (z.B. Office 365 / SendGrid) und die Einhaltung moderner Sicherheitsstandards (TLS).


# 1. Einführung & Architektur

Der Weg der E-Mail.

Postfix ist modular aufgebaut. Jede Aufgabe (Empfang, Versand, Queue-Management) wird von einem eigenen Prozess übernommen.

graph LR
    A[App / Local Cron] -->|sendmail binary| B[Postfix Master]
    B --> C[Cleanup / Rewrite]
    C --> D[Queue Manager]
    D -->|SMTP Protocol| E[External MTA]
    F[Internet MTA] -->|Port 25| B

# 2. Grundkonfiguration

Postfix als “Internet Site” vs. “Satellite”.

# Installation

sudo apt update
sudo apt install postfix mailutils

Wählen Sie im Dialog “Internet Site”, wenn der Server direkt Mails senden soll, oder “Satellite system”, wenn er alles an einen zentralen Hub weiterleitet.

# Die Hauptdatei (/etc/postfix/main.cf)

Ein sauberes Minimal-Setup:

myhostname = server01.company.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost = [smtp.sendgrid.net]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all

# 3. Smarthost & Authentifizierung

Mails sicher über Provider versenden.

In Zeiten von strengen SPF/DKIM Regeln landen Mails von dynamischen IPs sofort im Spam. Die Lösung: Ein Smarthost.

# SASL Auth einrichten

Datei: /etc/postfix/sasl_passwd

[smtp.sendgrid.net]:587  apikey:SG.your_api_key_here

Danach Hash-Datenbank bauen:

sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd*

# 4. Hardening & Security

Kein Einfallstor für Spammer werden.

# TLS Verschlüsselung erzwingen

Verhindern Sie das Mitlesen von Mails auf der Leitung.

# In main.cf
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_loglevel = 1

# SPF, DKIM & DMARC (Die Theorie)

Postfix sendet die Mails, aber der DNS-Record entscheidet über die Zustellung.

  • SPF: “Wer darf für meine Domain senden?”
  • DKIM: Digitale Signatur des Mail-Headers.
  • DMARC: Anweisung an den Empfänger, was bei SPF/DKIM Fehlern zu tun ist.

Wichtig: Stellen Sie sicher, dass inet_interfaces = loopback-only gesetzt ist, wenn der Server nur Mails versenden (und nicht empfangen) soll. Ein offenes Port 25 ohne Auth ist ein Sicherheitsrisiko!


# 5. Troubleshooting & “War Stories”

Wenn die Mail nicht ankommt.

# Warteschlange (Queue) verwalten

# Zeige alle Mails in der Warteschlange
mailq

# Lösche eine hängende Mail
postsuper -d <Queue-ID>

# Versuche alle Mails sofort zuzustellen
postqueue -f

# Story 1: “Der volle Mail-Speicher”

Symptom: System-Skripte werfen Fehler, Logs zeigen “No space left on device” in /var/spool/postfix. Ursache: Ein Cronjob erzeugt tausende Fehlermeldungen, die an root@localhost gesendet werden, aber nicht zugestellt werden können (Bounce-Loop). Lösung: /etc/aliases prüfen. Leiten Sie root immer an eine echte E-Mail-Adresse weiter und leeren Sie die Queue mit postsuper -d ALL.


# 6. Fazit & Empfehlung

  • Minimieren: Installieren Sie Postfix nur, wenn der Server wirklich Mails senden muss.
  • Provider: Nutzen Sie für geschäftskritische Mails immer einen Relay-Dienst (Smarthost).
  • Aliase: Pflegen Sie die /etc/aliases, damit System-Warnungen auch wirklich gelesen werden.

# Anhang: Cheatsheet

Aufgabe Befehl
Config neu laden sudo systemctl reload postfix
Logs live verfolgen tail -f /var/log/mail.log
Test-Mail senden `echo “Inhalt”
Datenbanken bauen newaliases
Postfix Version postconf mail_version