Postfix on RHEL: Mail Transfer Agent (Artikel 099)
Konfiguration von Postfix unter RHEL. Erfahren Sie alles über das alternatives-System, die Integration in firewalld und das Härten des Mail-Versands mittels SELinux.
# Postfix on RHEL: Sicherer Mail-Versand im Red Hat Standard
TL;DR / Management Summary In RHEL ist Postfix der Standard-MTA (Mail Transfer Agent). Ein Senior Admin muss wissen, dass RHEL über das alternatives-System verfügt, um zwischen verschiedenen MTAs (wie Sendmail oder Postfix) zu wechseln. Zudem erfordert der Betrieb von Postfix auf RHEL eine präzise Abstimmung mit der Firewalld (Port 25/587) und die Beachtung von SELinux-Kontexten für Mail-Spools und Aliase.
# 1. Einführung & Architektur
Die RHEL Mail-Struktur.
Postfix in RHEL ist hochgradig modular und wird über systemd verwaltet.
# Die Komponenten (Mermaid)
graph LR
A[Applikation: PHP/Bash] -->|Binary: /usr/sbin/sendmail| B[alternatives system]
B -->|Symlink| C[Postfix MTA]
C -->|Spool| D[/var/spool/postfix]
C -->|Queue Management| E[Master Daemon]
E -->|SMTP| F[External Smarthost / Internet]
G{firewalld} -->|Filter| C
# 2. Installation & alternatives System
Den richtigen MTA setzen.
RHEL erlaubt die Koexistenz mehrerer MTAs.
# Installation
sudo dnf install postfix mailx
# MTA umschalten
# Zeige alle installierten MTAs
sudo alternatives --display mta
# Setze Postfix als Standard
sudo alternatives --set mta /usr/sbin/sendmail.postfix
# 3. SELinux & Postfix: Den Spool absichern
Sicherheit für Mail-Daten.
Postfix nutzt dedizierte Verzeichnisse für die Warteschlange. Diese müssen korrekt gelabelt sein.
# Standard-Labels prüfen
ls -Z /var/spool/postfix
# Output: system_u:object_r:postfix_spool_t:s0
# Der Mail-Webserver Boolean
Wenn Ihr Webserver (httpd_t) Mails via Postfix versenden soll, müssen Sie oft einen Boolean setzen:
sudo setsebool -P httpd_can_sendmail on
# 4. Day-2 Operations: Konfiguration & Firewall
Den Betrieb sichern.
# Firewall öffnen
Für ein reines Versandsystem (Client) reicht inet_interfaces = loopback-only in der main.cf. Wenn der Server Mails empfangen soll:
sudo firewall-cmd --permanent --add-service=smtp
sudo firewall-cmd --reload
# Aliase verwalten
Datei: /etc/aliases
Vergessen Sie nicht, System-Mails an eine echte Adresse umzuleiten:
root: sysadmin@company.com
Danach Datenbank aktualisieren: sudo newaliases.
# 5. Troubleshooting & “War Stories”
Wenn die Mail im Spool verhungert.
# Story 1: “Der blockierte Sendmail-Aufruf”
Symptom: Skripte melden “Permission Denied” beim Aufruf von mail oder sendmail.
Ursache: Das alternatives-System zeigt auf einen falschen Pfad oder SELinux blockiert die Ausführung für den spezifischen User-Kontext.
Lösung: Prüfen Sie getsebool -a | grep mail und stellen Sie sicher, dass das Binary das Label postfix_exec_t trägt.
# Story 2: “Die volle /var Partition”
Symptom: Postfix stellt den Dienst ein mit “Queue report: out of disk space”.
Ursache: Ein Cronjob erzeugt Fehlermeldungen im Sekundentakt, die in der Postfix-Queue landen, weil der Smarthost nicht erreichbar ist.
Lösung: Queue leeren (postsuper -d ALL) und die Ursache des Mail-Spams im Cronjob beheben. Limitieren Sie die Queue-Größe in der main.cf: message_size_limit = 10240000.
# 6. Fazit & Empfehlung
- RHEL Standard: Nutzen Sie Postfix. Es ist besser dokumentiert und sicherer als das alte Sendmail.
- Security: Nutzen Sie
smtpd_banner, um die Software-Version zu verschleiern. - Wichtig: Testen Sie den Mail-Versand immer mit
mail -s "Test" root, um sicherzustellen, dass die Aliase funktionieren.
# Anhang: Cheatsheet
| Aufgabe | RHEL Befehl |
|---|---|
| Status prüfen | systemctl status postfix |
| Queue anzeigen | postqueue -p |
| Queue erzwingen | postqueue -f |
| Einzelne Mail löschen | postsuper -d <ID> |
| Alle Mails löschen | postsuper -d ALL |
| Config validieren | postconf -n |
| SELinux Status | `sestatus -b |
| Gecachte Aliase | ls -l /etc/aliases.db |