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üssel domain.tld durchsuchen:
    postmap -q domain.tld btree:/etc/postfix/relay_domains

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
  • 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

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 ist Benutzer: Zielbenutzer)
  • Aliase neu einlesen :
    newaliases

virtuelle Benutzer

Mit virtuellen Benutzern können externe Zieladressen umgeschrieben werden.

Dazu benötigt es

  1. eine Datei (z.B. „/etc/postfix/virtual“)
  2. in der die Umschreibungen nach dem Schema
    alte@adresse.de  neue@adresse.de

    definiert werden und

  3. einen Konfigurationseintrag
    virtual_maps = hash:/etc/postfix/virtual
  4. zuletzt eine Umwandlung als Datenbank mit postmap anstoßen:
    postmap /etc/postfix/virtual

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 FIXME

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:

  1. Datei /etc/postfix/relay_domains:
    Domain1.de	:[ziel-server1.de]
  2. mit postmap umwandeln:
    postmap /etc/postfix/relay_domains
  3. 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
  1. Datei anlegen: /etc/postfix/smtp_auth
  2. Inhalt nach Schema:
    FQDN_MX_Gateway USER:PASSWORT
  3. 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
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

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)

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.