Konfiguration von Postfix
Die Hauptkonfiguration befindet sich in /etc/postfix/main.cf
, eine ausführlich kommentierte Beispiel-Konfiguration liegt unter /usr/share/postfix/main.cf.dist
.
- Das utility postconf und die man-Datei (Aufruf:
man postconf
) helfen weiter. - allgemeine Regel: wenn ein konkreter Rechner gemeint ist immer in eckigen Klammern angeben, andernfalls wird für diese Adresse eine DNS-Anfrage (nach dem zuständigen Rechner) generiert.
- Konfigurationsdateien in
/etc/postfix
:- master.cf - Aufrufe u.a. der Contentfilter
- main.cf - Hauptkonfiguration
- nur Einstellungen anzeigen die von den Standardeinstellungen abweichen:
postconf -n
- Aktuell gültige Einstellungen:
postconf
- Standardeinstellungen:
postconf -d
- Datenbank
btree:/etc/postfix/relay_domains
nach Schlüsseldomain.tld
durchsuchen:postmap -q domain.tld btree:/etc/postfix/relay_domains
oft benutzte Einstellungen
Oft benutzte Einstellungen in der main.cf
:
- maximale Nachrichtenlänge (aktuelle Einstellung überprüfen mit:
postconf | grep message_size
):message_size_limit = 52428800 # default is: 10240000
- Deutsche Meldungstexte:
- deutscher Text (template) für Benachrichtigung über Verzögerungen, Nichtzustellbarkeit etc. herunterladen:
cd /etc/postfix/ && wget http://postfix.state-of-mind.de/bounce-templates/bounce.de-DE.cf
- folgenden Text in der
main.cf
hinzufügen# deutsche Nachrichten für bounces/Verzögerungen etc. bounce_template_file=/etc/postfix/bounce.de-DE.cf
- nur bestimmte IPs zu Empfang/Versand benutzen („binden“)
# IP for outgoing connections: smtp_bind_address= 1.2.3.4 # IPs for incoming connections: inet_interfaces = 1.2.3.4 127.0.0.1
- Einige Statuscodes verschärfen (bei Standeinstellung, Fehlercode 450, würde es der andere Server immer wieder probieren)
# reject non-existent user (verified against target systems) with a fatal error (they won't try again) # standard is: 450 # normaly 550 would be used here, i use 577 to find it easier in logs. unverified_recipient_reject_code = 577 # text for this error is available since 2.6.x: "unverified_recipient_reject_reason" # rejct non-existent/unresolveable domains with a fatal error (they won't try again) # standard is: 450 # normaly 550 would be used here, i use 576 to find it easier in logs. unknown_address_reject_code = 576
Adressumschreibung des Empfängers
Aliase
Aliase gelten nur für lokale Benutzer dessen Empfänger durch Aliase umgeschrieben werden kann. Benutzer fremder Systeme (=dessen Ziel wir nicht sind) können über virtuelle Benutzer umgeschrieben werden.
- Datei editieren:
/etc/aliases
(Schema istBenutzer: Zielbenutzer
) - Aliase neu einlesen :
newaliases
virtuelle Benutzer
Mit virtuellen Benutzern können externe Zieladressen umgeschrieben werden.
Dazu benötigt es
- eine Datei (z.B. „
/etc/postfix/virtual
“) - in der die Umschreibungen nach dem Schema
alte@adresse.de neue@adresse.de
definiert werden und
- einen Konfigurationseintrag
virtual_maps = hash:/etc/postfix/virtual
- zuletzt eine Umwandlung als Datenbank mit
postmap
anstoßen:postmap /etc/postfix/virtual
Relayhost oder Smarthost
Relay sein
Konfiguration wenn wir ein Relayhost für andere sind.
- Variante 1: Andere Hosts über IP-Adresse authentifizieren (macht nur Sinn bei festen IPs und im lokalen LAN)
mynetworks = 127.0.0.0/8, 192.168.0.0/24
- Variante 2: Andere Hosts über Zugangsdaten authentifizieren
Relay benutzen
Das Relay des Providers kümmert sich um den Versand der eMails.
# do we use a relayhost/smarthost? relayhost = smtp-relay.of.my.provider.tld
Ggf. mit SMTP-Auth (siehe unten).
transports
Transports geben konkrete Routen/Ziele für bestimmte domains an, dies benötigt man bei Zielen die nicht im DNS-gelistet sind, z.B. Groupware-Server.
Eleganterweise lassen sich die Einträge für relay-Domains und transports in der gleichen Datei verwalten:
- Datei
/etc/postfix/relay_domains
:Domain1.de :[ziel-server1.de]
- mit postmap umwandeln:
postmap /etc/postfix/relay_domains
- Einträge in der main.cf
relay_domains = hash:/etc/postfix/relay_domains transport_maps = hash:/etc/postfix/relay_domains
Bei dieser Lösung dürfen aber reinen keine transports für externe Domains enthalten sein, da man sonst zum offenen Relay für diese Domains wird.
Absenderadressen maskieren
masquerade_domains = mydomain.tld
Ausnahmen für bestimmte Benutzer:
masquerade_exceptions = root
smtp_auth
- Datei anlegen:
/etc/postfix/smtp_auth
- Inhalt nach Schema:
FQDN_MX_Gateway USER:PASSWORT
postmap /etc/postfix/smtp_auth
LOGIN / AUTH nur mit PLAIN möglich
Fehlermeldung:
: SASL authentication failed; cannot authenticate to server SMTP-SERVERXYZ.tld[1.2.3.4]: no mechanism available
oder
warning: SASL authentication failure: No worthy mechs found
smtp_sasl_auth_enable=yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth # allow plain/login: (standard contains: noplaintext) smtp_sasl_security_options = noanonymous
Postfix - SSL Konfiguration und debugging
Verschlüsselung ist (leider) bei SMTP lt. RFC immer optional, d.h. es muss immer erlaubt sein mails unverschlüsselt einzuliefern. Dennoch sollte sollte man sie anbieten und nutzen wo immer möglich auch wenn das Sicherheitsniveau durch viele Server mit selbst-signierten Zertifkate gesenkt wird. Die Anschaffung eines wildcard-Zertifikates für alle MTAs (mx1.DOMAIN.TLD, mx2.DOMAIN.TLD) ist auch eine sinnvolle Ausgabe, ggf. kann man gleich alle Server damit abdecken wenn alles unterhalb einer Domain statt findet.
Kommentierter Auschnitt aus /etc/postfix/main.cf
:
# === SSL/TLS Einstellungen ============= # STARTTLS abgehend nutzen (aber nicht erzwingen): smtp_tls_security_level=may # STARTTLS eingehend anbieten (aber nicht erzwingen): smtpd_tls_security_level=may # Systemzertifikate zur Verifizierung heranziehen: smtpd_tls_CApath = /etc/ssl/certs smtp_tls_CApath = /etc/ssl/certs # Headereinträge zur Transportverschlüsselung hinzufügen smtpd_tls_received_header = yes # SSL-Debug: # smtpd_tls_loglevel = 1 # Eigene Zertifikate (certs/keys im pem-Format) smtpd_tls_key_file = /etc/postfix/DOMAIN.TLD.key smtpd_tls_cert_file = /etc/postfix/DOMAIN.TLD.cert # wahrscheinloch nötige Zwischenzertifikate (Intermediate) smtpd_tls_CAfile = /etc/postfix/DOMAIN.TLD-plus-zwischenzertifikate.crt # === SSL/TLS Einstellungen ENDE =============
SSL/TLS debugging
Kommentierter Auschnitt aus /etc/postfix/main.cf
:
smtpd_tls_received_header = yes smtpd_tls_loglevel = 3 # 0 (none) to 4 (full data)
Einbindung externer Filtersysteme
Die Einbindung externer Filtersysteme ist problemlos möglich, da diese auf einem lokalen Port lauschen:
# policyd-weight check_policy_service inet:127.0.0.1:12525, # greylisting check_policy_service inet:127.0.0.1:60000,
Spamassassin mit Postfix
Spamassassin kann grundsätzlich über zwei Wege zur Spamfilterung benutzt werden:
- smptd_proxy_filter innerhalb amavis-new (empfohlen)
- als eigener content_filter: Keine Blockierung gleich beim Empfang möglich, aber für filterung lokaler (versendender) Benutzer nötig.