Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Frankensteins Mailserver – 4 – Postfix konfigurieren

Diesmal kümmern wir uns um die Konfiguration des Mailservers Postfix…

Was macht Postfix eigentlich?
„Mailserver“ ist als Bezeichnung für ihn eigentlich ein wenig irreführend. Postfix besteht aus einer Menge kleiner Programme, von denen jedes genau einen Zweck erfüllt. Dadurch ist er weniger anfällig gegen Cracker-Attacken, als ein großes Programm, das alles in einem beherbergt. Das in die Jahre gekommene „Sendmail“ war so ein Fall…
Postfix kümmert sich in diesem Setup ausschließlich um das Versenden und Empfangen von Mails zwischen Mailservern und der Annahme von Mails unserer Clients zum Weiterversand. Das Abspeichern in unseren Postfächern und der Zugriff über POP3 oder IMAP darauf regelt Dovecot. Darum nennt man ein Programm wie Postfix streng genommen auch „MTA“ – einen Mail Transfer Agent. „Mailserver“ ist da zu weit gefasst.

Postfix wird über zwei Haupt-Config-Datien verwaltet. Beide liegen im Config-Verzeichnis von Postfix /etc/postfix. Sie heißen main.cf und master.cf.

master.cf

Bevor wir die Datei ändern, erstellen wir davon eine Sicherheitskopie
cp /etc/postfix/master.cf{,.orig}

Passen wir zuerst die master.cf an, weil wir hier nur drei kleine Änderungen vornehmen werden
nano /etc/postfix/master.cf
submission inet n – – – – smtpd
[…]

smtps inet n – – – – smtpd
-o smtpd_tls_wrappermode=yes
[…]

Hier müssen wir nur beide Protokolle einkommentieren. Also die Rauten (#) vor der Zeile löschen. Bei smtps noch den „wrapper“ einkommentieren. Das soll angeblich bei Problemen mit Microsofts Outlook (Express) etwas helfen.

Mit der Aktion aktivieren wir das „submission“- und „smtps“-Protokoll. Diese ermöglichen eine SSL-Verbindung zum Mailserver. Damit können wir unsere Mails verschlüsselt von unserem Mail-Programm zu Postfix übertragen.
Datei speichern und nano beenden.

main.cf

Die Änderungen an main.cf sind da schon viel umfangreicher. Pflegen wir sie ein und sehen uns dann im Detail an, was wir warum gemacht haben…

Bevor wir die Datei ändern, erstellen wir davon eine Sicherheitskopie
cp /etc/postfix/main.cf{,.orig}

Nun passen wir die main.cf an
nano /etc/postfix/main.cf
myhostname = bla.de
mydestination = localhost
### Wir ändern mydestination auf localhost. NUR localhost…

### Den smtpds-Block löschen, dann die Änderungen unten anfügen:
#
## Mailboxen und Anbindung an MySQL
virtual_mailbox_base = /var/vmail/
virtual_minimum_uid = 1000
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
#
## Authentification
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth-dovecot
smtpd_sasl_auth_enable=yes
smtpd_sasl_authenticated_header=yes
broken_sasl_auth_clients=yes
#
## SSL / TLS
smtpd_tls_cert_file=/root/CA/certs/bla.de-mail.crt
smtpd_tls_key_file=/root/CA/private/bla.de-mail.key
smtpd_tls_session_cache_timeout=86400s
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
#
## ProxyMaps einlesen (gehört in EINE Zeile)
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
#
## Spam Stuff
smtpd_helo_required=yes
disable_vrfy_command=yes
#
## Einschränkungen für SMTP – die Liste wird von oben nach unten abgearbeitet
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf
smtpd_sender_restrictions =
reject_authenticated_sender_login_mismatch,
reject_unknown_sender_domain
#
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_client_hostname,
reject_unauth_destination,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_invalid_hostname,
reject_multi_recipient_bounce,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_rbl_client bl.spamcop.net,
reject_rbl_client zen.spamhaus.org,
permit
#EOF

Datei speichern und nano beenden.

Nun ändern wir noch die Rechte am Config-Verzeichnis, damit nicht ‚jedermann‘ die sensiblen Dateien auslesen kann:
chown -R postfix:postfix /etc/postfix && chmod -R o-rwx /etc/postfix

Erläuterungen

Puh, das war vielleicht eine Config… Staubtrockene Materie ;)
Schauen wir mal, was die einzelnen Zeilen so bewirken:

mydestination
mydestination = localhost sagt an, dass Postfix erst mal nur für „localhost“ zuständig ist.
Die Domains, die wir für den Mailverkehr benutzen möchten, teilen wir Postfix über die „mappings“ weiter unten mit.

Mailboxen und Anbindung an MySQL
Der obere Teil kümmert sich um die Verwaltung: Welcher Ordner die Mails fasst, welcher „Tunnel“ zum Ablegen der Mails genutzt wird. Und über welchen Benutzer der Zugriff laufen soll.

Danach kommen die „Mappings“: Postfix muss wissen, welche Domains, Benutzer und Aliase wir verwenden – also für wen er künftig zuständig ist. Schließlich muss Postfix entscheiden, ob eine Mail an einen anderen Mailserver weitergeleitet werden muss (Ziel-Domain gehört NICHT uns), oder an Dovecot zum Einsortieren übergeben wird (Ziel-Domain gehört uns).

Diese Informationen stehen alle in unserer MySQL-Datenbank, welche wir im letzten Kapitel angelegt haben. Die folgenden Zeilen erklären Postfix nun, wo und wie er über die Config-Dateien an diese Daten kommt.

Durch den vorgeschalteten „proxy“-Befehl weisen wir Postfix an, die Abfragen an MariaDB zwischenzuspeichern. Dann muss nicht jedes Mal erneut in der Datenbank nachgesehen werden, wenn ein Benutzer z.B. 20 Mails verschickt.

Authentification
Dieser Block übergibt die Benutzer-Authentifizierung an Dovecots SASL.

SSL / TLS
Hier stehen die Pfade unserer Zertikate, die für eine SSL-Verbindung verwendet werden sollen. Danach wird eingeschränkt, dass eine smtp-Verbindung nur noch über TLS möglich sein soll. Ohne TLS werden alle Anfragen der Clients zum Mailserver abgelehnt. Vor allem die AUTH-Angaben werden NUR verschlüsselt übertragen. Kein TLS = keine Verbindung zum Mailserver. Das kann bei alten Clients oder dem einen oder anderen Handy klemmen. Bei einem aktuellen Thunderbird funktioniert das Setup. Und ich habe kein Handy.
Den Session Cache Timeout stellen wir auf 24 Stunden. Dadurch wird eine TLS-Verbindung 24 Stunden lang „recycelt“ und nicht jedes Mal neu aufgebaut, was kostbare CPU-Leistung und Bandbreite verbrennen würde.

ProxyMaps einlesen
Macht genau das. Liest beim Start die „Mappings“ aus uns speichert die Ergebnisse zwischen. Das entlastet später die Datenbank.

Spam Stuff
„smtpd_helo_required=yes“ weist alle „Server“ ab, die sich nicht mit HELO oder EHLO vorstellen.
„disable_vrfy_command=yes“ unterbindet ein paar Methoden, die dazu verwendet werden, E-Mail Adressen zu „farmen“.

SMTP Einschränkungen
Diese Einstellungen dienen in erster Linie dazu, dass nur berechtigte Personen die Dienste des MTA in Anspruch nehmen dürfen. Ansonsten hätten wir den Super-GAU: Das offene Relay.

Die Einschränkungen beim Ausliefern sind
„reject_authenticated_sender_login_mismatch“ bedeutet, dass nur über SASL eingeloggte Personen, die auch gleichzeitig mit dem „Mail From“ übereinstimmen, eine Mail versenden dürfen.
„reject_unknown_sender_domain“ lehnt eine smtp-Verbindung ab, wenn a) Postfix nicht die „Endstation“ für die Mail ist UND b) die „Mail From“ Domain keinen DNS-MX Eintrag und keinen DNS-A Eintrag hat.

Die Einschränkungen beim Einliefern sind
„permit_mynetworks“ – lässt die Verbindung zu, wenn die Client-IP mit einer der in $mynetworks angegebenen Netzwerke übereinstimmt.
„permit_sasl_authenticated“ lässt die Verbindung zu, wenn der Client erfolgreich über SASL angemeldet ist.
„reject_unknown_client_hostname“ prüft, ob der Hostname zur IP des Mailservers passt (Pointer!). Stimmen sie nicht überein, wird die Annahme verweigert.
„reject_unauth_destination“ ist das schärfte Schwert im Köcher gegen den Open Relay: Nur wenn Postfix Endstation für die Mail ist, die eine von uns verwendete Domain hat, wird der Empfang zugelassen. Haben wir nichts in „relay_domains“ eingetragen, wird Postfix das Weiterleiten von fremden Mails ablehnen.
„reject_non_fqdn_sender“ lehnt Mails ab, deren „Mail From“ keine volle Domain beinhaltet. Das hält ein paar Spams draußen.
„reject_unknown_sender_domain“ ist die gleiche Regel für eingehende Mails wie oben für abgehende.
„reject_invalid_hostname“ – habe ich jetzt keine Infos gefunden. Eventuell veraltet. Liefert aber keinen Fehler bei Postfix…
„reject_multi_recipient_bounce“ – soll die massenhaften „Bounce“-Mails eindämmen. Aber arbeitet nur verlässlich, wenn noch eine andere Variable definiert ist, die hier nicht gesetzt wurde. Zurück ans Zeichenbrett…
„reject_non_fqdn_recipient“ sorgt für die Annahmeverweigerung, wenn die Ziel-Adresse der ankommenden Mail eine nicht korrekte Domain-Angabe besitzt.
„reject_unknown_recipient_domain“ wirkt wie „_sender_domain“, nur mit der Prüfung auf der Empfänger-Seite.

„reject_rbl_client“ ist ein kleines Stück „Magie“… Die eingehenden Mails, die noch nicht von obigen Regeln erfasst wurden, werden nun gegen zwei „Spam-Blacklists“ geprüft: „bl.spamcop.net“ und „zen.spamhaus.org“. Nur, wenn die IP-Adresse des Servers der eingehenden Mail NICHT in den Spam-Listen verzeichnet ist, wird sie zugestellt („permit“). Ansonsten verweigert Postfix die Annahme.
Aus Erfahrung kann ich sagen: Diese beiden einfachen Regeln sorgen für das Abtöten von 90% des Spams, der auf unseren Server geschossen wird :)

Fazit

Diese Config ist „Frankenstein“ in Reinkultur. Die Liste an Restriktionen zum Beispiel ist von mir aus verschiedenen über das Netz erhältlichen Konfigurationen zusammengefasst worden.

Sie funktioniert – jedenfalls liefert mir Postfix keinen Fehler – aber ob das alles so vom großen Schöpfer gewollt ist… Das ist eine andere Frage. Hier würde ich mich über Input von jemand, der die Materie durchdrungen hat, wirklich sehr freuen.

Ein „Open Relay“ sind wir mit dieser Config wenigstens nicht – jedenfalls behaupten das drei unabhängige Tests von verschiedenen Seiten. Dazu aber mehr im letzten Kapitel.

Jetzt können wir uns erst mal zurücklehnen. Mit der Config von Postfix haben wir das härteste Stück hinter uns.

Nun folgt das Einrichten von Dovecot…

Navigation

< Vorheriger Artikel | Nächster Artikel >
E-Mail Begleittext Download (Rechtsklick – „Ziel speichern unter…“)

Anzeige *

Kommentar verfassen

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