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
root: leroy@it2XX.int
postmaster: root
abuse: root
support: leroy@it2XX.int, martha@it2XX.int
- Datenbank aktualisieren
Konfiguration
- In main.cf eintragen
- postconf -e "alias_maps = hash:/etc/aliases"
- postconf -e "alias_database = hash:/etc/aliases"
Postfix neu laden
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
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
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
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
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
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
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
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
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
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
- 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
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
Ü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
|