Postfix Tabellen Kompakt

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Postfix Lookup Tables Workshop

Dieser Workshop behandelt die wichtigsten Postfix Lookup Tables. Alle Konfigurationsänderungen werden mit postconf -e vorgenommen.

alias

  • Leitet lokale Empfänger auf andere Adressen um
  • Wird für Systembenutzer und lokale Weiterleitungen genutzt
  • Änderungen erfordern newaliases zur Aktualisierung der Datenbank

Syntax

Einfache Weiterleitung
empfaenger: ziel
Weiterleitung an mehrere Empfänger
empfaenger: ziel1, ziel2
Weiterleitung an externe Adresse
empfaenger: user@extern.de
Weiterleitung in Datei
empfaenger: /var/mail/archiv
Weiterleitung an Programm
empfaenger: |/usr/local/bin/skript.sh

Beispiel

Datei bearbeiten
  • vi /etc/aliases
  root: leroy@it2XX.int
  postmaster: root
  abuse: root
  support: leroy@it2XX.int, martha@it2XX.int
  
Datenbank aktualisieren
  • newaliases

Konfiguration

In main.cf eintragen
  • postconf -e "alias_maps = hash:/etc/aliases"
  • postconf -e "alias_database = hash:/etc/aliases"

Postfix neu laden

  • postfix reload

canonical

  • Schreibt Absender- und Empfängeradressen um (beide Richtungen)
  • Wird für einheitliche Absenderadressen genutzt
  • Betrifft sowohl eingehende als auch ausgehende Mails

Syntax

Benutzer umschreiben
altername  neuer@it2XX.int
Domain umschreiben
@altedomain.int  @it2XX.int

Beispiel

Datei erstellen
  • vi /etc/postfix/canonical
  leroy           leroy@it2XX.int
  martha          martha@it2XX.int
  @old.it2XX.int  @it2XX.int
  
Datenbank aktualisieren
  • postmap /etc/postfix/canonical

Konfiguration

  • postconf -e "canonical_maps = hash:/etc/postfix/canonical"

Postfix neu laden

  • postfix reload

sender_canonical

  • Schreibt ausschließlich Absenderadressen um
  • Wird genutzt um interne Benutzernamen nach außen zu verschönern
  • Betrifft nur den Envelope-Sender und den From-Header

Syntax

Lokalen Benutzer umschreiben
lokaler_user  anzeigename@it2XX.int
Domain umschreiben
@intern.int  @it2XX.int

Beispiel

Datei erstellen
  • vi /etc/postfix/sender_canonical
  leroy   leroy.meyer@it2XX.int
  martha  martha.schmidt@it2XX.int
  
Datenbank aktualisieren
  • postmap /etc/postfix/sender_canonical

Konfiguration

  • postconf -e "sender_canonical_maps = hash:/etc/postfix/sender_canonical"

Postfix neu laden

  • postfix reload

recipient_canonical

  • Schreibt ausschließlich Empfängeradressen um
  • Wird genutzt um eingehende Adressen auf lokale Postfächer zu mappen
  • Betrifft nur den Envelope-Recipient

Syntax

Adresse umschreiben
extern@it2XX.int  intern@it2XX.int
Domain umschreiben
@altedomain.int   @it2XX.int

Beispiel

Datei erstellen
  • vi /etc/postfix/recipient_canonical
  l.meyer@it2XX.int    leroy@it2XX.int
  m.schmidt@it2XX.int  martha@it2XX.int
  
Datenbank aktualisieren
  • postmap /etc/postfix/recipient_canonical

Konfiguration

  • postconf -e "recipient_canonical_maps = hash:/etc/postfix/recipient_canonical"

Postfix neu laden

  • postfix reload

virtual (Virtuelle Alias-Tabelle)

  • Ordnet E-Mail-Adressen virtuellen Mailboxen oder anderen Adressen zu
  • Wird für virtuelle Domains genutzt
  • Ermöglicht die Trennung von Mail-Adressen und Systembenutzern
  • it2XX.int darf nicht in mydestination stehen

Syntax

Adresse weiterleiten
fiktive@it2XX.int  real@it2XX.int
Catch-All
@it2XX.int  real@it2XX.int

Beispiel

Datei erstellen
  • vi /etc/postfix/virtual
  technik@it2XX.int   leroy@it2XX.int
  vertrieb@it2XX.int  martha@it2XX.int
  @it2XX.int          martha@it2XX.int
  
Datenbank aktualisieren
  • postmap /etc/postfix/virtual

Konfiguration

  • postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

Postfix neu laden

  • postfix reload

virtual_mailbox (Virtuelle Mailbox-Zustellung)

  • Stellt Mails direkt in Maildir-Verzeichnisse zu
  • Kein lokaler Systembenutzer erforderlich
  • Erfordert einen dedizierten vmail-Benutzer

Systembenutzer anlegen

  • groupadd -g 5000 vmail
  • useradd -u 5000 -g 5000 -d /var/mail vmail

Beispiel

Datei erstellen
  • vi /etc/postfix/virtual_mailbox_maps
  leroy@it2XX.int   leroy/
  martha@it2XX.int  martha/
  
Datenbank aktualisieren
  • postmap /etc/postfix/virtual_mailbox_maps

Verzeichnisse anlegen

  • mkdir -p /var/mail/leroy/
  • mkdir -p /var/mail/martha/
  • chown -R vmail:vmail /var/mail/

Konfiguration

!!!Wichtig!!! it2XX.int darf nicht in mydestination stehen
  • postconf -e "mydestination = mail.it2XX.int, localhost"
  • postconf -e "virtual_mailbox_domains = it2XX.int"
  • postconf -e "virtual_mailbox_base = /var/mail"
  • postconf -e "virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_maps"
  • postconf -e "virtual_uid_maps = static:5000"
  • postconf -e "virtual_gid_maps = static:5000"

Postfix neu starten

  • systemctl restart postfix

transport

  • Steuert über welchen Transportweg eine Mail zugestellt wird
  • Überschreibt das Standard-Routing von Postfix
  • Nützlich für Split-Delivery oder Relay an bestimmte Server

Syntax

Domain über bestimmten Transport
domain.int  smtp:[mailserver.domain.int]
Domain lokal zustellen
domain.int  local:
Domain verwerfen
domain.int  discard:

Beispiel

Datei erstellen
  • vi /etc/postfix/transport
  it2XX.int       smtp:[10.88.2XX.1]
  extern.int      smtp:[mail.extern.int]:587
  wegwerf.int     discard:
  
Datenbank aktualisieren
  • postmap /etc/postfix/transport

Konfiguration

  • postconf -e "transport_maps = hash:/etc/postfix/transport"

Postfix neu laden

  • postfix reload

relay_domains

  • Definiert für welche Domains Postfix als Relay agiert
  • Postfix nimmt Mails für diese Domains an und leitet sie weiter
  • Ohne Eintrag hier werden fremde Domains abgewiesen

Syntax

Domain als Relay eintragen
relay_domains = domain1.int, domain2.int
Oder aus Datei (für viele Domains)
relay_domains = hash:/etc/postfix/relay_domains

Beispiel: Direkt in main.cf

  • postconf -e "relay_domains = it2XX.int, partner.int"

Beispiel: Aus Datei

Datei erstellen
  • vi /etc/postfix/relay_domains
  it2XX.int    OK
  partner.int  OK
  
Datenbank aktualisieren
  • postmap /etc/postfix/relay_domains
Konfiguration
  • postconf -e "relay_domains = hash:/etc/postfix/relay_domains"

Postfix neu laden

  • postfix reload

virtusertable

  • Historisches Sendmail-Konzept, in Postfix als virtual_alias_maps umgesetzt
  • Mappt virtuelle Benutzer auf reale Empfänger
  • Funktioniert identisch zur virtual Alias-Tabelle

Hinweis

In Postfix wird virtusertable als virtual_alias_maps konfiguriert
  • vi /etc/postfix/virtusertable
  info@it2XX.int     leroy@it2XX.int
  sales@it2XX.int    martha@it2XX.int
  @it2XX.int         leroy@it2XX.int
  
Datenbank aktualisieren
  • postmap /etc/postfix/virtusertable

Konfiguration

  • postconf -e "virtual_alias_maps = hash:/etc/postfix/virtusertable"

Postfix neu laden

  • postfix reload

smtpd_sender_restrictions

  • Regelt welche Absender Mails einliefern dürfen
  • Prüfung erfolgt beim MAIL FROM im SMTP-Dialog
  • Regeln werden der Reihe nach abgearbeitet

Wichtige Restriktionen

Restriktion Beschreibung
permit_mynetworks Eigene Netzwerke erlauben
permit_sasl_authenticated Authentifizierte Benutzer erlauben
reject_unknown_sender_domain Absender-Domain muss im DNS existieren
reject_non_fqdn_sender Absender muss FQDN haben
reject Alles weitere ablehnen

Konfiguration

  • postconf -e "smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, reject_non_fqdn_sender"

Postfix neu laden

  • postfix reload

smtpd_recipient_restrictions

  • Regelt welche Empfänger akzeptiert werden
  • Prüfung erfolgt beim RCPT TO im SMTP-Dialog
  • Wichtigste Stelle zur Spam- und Relay-Kontrolle

Wichtige Restriktionen

Restriktion Beschreibung
permit_mynetworks Eigene Netzwerke erlauben
permit_sasl_authenticated Authentifizierte Benutzer erlauben
reject_unauth_destination Open Relay verhindern (Pflicht!)
reject_unknown_recipient_domain Empfänger-Domain muss im DNS existieren
reject_non_fqdn_recipient Empfänger muss FQDN haben
check_policy_service Externe Policy-Prüfung (z.B. SPF)

Konfiguration

  • postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain"

Postfix neu laden

  • postfix reload

header_checks

  • Prüft und manipuliert Mail-Header per regulärem Ausdruck
  • Kann Header hinzufügen, ersetzen, ablehnen oder verwerfen
  • Wird nach der Annahme der Mail ausgeführt

Syntax

Aktionen
/REGEXP/  AKTION
Aktionen
REJECT, DISCARD, WARN, HOLD, PREPEND, REPLACE, IGNORE

Beispiel

Datei erstellen
  • vi /etc/postfix/header_checks
  /^Subject:.*SPAM.*/         DISCARD
  /^X-Mailer: BadMailer.*/    REJECT Unerwünschter Mailer
  /^From:.*@spamdomain\.int/  REJECT Absender gesperrt
  
Kein postmap – header_checks verwendet regexp, keine hash-Tabelle

Konfiguration

  • postconf -e "header_checks = regexp:/etc/postfix/header_checks"

Postfix neu laden

  • postfix reload

body_checks

  • Prüft den Mail-Body per regulärem Ausdruck
  • Gleiche Syntax wie header_checks
  • Vorsicht: Kann bei großen Mails die Performance beeinträchtigen

Beispiel

Datei erstellen
  • vi /etc/postfix/body_checks
  /viagra/i                    DISCARD
  /http:\/\/spamdomain\.int/   REJECT Spam-Link erkannt
  /\bkasino\b/i                WARN Verdächtiger Inhalt
  
Kein postmap – body_checks verwendet regexp

Konfiguration

  • postconf -e "body_checks = regexp:/etc/postfix/body_checks"

Postfix neu laden

  • postfix reload

Übersicht: postmap vs. newaliases vs. regexp

Tabelle Befehl nach Änderung Format
alias newaliases text
canonical postmap hash
sender_canonical postmap hash
recipient_canonical postmap hash
virtual postmap hash
virtual_mailbox_maps postmap hash
transport postmap hash
relay_domains postmap hash
virtusertable postmap hash
header_checks – (kein postmap) regexp
body_checks – (kein postmap) regexp