Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_centos_6

Inhaltsverzeichnis

Postfix CentOS 6

Postfix ist Wietse Venema's Mail-Server, welcher bei „IBM research“ als Alternative zum weit verbreiteten Programm Sendmail entwickelt wurde. Postfix erhebt den Anspruch ein schneller, einfach zu administrierender und sicherer Mail-Server zu sein.

:!: WICHTIG - Für den erfolgreichen Betrieb eines eigenen MTA (Mail Transport Agent) sollten Sie im Besitz einer festen IP-Adresse sein !!!

:!: HINWEIS - Bei CentOS ab der Version 6.x ist Postfix der standardmäßig installierte MTA (Mail Transport Agent) und löst damit Sendmail ab!

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Konfigurationsdateien: Postfix

Die Konfiguration von Postfix findet in verschiedenen Dateien statt, welche alle im Verzeichnis

  • /etc/postfix

enthalten sind.

Standard

Nachfolgende Dateien sind bereits nach der Installation von CentOS ab der Version 6.x bereits vorhanden:

Name der Konfigurationsdatei Bedeutung der Konfigurationsdatei
/etc/postfix/main.cf Hauptkonfigurationsdatei
/etc/postfix/virtual Alias Definitionen für Domains und e-Mail-Adressen
/etc/postfix/canonical Umschreiben von Absender- und Empfängeradressen
/etc/postfix/generic Umschreiben von via SMTP/LMTP das System verlassende e-Mails
/etc/postfix/transport Abweichende Zustellung der e-Mail über alternatives Mailrouting
/etc/postfix/relocated „Bounce“ bei Empfänger, Rückmeldungen bei geänderten e-Mail-Adresse
/etc/postfix/header_checks Filtern von e-Mails anhand der „Header“-Informationen
/etc/postfix/access Zugriffskontrolle für Clients, welche via externer Einwahl zugreifen
/etc/postfix/master.cf Konfiguration der Postfix-Module

Zusätzliche und Ersetzende

Nachfolgende Dateien sollten zusätzlich oder ersetzend zu den, nach der Installation von CentOS ab der Version 6.x bereits vorhandenen Konfigurationsdateien erstellt werden:

Name der Konfigurationsdatei Bedeutung der Konfigurationsdatei Ersetzt
/etc/postfix/virtual_alias_domains Alias Definitionen für Domains /etc/postfix/virtual
/etc/postfix/virtual_alias_maps Alias Definitionen für e-Mail-Adressen /etc/postfix/virtual
/etc/postfix/sender_canonical_maps Umschreiben (SMTP-Envelop, e-Mail-Header) Absenderadresse /etc/postfix/canonical
/etc/postfix/recipient_canonical_maps Umschreiben (SMTP-Envelop, e-Mail-Header) Empfängeradresse /etc/postfix/canonical
/etc/postfix/smtp_generic_maps Umschreiben von via SMTP das System verlassende e-Mails /etc/postfix/generic
/etc/postfix/lmtp_generic_maps Umschreiben von via LMTP das System verlassende e-Mails /etc/postfix/generic
/etc/postfix/transport_maps Abweichende Zustellung der e-Mail über alternatives Mailrouting /etc/postfix/transport
/etc/postfix/relocated_maps „Bounce“ bei Empfänger, Rückmeldungen bei geänderten e-Mail-Adresse /etc/postfix/relocated
/etc/postfix/body_checks Filtern von e-Mails anhand der „Body“-Informationen
/etc/postfix/mime_header_checks Filtern von e-Mails anhand der „MIME“-Informationen im Header
/etc/postfix/nested_header_checks Filtern von e-Mails anhand von angehängten „Header“-Informationen
/etc/postfix/check_recipient_access_rfc RFC-1142-konformes Whitelisting von bestimmten e-Mail-Adressen /etc/postfix/access
/etc/postfix/check_client_access Prüfung auf FQDN oder besser IP-Adress-Netze /etc/postfix/access
/etc/postfix/check_helo_access Prüfung auf FQDN in der „HELO/EHLO“-Angabe /etc/postfix/access
/etc/postfix/check_sender_access Prüfung bei der Einlieferung verwendeter Absender e-Mail-Adressen /etc/postfix/access
/etc/postfix/check_recipient_access Prüfung bei der Einlieferung verwendeter Empfänger e-Mail-Adressen /etc/postfix/access
/etc/postfix/bounce.de-DE.cf Template-Datei für deutsch/english-Texte beim „Bounce“ einer e-Mail
/etc/postfix/esmtp_access Delivery Status Notifications (DSN) erlauben bzw. verbieten /etc/postfix/access
/etc/postfix/relay_donains Delivery zum nachgelagten IMAP-Server z.B. cyrus-imapd

/etc/postfix/main.cf

Die Hauptkonfigurationsdatei von Postfix.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend Konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550

myhostname

Der Hostname des Mail-Servers. Dies muss ein vollständiger Hostname inklusive Domain sein.

Defaultwert Neuer Wert
Standardwert aus der Umgebungsvariable HOSTNAME mx1.tachtler.net

In der Konfigurationsdatei

  • /etc/sysconfig/network

kann unter CentOS der HOSTNAME= gesetzte werden.

Mit nachfolgendem Befehl, kann der aktuell verwendete HOSTNAME abgefragt werden:

# echo $HOSTNAME
rechner60.dmz.tachtler.net

mydomain

Die Domain des Mail-Servers.

Defaultwert Neuer Wert
$myhostname abzüglich des Host-Teils = dmz.tachtler.net tachtler.net

mydestination

Domains, für die sich Postfix als final destination zuständig fühlt!

Defaultwert Neuer Wert
$myhostname, localhost.$mydomain, localhost $myhostname, localhost.$mydomain, localhost, localhost.localdomain, $mydomain, rechner60.dmz.$mydomain

Der neue Wert besteht aus dem Standardwert und der Ergänzung: localhost.localdomain, $mydomain und rechner60.dmz.$mydomain.

Um eine Fehlersituation wie nachfolgend dargestellt zu verhindern, wurden die Werte

  • localhost.localdomain
  • rechner60.dmz.$mydomain

ebenfalls ergänzt, da es hier bei einer lokalen e-Mail Einlieferung in der Log-Datei

  • /var/log/maillog

zu der Fehlermeldung

  • bounced (mail for … loops back to myself)

kommen könnte.

Beispiel:

Jan 18 15:47:24 rechner60 postfix/smtpd[3145]: connect from rechner60.dmz.tachtler.net[192.168.0.60]
Jan 18 15:48:10 rechner60 postfix/smtpd[3145]: A37FE5F113: client=rechner60.dmz.tachtler.net[192.168.0.60]
Jan 18 15:48:17 rechner60 postfix/cleanup[3148]: A37FE5F113: message-id=<20120118144810.A37FE5F113@mx1.tachtler.net>
Jan 18 15:48:17 rechner60 postfix/qmgr[3143]: A37FE5F113: from=<root@rechner60.dmz.tachtler.net>, size=415, nrcpt=1 (queue active)
Jan 18 15:48:17 rechner60 postfix/smtp[3149]: A37FE5F113: to=<root@rechner60.dmz.tachtler.net>, relay=none, delay=22, delays=22/0.02/0/0, 
dsn=5.4.6, status=bounced (mail for rechner60.dmz.tachtler.net loops back to myself)
Jan 18 15:48:17 rechner60 postfix/cleanup[3148]: E44105F115: message-id=<20120118144817.E44105F115@mx1.tachtler.net>
Jan 18 15:48:17 rechner60 postfix/bounce[3150]: A37FE5F113: sender non-delivery notification: E44105F115
Jan 18 15:48:17 rechner60 postfix/qmgr[3143]: E44105F115: from=<>, size=2347, nrcpt=1 (queue active)
Jan 18 15:48:17 rechner60 postfix/qmgr[3143]: A37FE5F113: removed
Jan 18 15:48:18 rechner60 postfix/smtp[3149]: E44105F115: to=<root@rechner60.dmz.tachtler.net>, relay=none, delay=0.04, delays=0.03/0/0/0, 
dsn=5.4.6, status=bounced (mail for rechner60.dmz.tachtler.net loops back to myself)
Jan 18 15:48:18 rechner60 postfix/qmgr[3143]: E44105F115: removed
Jan 18 15:48:19 rechner60 postfix/smtpd[3145]: disconnect from rechner60.dmz.tachtler.net[192.168.0.60]

myorigin

Ergänzung für lokal erzeugte e-Mails, welche nur an eine User-ID adressiert sind z.B. root.

Defaultwert Neuer Wert
$mydomain = tachtler.net rechner60.dmz.tachtler.net

Hier sollen lokal erzeuge e-Mails, nicht pauschal um $mydomain = tachtler.net erweitert werden, sondern es soll der interne Servername, hier rechner60.dmz.tachtler.net verwendet werden.

Beispiel:

  • mit Defaultwert: root@tachtler.net
  • mit Neuer Wert: root@rechner60.dmz.tachtler.net

mynetworks

Angabe des vertrauenswürdigen Netzbereich aus dem Postfix es gestatte, e-Mails auch nach außen auch an externe Mail-Server bzw. e-Mail-Adressen, e-Mails zuzustellen.

:!: HINWEIS - Angaben die hier gemacht werden, setzen alle Angaben die unter

  • mynetworks_style

gemacht werden, außer Kraft!

Defaultwert Neuer Wert
127.0.0.0/8 [weitere Netzwerkkarten und deren Netze] 127.0.0.0/8 192.168.0.0/24 192.168.1.0/24

Hier können Ergänzungen gemacht werden, z.B. von Netzen, welche über eine Firewall z.B. aus dem Intranet an den Mail-Server geroutet werden!

inet_interfaces

Netzwerkinterfaces (Netzwerkkarten) auf denen Postfix bereit ist e-Mails zu empfangen.

Defaultwert Neuer Wert
localhost (durch CentOS gesetzt! all (eigentlicher Standardwert)

In diesem Fall wurde durch die Installation von CentOS der Wert auf localhost abgeändert, als Schutz, dass nur lokal e-Mails angenommen werden.

Der eigentliche Standardwert ist jedoch all, welcher auch wieder gesetzt werden sollte, damit auf allen Netzwerkinterfaces (Netzwerkkarten), auf denen der Mail-Server erreichbar ist, e-Mails angenommen werden können!

Ob Postfix auf allen Netzwerkinterfaces (Netzwerkkarten) lauscht, kann mit nachfolgendem Befehl überprüft werden und sollte eine Ausgabe in etwa wie diese ergeben:

netstat -tulpen | grep master
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      0          12036      2788/master

inet_protocols

Netzwerkprotokoll (ipv4, ipv6), die durch Postfix unterstützt werden sollen.

Defaultwert Neuer Wert
all ipv4 (eigentlicher Standardwert)

In diesem Fall wurde durch die Installation von CentOS der Wert auf all abgeändert, um alle möglichen Protokolle zu unterstützen.

Der eigentliche Standardwert ist jedoch ipv4, welcher auch wieder gesetzt werden sollte, falls kein ipv6 zum Einsatz kommen soll, wie das hier in diesem Beispiel der Fall ist, damit nur in der Protokollart ipv4 e-Mails angenommen werden!

virtual_alias_domains

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die virtuellen Domains verwaltet:

Defaultwert Neuer Wert
virtual_alias_domains = $virtual_alias_maps virtual_alias_domains = btree:/etc/postfix/virtual_alias_domains

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

virtual_alias_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die virtuellen e-Mail-Adressen verwaltet:

Defaultwert Neuer Wert
virtual_alias_maps = $virtual_maps virtual_alias_maps = btree:/etc/postfix/virtual_alias_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

virtual_mailbox_domains

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die virtuellen Mailbox Domains verwaltet:

Defaultwert Neuer Wert
virtual_mailbox_domains = $virtual_alias_maps virtual_mailbox_domains = btree:/etc/postfix/virtual_mailbox_domains

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

virtual_mailbox_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die virtuellen Mailbox e-Mail-Adressen verwaltet:

Defaultwert Neuer Wert
virtual_mailbox_maps = $virtual_maps virtual_mailbox_maps = btree:/etc/postfix/virtual_mailbox_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

sender_canonical_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Umschreibungen von Absender e-Mail-Adressen im SMTP-Envelop und im Header der e-Mail verwaltet:

Defaultwert Neuer Wert
sender_canonical_maps = sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

recipient_canonical_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Umschreibungen von Empfänger e-Mail-Adressen im SMTP-Envelop und im Header der e-Mail verwaltet:

Defaultwert Neuer Wert
recipient_canonical_maps = recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

smtp_generic_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Umschreibungen von Empfänger e-Mail-Adressen im SMTP-Envelop und im Header der e-Mail, jedoch erst beim verlassen des Systems via SMTP verwaltet:

Defaultwert Neuer Wert
smtp_generic_maps = smtp_generic_maps = btree:/etc/postfix/smtp_generic_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

lmtp_generic_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Umschreibungen von Empfänger e-Mail-Adressen im SMTP-Envelop und im Header der e-Mail, jedoch erst beim verlassen des Systems via LMTP verwaltet:

Defaultwert Neuer Wert
lmtp_generic_maps = lmtp_generic_maps = btree:/etc/postfix/lmtp_generic_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

relay_domains

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Alternatives Mailrouting verwaltet:

:!: HINWEIS - OHNE IMAP-Server Unterstützung via relay_domains !!!

Defaultwert Neuer Wert
relay_domains = $mydestination

:!: HINWEIS - MIT IMAP-Server Unterstützung via relay_domains !!!

Defaultwert Neuer Wert
relay_domains = $mydestination relay_domains = btree:/etc/postfix/relay_domains

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

transport_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Alternatives Mailrouting verwaltet:

:!: HINWEIS - OHNE IMAP-Server Unterstützung via relay_domains !!!

Defaultwert Neuer Wert
transport_maps = transport_maps = btree:/etc/postfix/transport_maps

:!: HINWEIS - MIT IMAP-Server Unterstützung via relay_domains !!!

Defaultwert Neuer Wert
transport_maps = transport_maps = btree:/etc/postfix/transport_maps, btree:/etc/postfix/relay_domains

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

relocated_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die „Bounce“ an unbekannte e-Mail Empfänger, mit Information über neue e-Mail-Adresse des Empfängers verwaltet:

Defaultwert Neuer Wert
relocated_maps = relocated_maps = btree:/etc/postfix/relocated_maps

:!: HINWEIS Die Speicherung im btree-Format, bietet bessere Performance, als die Speicherung im hash-Format!

header_checks

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Inhaltliche Prüfung des e-Mail Headers verwaltet:

Defaultwert Neuer Wert
header_checks = header_checks = pcre:/etc/postfix/header_checks

:!: HINWEIS Die Speicherung ist im pcre-Format erforderlich!

body_checks

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Inhaltliche Prüfung des e-Mail Bodys verwaltet:

Defaultwert Neuer Wert
body_checks = body_checks = pcre:/etc/postfix/body_checks

:!: HINWEIS Die Speicherung ist im pcre-Format erforderlich!

mime_header_checks

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Inhaltliche Prüfung der e-Mail Anhänge auf bestimmte MIME-Typen verwaltet:

Defaultwert Neuer Wert
mime_header_checks = $header_checks mime_header_checks = pcre:/etc/postfix/mime_header_checks

:!: HINWEIS Die Speicherung ist im pcre-Format erforderlich, und ist schneller als das regexp-Format !

nested_header_checks

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Inhaltliche Prüfung der e-Mail Anhänge auf bestimmte Header-Zeilen, welche ausschließlich angehängt wurden verwaltet:

Defaultwert Neuer Wert
nested_header_checks = $header_checks nested_header_checks = pcre:/etc/postfix/nested_header_checks

:!: HINWEIS Die Speicherung ist im pcre-Format erforderlich, und ist schneller als das regexp-Format !

parent_domain_matches_subdomains

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Definition in welchen Tabellen auch Subdomains, z.B. .tachtler.net mit erfasst werden sollen verwaltet:

Defaultwert Neuer Wert
parent_domain_matches_subdomains = parent_domain_matches_subdomains =
debug_peer_list, debug_peer_list,
fast_flush_domains, fast_flush_domains,
mynetworks, mynetworks,
permit_mx_backup_networks, permit_mx_backup_networks,
qmqpd_authorized_clients, qmqpd_authorized_clients
relay_domains,
smtpd_access_maps

:!: HIWNEIS - Das entfernen von

  • smtpd_access_maps

und ggf. (Bei Nutzung von relay_domains z.B. Anbindung von cyrus_imap via relay_domains)

  • relay_domains

am Ende der Definition bewirkt, dass in den Access-Tabellen nicht

  • Subdomains wie z.B. .tachtler.net (rechner60.dmz.tachtler.net)

sondern nur die tatsächlichen Angaben wie

  • Domains wie z.B. tachtler.net

auch mit erfasst werden!

smtpd_helo_required

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Angabe das eine Client zum Beginn des SMTP-Envelops ein HELO/EHLO send muss bestimmt werden:

Defaultwert Neuer Wert
smtpd_helo_required = no smtpd_helo_required = yes

permit_mx_backup_networks

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Angabe e-Mails zu relayen, aber nur für den MX-Record, der als höchstes aus dem genannten Netzbereich kommt bestimmt werden:

Defaultwert Neuer Wert
permit_mx_backup_networks = permit_mx_backup_networks = 88.217.187.21/32

message_size_limit

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Größe der e-Mail, inklusive aller Anhänge bis zu der eine e-Mail angenommen wird. Größere e-Mails werden abgewiesen! bestimmt werden:

Defaultwert Neuer Wert
message_size_limit = 10240000 message_size_limit = 20480000

smtpd_recipient_restrictions

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Restrictions bestimmt werden:

Defaultwert Neuer Wert
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination Postfix - Resctrictions: Konfiguration

unknown_address_reject_code

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Ablehnungsfehlercode bei verstoß gegen die Restrictions-Prüfungen bestimmt werden:

Defaultwert Neuer Wert
unknown_address_reject_code = 450 unknown_address_reject_code = 550

unknown_client_reject_code

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Ablehnungsfehlercode bei verstoß gegen die Restrictions-Prüfungen bestimmt werden:

Defaultwert Neuer Wert
unknown_client_reject_code = 450 unknown_client_reject_code = 550

unknown_hostname_reject_code

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Ablehnungsfehlercode bei verstoß gegen die Restrictions-Prüfungen bestimmt werden:

Defaultwert Neuer Wert
unknown_hostname_reject_code = 450 unknown_hostname_reject_code = 550

bounce_template_file

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die auszugebende Text-Datei im Falle einer „Bounce“-Meldung bestimmt:

Defaultwert Neuer Wert
bounce_template_file = bounce_template_file = /etc/postfix/bounce.de-DE.cf

:!: HINWEIS Die Speicherung ist im pcre-Format erforderlich, und ist schneller als das regexp-Format !

masquerade_domains

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Umschreibung von intern verwendeten Domains auf eine Domain-Maske bestimmt werden:

Defaultwert Neuer Wert
masquerade_domains = masquerade_domains = tachtler.net

:!: HIWNEIS - Bestimmte Absender können von der Domain-Maskierung ausgenommen werden, wie nachfolgendes Beispiel zeigt:

Beispiel:

masquerade_exceptions = root

address_verify_map

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Speicherung einer Tabelle mit angenommenen und abgelehnten Empfänger e-Mail-Adressen bestimmt werden:

Defaultwert Neuer Wert
address_verify_map = address_verify_map = btree:/var/spool/postfix/data/verify

:!: HIWNEIS - Die Anlage und die Pflege einer Datenbank im btree-Format übernimmt vollständig Postfix !!!

unverified_recipient_reject_code

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Ablehnungsfehlercode bei ungültiger Empfänger e-Mail-Adresse bestimmt werden:

Defaultwert Neuer Wert
unverified_recipient_reject_code = 450 unverified_recipient_reject_code = 577

unverified_sender_reject_code

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Ablehnungsfehlercode bei ungültiger Absender e-Mail-Adresse bestimmt werden:

Defaultwert Neuer Wert
unverified_sender_reject_code = 450 unverified_sender_reject_code = 577

smtpd_discard_ehlo_keyword _address_maps

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Zulassen oder Verschweigen von Delivery Status Notifications (DSN), je nach Herkunft des absendenden Clients bestimmt werden:

Defaultwert Neuer Wert
smtpd_discard_ehlo_keyword_address_maps = smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfixesmtp_access

:!: HIWNEIS - Das cidr-Format wird als ASCII-Datei direkt eingelesen!

smtpd_client_connection_count_limit

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Erlaubte Anzahl von Verbindungen pro Zeiteinheit eines Clients bestimmt werden:

Defaultwert Neuer Wert
smtpd_client_connection_count_limit = 50 smtpd_client_connection_count_limit = 20

smtpd_client_message_rate_limit

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Erlaubte Anzahl von e-Mails pro Zeiteinheit eines Clients bestimmt werden:

Defaultwert Neuer Wert
smtpd_client_message_rate_limit = 0 (unlimitiert) smtpd_client_message_rate_limit = 20

smtpd_client_recipient_rate_limit

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Erlaubte Anzahl von e-Mails pro Zeiteinheit an einen Empfänger/e-Mail-Adresse des eigenen Mail-Servers bestimmt werden:

Defaultwert Neuer Wert
smtpd_client_recipient_rate_limit = 0 (unlimitiert) smtpd_client_recipient_rate_limit = 20

maximal_queue_lifetime

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Zeitintervall in Tagen, wie lange versucht wird eine unzustellbare e-Mail (temporär Fehler des beteiligten Mail-Servers) zuzustellen bestimmt werden:

Defaultwert Neuer Wert
maximal_queue_lifetime = 5d maximal_queue_lifetime = 3d

bounce_queue_lifetime

Angabe der Konfigurationsdatei bzw. Tabelle in der Postfix die Zeitintervall in Tagen, wie lange versucht wird eine bereits „gebouncte“ e-Mail an den Absender zuzustellen bestimmt werden:

Defaultwert Neuer Wert
bounce_queue_lifetime = 5d bounce_queue_lifetime = 3d

Erster Test

Falls vorstehende Änderungen (natürlich an die jeweiligen Bedürfnisse angepasst) durchgeführt wurden, sollte ein Neustart von Postfix mit nachfolgendem Befehl durchgeführt werden:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Anschließend kann mit einem kleinen Test herausgefunden werden, ob lokal erzeugte e-Mails auch lokal Zugestellt werden können, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet) durchgeführt werden soll:

# echo Testmail | /usr/sbin/sendmail root@rechner60.dmz.tachtler.net

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Datei /var/log/maillog
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/sppol/mail/root

Der Inhalte der Log-Datei /var/log/maillog sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# tail -n 9 /var/log/maillog
Jan 18 16:10:16 rechner60 postfix/postfix-script[3456]: stopping the Postfix mail system
Jan 18 16:10:16 rechner60 postfix/master[3411]: terminating on signal 15
Jan 18 16:10:16 rechner60 postfix/postfix-script[3529]: starting the Postfix mail system
Jan 18 16:10:16 rechner60 postfix/master[3530]: daemon started -- version 2.6.6, configuration /etc/postfix
Jan 18 16:12:36 rechner60 postfix/pickup[3532]: 4232A5F114: uid=0 from=<root>
Jan 18 16:12:36 rechner60 postfix/cleanup[3537]: 4232A5F114: message-id=<20120118151236.4232A5F114@mx1.tachtler.net>
Jan 18 16:12:36 rechner60 postfix/qmgr[3533]: 4232A5F114: from=<root@rechner60.dmz.tachtler.net>, size=302, nrcpt=1 (queue active)
Jan 18 16:12:36 rechner60 postfix/local[3540]: 4232A5F114: to=<root@rechner60.dmz.tachtler.net>, relay=local, delay=0.14, delays=0.1/0.02/0/0.03, 
dsn=2.0.0, status=sent (delivered to mailbox)
Jan 18 16:12:36 rechner60 postfix/qmgr[3533]: 4232A5F114: removed

Der Inhalt der im mbox-Format angelegten Datei /var/sppol/mail/root sollte ebenfalls eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# cat /var/spool/mail/root
From root@rechner60.dmz.tachtler.net  Wed Jan 18 16:12:36 2012
Return-Path: <root@rechner60.dmz.tachtler.net>
X-Original-To: root@rechner60.dmz.tachtler.net
Delivered-To: root@rechner60.dmz.tachtler.net
Received: by mx1.tachtler.net (Postfix, from userid 0)
        id 4232A5F114; Wed, 18 Jan 2012 16:12:36 +0100 (CET)
Message-Id: <20120118151236.4232A5F114@mx1.tachtler.net>
Date: Wed, 18 Jan 2012 16:12:36 +0100 (CET)
From: root@rechner60.dmz.tachtler.net (root)
To: undisclosed-recipients:;
 
Testmail

Lookup Tables

Lookup Tables sind Tabellen, welche Konfigurationen enthalten die es erlauben Konfigurationen auch außerhalb der Konfigurationsdatei /etc/postfix/main.cf vorzunehmen. Die Aufteilung auf verschiedene Tabellen garantiert Flexibilität, Übersichtlichkeit und Performancegewinn.

/etc/postfix/virtual_alias_domains

Seit Januar 2003 besteht die Möglichkeit die Tabelle virtual in zwei Dateien aufzuspalten.

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - virtual_alias_domains

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/virtual_alias_domains

wie in nachfolgendem Beispiel gezeigt genutzt werden:

example.com          anything

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

:!: HINWEIS - Der zweite Wert, kann irgendein Eintrag sein, da dieser nicht ausgewertet wird!

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/virtual_alias_domains

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/virtual_alias_domains.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/virtual_alias_domains*
-rw-r--r-- 1 root root    0 Jan 19 09:55 /etc/postfix/virtual_alias_domains
-rw-r--r-- 1 root root 8192 Jan 19 10:05 /etc/postfix/virtual_alias_domains.db

/etc/postfix/virtual_alias_maps

Seit Januar 2003 besteht die Möglichkeit die Tabelle virtual in zwei Dateien aufzuspalten.

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - virtual_alias_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/virtual_alias_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

postmaster@tachtler.net          root@tachtler.net
@example.com                     test@tachtler.net
@example.net                     @example.com
user                             root@tachtler.net                     

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Genau diese e-Mail-Adresse wird umgeschrieben
  2. Alle e-Mails an @example.com werden auf text@example.com umgeschrieben
  3. Alle e-Mails an @example.net werden auf @example.com umgeschrieben
  4. Die User-ID user in den Domains: $myorigin, $mydestination oder IP-Adressen aus inet_interfaces werden an root@tachtler.net umgeschrieben! - Dies gilt NICHT für Domains aus virtual_alias_domains !!!

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/virtual_alias_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/virtual_alias_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/virtual_alias_maps*
-rw-r--r-- 1 root root  102 Jan 19 09:56 /etc/postfix/virtual_alias_maps
-rw-r--r-- 1 root root 8192 Jan 19 10:07 /etc/postfix/virtual_alias_maps.db

:!: HINWEIS - Ein Test, ob die Einträge auch das gewünschte Ergebnis liefern, kann ebenfalls mit dem Befehl

  • postmap

durchgeführt werden.

Nachfolgend eine Beispiel, um die Umschreibung von postmaster zu testen:

# postmap -q "postmaster" btree:/etc/postfix/virtual_alias_maps
root@tachtler.net

/etc/postfix/sender_canonical_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - sender_canonical_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/sender_canonical_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

apache@rechner90.dmz.tachtler.net          webserver@tachtler.net
@rechner60.dmz.tachtler.net                @tachtler.net
root                                       klaus@tachtler.net

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Genau diese e-Mail-Adresse wird umgewandelt
  2. Alle e-Mails von @rechner60.dmz.tachtler.net werden nach @tachtler.net umgewandelt
  3. Die User-ID wird von root nach klaus@tachtler.net umgewandelt

:!: HINWEIS - Seit Postfix Version 2.2 werden standardmäßig NUR lokale e-Mails umgewandelt !!!

Welche Clients als lokal angesehen werden, regelt der Parameter:

  • local_header_rewrite_clients
Defaultwert Neuer Wert
local_header_rewrite_clients = permit_inet_interfaces

Nachfolgende werte können zugewiesen werden:

Wert
permit_inet_interfaces Alle lokal oder vom Server selbst auf (Port 25)
permit_mynetworks Alle Clients aus $mynetworks
permit_sasl_authenticated Alle Clients die sich via SMTP-Auth identifiziert haben
permit_tls_clientcerts Alle Clients die sich via SSL/TLS-Zertifikat authentifiziert haben
permit_tls_all_clientcerts Alle Clients die sich via SSL/TLS-Zertifikat authentifiziert haben
check_address_map typ:tabelle Alle Clients die sich in der als Wert definierten Lookup-Tabelle enthalten sind.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/sender_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/sender_canonical_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/sender_canonical_maps*
-rw-r--r-- 1 root root    0 Jan 19 10:59 /etc/postfix/sender_canonical_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:00 /etc/postfix/sender_canonical_maps.db

/etc/postfix/recipient_canonical_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - recipient_canonical_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/recipient_canonical_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

apache@rechner90.dmz.tachtler.net          webserver@tachtler.net
@rechner60.dmz.tachtler.net                @tachtler.net
root                                       klaus@tachtler.net

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Genau diese e-Mail-Adresse wird umgewandelt
  2. Alle e-Mails für @rechner60.dmz.tachtler.net werden zu @tachtler.net umgewandelt
  3. Die User-ID wird für root zu klaus@tachtler.net umgewandelt

:!: HINWEIS - Seit Postfix Version 2.2 werden standardmäßig NUR lokale e-Mails umgewandelt !!!

Welche Clients als lokal angesehen werden, regelt der Parameter:

  • local_header_rewrite_clients
Defaultwert Neuer Wert
local_header_rewrite_clients = permit_inet_interfaces

Nachfolgende werte können zugewiesen werden:

Wert
permit_inet_interfaces Alle lokal oder vom Server selbst auf (Port 25)
permit_mynetworks Alle Clients aus $mynetworks
permit_sasl_authenticated Alle Clients die sich via SMTP-Auth identifiziert haben
permit_tls_clientcerts Alle Clients die sich via SSL/TLS-Zertifikat authentifiziert haben
permit_tls_all_clientcerts Alle Clients die sich via SSL/TLS-Zertifikat authentifiziert haben
check_address_map typ:tabelle Alle Clients die sich in der als Wert definierten Lookup-Tabelle enthalten sind.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/recipient_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/recipient_canonical_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/recipient_canonical_maps*
-rw-r--r-- 1 root root    0 Jan 19 10:59 /etc/postfix/recipient_canonical_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:01 /etc/postfix/recipient_canonical_maps.db

/etc/postfix/smtp_generic_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - smtp_generic_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/smtp_generic_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

apache@rechner60.dmz.tachtler.net   apache@tachtler.net
@localhost.localdomain              webmaster@tachtler.net

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Genau diese e-Mail-Adresse wird umgewandelt
  2. Alle e-Mails von @localhost.localdomain werden nach außen als webmaster@tachtler.net versendet

:!: HINWEIS - Die Umschreibung bzw. Umwandlung erfolgt wie bei virtual, oder canonical, jedoch erfolgt keine weitere rekursive Auflösung, wie bei den anderen Lookup Tabellen !!!

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/smtp_generic_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/smtp_generic_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/smtp_generic_maps*
-rw-r--r-- 1 root root    0 Jan 19 11:17 /etc/postfix/smtp_generic_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:21 /etc/postfix/smtp_generic_maps.db

/etc/postfix/lmtp_generic_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - lmtp_generic_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/lmtp_generic_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

apache@rechner60.dmz.tachtler.net   apache@tachtler.net
@localhost.localdomain              webmaster@tachtler.net

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Genau diese e-Mail-Adresse wird umgewandelt
  2. Alle e-Mails von @localhost.localdomain werden nach außen als webmaster@tachtler.net versendet

:!: HINWEIS - Die Umschreibung bzw. Umwandlung erfolgt wie bei virtual, oder canonical, jedoch erfolgt keine weitere rekursive Auflösung, wie bei den anderen Lookup Tabellen !!!

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/lmtp_generic_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/lmtp_generic_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/lmtp_generic_maps*
-rw-r--r-- 1 root root    0 Jan 19 11:17 /etc/postfix/lmtp_generic_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:21 /etc/postfix/lmtp_generic_maps.db

/etc/postfix/relay_domains

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgenden Links beschrieben –>

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/relay_domains

wie in nachfolgendem Beispiel gezeigt genutzt werden:

tachtler.net          lmtp:inet[192.168.0.80]:24

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. … Relay (Weiterleiten) aller e-Mails der Domain tachtler.net via LMTP und an die IP-Adresse 192.168.0.70 auf Port: 24

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/relay_domains

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/relay_domains.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/relay_domains*
-rw-r--r-- 1 root root   39 Feb  6 14:08 /etc/postfix/relay_domains
-rw-r--r-- 1 root root 8192 Feb  6 14:08 /etc/postfix/relay_domains.db

/etc/postfix/transport_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - transport_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/transport_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

.example.com          smtp:tachtler.net
syslog.tachtler.net   smtp:[mx1.tachtler.net]
localhost.localdomain lmtp:
root@tachtler.net     smtp:[mx1.tachtler.net]:26
vacation.tachtler.net vacation:
tachtler.de           error:tachtler.de not available on this mailserver!
noreply@tachtler.net  discard:

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. Alle e-Mails von allen Subdomains gehen an den Mail-Server von tachtler.net - MX-Lookup - dig tachtler.net MX
  2. Alle e-Mails von syslog.tachtler.net gehen an den Mail-Server mx1.tachtler.net - A-Record - dig mx1.tachtler.net
  3. Alle e-Mials von localhost.localdomain werden via LMTP weitergereicht
  4. Alle e-Mails von root@tachtler.net gehen an den Mail-Server mx1.tachtler.net - A-Record - dig mx1.tachtler.net - Port: 26
  5. Alle e-Mails von vacation.tachtler.net gehen an das Postfix-Modul - vacation
  6. Alle e-Mails von tachtler.de gehen an das Postfix-Modul - error inklusive Fehlermeldung
  7. Alle e-Mails von noreply@tachtler.de gehen an das Postfix-Modul - discard = /dev/null

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/transport_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/transport_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/transport_maps*
-rw-r--r-- 1 root root    0 Jan 19 11:43 /etc/postfix/transport_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:43 /etc/postfix/transport_maps.db

/etc/postfix/relocated_maps

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - relocated_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/relocated_maps

wie in nachfolgendem Beispiel gezeigt genutzt werden:

klaus.tachtler@tachtler.net           klaus@tachtler.net
@example.com                          root@tachtler.net

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Erklärung:

  1. „Bounce“-Ergänzung bei e-Mail an klaus.tachtler@tachtler.net mit dem Hinweis user has moved to klaus@tachtler.net
  2. „Bounce“-Ergänzung bei @example.com mit dem Hinweis user has moved to root@tachtler.net

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/relocated_maps

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/relocated_maps.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/relocated_maps*
-rw-r--r-- 1 root root    0 Jan 19 11:55 /etc/postfix/relocated_maps
-rw-r--r-- 1 root root 8192 Jan 19 11:55 /etc/postfix/relocated_maps.db

/etc/postfix/header_checks

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - header_checks

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/header_checks

wie in nachfolgendem Beispiel gezeigt genutzt werden:

/^Subject:.*100\% Free/               REJECT Header-Spamschutzregel 1000
/^From:.*spammer@domain\.de/          REJECT Header-Spamschutzregel 1001
/^X-Mailer:.*Microsoft/               REJECT Header-Spamschutzregel 1002

Erklärung:

  1. Es wurde im Feld Subject der e-Mail der Begriff 100% Free gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz
  2. Es wurde im Feld From der e-Mail der Begriff spammer@domain.de gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz
  3. Es wurde im Feld X-Mailer der e-Mail der Begriff Microsoft gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden!

/etc/postfix/body_checks

Damit Postfix dies Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - body_checks

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/body_checks

wie in nachfolgendem Beispiel gezeigt genutzt werden:

/.*spam\.(org|net|com)/               REJECT Body-Spamschutzregel 1000
/.*viagra/                            REJECT Body-Spamschutzregel 1001

Erklärung:

  1. Es wurde im Text der e-Mail der Begriff z.B. spam.org gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz
  2. Es wurde im Text der e-Mail der Begriff viagra gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden!

/etc/postfix/mime_header_checks

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - mime_header_checks

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/mime_header_checks

wie in nachfolgendem Beispiel gezeigt genutzt werden:

/name=\"?(.*)\.(exe|bat)\"?$/         REJECT Body-Spamschutzregel 1000
/name=[^>]screensaver\.zip/           REJECT Body-Spamschutzregel 1001

Erklärung:

  1. Es wurde der MIME-Type z.B. exe in der e-Mail gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz
  2. Es wurde der MIME-Type z.B. screensaver.zip in der e-Mail gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden!

/etc/postfix/nested_header_checks

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - nested_header_checks

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/nested_header_checks

wie in nachfolgendem Beispiel gezeigt genutzt werden:

/^X-Horde:.*Version: 3.0/         REJECT X-Header-Spamschutzregel 1000

Erklärung:

  1. Es wurde im Feld X-Horde der e-Mail der Begriff Version: 3.0 gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden!

/var/sool/postfix/data/verify

Damit Postfix diese Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - address_verify_map

Damit die Tabelle im btree-Format angelegt werden kann ist ein Verzeichnis mit dem Namen

  • /var/spool/postfix/data

mit nachfolgendem Befehl anzulegen:

# mkdir /var/spool/postfix/data

Anschließend müssen die Besitzrechte mit nachfolgendem Befehl, wie folgt gesetzt werden:

# chown -R postfix:root /var/spool/postfix/data

Abschließend sollten noch die Dateirechte entsprechend mit nachfolgendem Befehl gesetzte werden:

# chmod -R 700 /var/spool/postfix/data

Falls die oben genannte Änderung durchgeführt wurde, wird die Tabelle

  • /var/sool/postfix/data/verify.db

automatisch von Postfix angelegt und gepflegt !!!

:!: WICHTIG - Eine Text-Datei gibt es NICHT and kann damit auch nicht via postmap umgewandelt werden!

:!: HINWEIS - Weitere Optionen im Zusammenhang mit address_verify_maps sind mit nachfolgendem Befehl zu ermitteln:

postconf -d | egrep 'address_verify_positive_[r|e]|address_verify_negative_[r|e]|address_verify_sender ' 
address_verify_negative_expire_time = 3d
address_verify_negative_refresh_time = 3h
address_verify_positive_expire_time = 31d
address_verify_positive_refresh_time = 7d
address_verify_sender = $double_bounce_sender

Erklärung:

  1. Zeitintervall nach dem das verify-Modul eine nicht erfolgreich überprüfte e-Mail-Adresse aus dem Speicher gelöscht wird
  2. Zeitintervall nach dem das verify-Modul eine nicht erfolgreich überprüfte nochmals beim Zielserver überprüft
  3. Zeitintervall nach dem das verify-Modul eine gespeicherte e-Mail-Adresse, welche nicht mehr beim Zielserver angefragt wurde, löscht
  4. Zeitintervall nach dem das verify-Modul einen bereits als existente gespeichert e-Mail-Adresse erneut beim Zielserver anfragen wird
  5. Name des SMTP-Envelop-From, standardmäßig double-bounce

Um nach einer erfolgreichen Überprüfung einer Empfänger e-Mail-Adresse, das Ergebnis in der Tabelle

  • /var/sool/postfix/data/verify

anzeigbar zu machen, kann nachfolgender Befehl verwendet werden:

# postmap -s btree:/var/spool/postfix/data/verify
root@tachtler.net       0:0:1327335627:delivers to mailbox

Um ggf. eine e-Mail-Adresse aus der Datenbank zu löschen, kann nachfolgender Befehl genutzt werden

# postmap -d root@tachtler.net btree:/var/spool/postfix/data/verify

:!: HIWNEIS - E-Mails, die an einen nicht existierenden Empfänger eingeliefert werden sollen, werden normalerweise mit einem

  • temporären Fehlercode (450)

abgewiesen.

Falls dies nicht temporär geschehen soll, sondern was viel sinnvoller wäre - permanent geschehen soll, kann dies mit nachfolgenden Ergänzungen durchgeführt werden, welche unter nachfolgendem Link beschrieben sind –> main.cf - unverified_recipient_reject_code

/etc/postfix/bounce.de-DE.cf

Dies ist eine Template-Datei (Vorlagen-Datei) für deutsch/english sprachige Texte beim bounce (Rückgabe) einer e-Mail.

Diese Template-Datei kann unter folgendem Link heruntergeladen werden:

und hat folgenden Inhalt:

# $Id: bounce.de-DE.cf 15 2005-12-27 18:33:49Z patrick $
#
# Deutsch-sprachige Vorlagen fuer Postfix Zustell-Status-Benachrichtigungen
# (engl. DSN, Delivery Status Notification)
#
# Uebersetzt und an die deutsche Sprache angepasst von Patrick Koetter
# <p@state-of-mind.de> und Ralf Hildebrandt <ralf.hildebrandt@charite.de>.
#
# Folgen Sie den Anweisungen der bounce(5) manual page, um die in dieser Datei
# enthaltenen Zustell-Status-Benachrichtigungen in Ihren Postfix-Server
# einzubinden.
 
 
# failure_template
# Das failure_template kommt zum Einsatz, wenn der empfangende Mail-Server die
# Nachricht entweder zurueckgewiesen hat oder wenn die Nachricht nicht
# innerhalb eines vorgegebenen Zeitraums ($maximal_queue_lifetime) zugestellt
# werden konnte.
#
# In beiden Faellen wird der Inhalt von failure_template zusammen mit der
# urspruenglich gesendeten Nachricht und dem Fehler, der die Benachrichtigung
# hervorgerufen hat an den Absender der E-Mail gesendet.
 
failure_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Rueckgabe nicht zustellbarer Nachricht an Absender
Postmaster-Subject: Postmaster Copy: Undelivered Mail
 
Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:
 
 
    Ihre Nachricht konnte an einen oder mehrere Empfaenger nicht zugestellt
    werden. Ein Problem-Bericht, sowie Ihre uspruengliche Nachricht wurden an
    das Ende dieser Nachricht angehaengt.
 
 
Fuer weitere Hilfe kontaktieren Sie bitte den fuer Sie zustaendigen
<postmaster>.
 
Senden Sie dazu den an diese E-Mail angefuegten Problem-Bericht mit.
Den Inhalt Ihrer urspruenglichen Nachricht koennen Sie - zum Schutz Ihrer
Privatsphaere - entfernen; er ist fuer eine Fehler-Diagnose nicht zwingend
notwendig.
 
                      Der $mail_name E-Mail-Dienst
 
                        INTERNATIONAL VERSION
 
This is the $mail_name program at host $myhostname.
 
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
 
For further assistance, please send mail to <postmaster>
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
EOF
 
 
# delay_template
# Das delay_template kommt zum Einsatz, wenn sich die Zustellung einer
# Nachricht verzoegert - die Zustellung wird so lange versucht, bis der Postfix
# Server sie wegen Ueberschreitung der $maximal_queue_lifetime abbrechen muss.
#
# Anmerkung:
# Die Standardvorgaben in Postfix sehen vor, dass Zustell-Verzoegerungen in
# Stunden ($delay_warning_time_hours) und die maximale Lebenszeit einer
# Nachricht in der Postfix Zustell-Warteschlange in Tagen
# ($maximal_queue_lifetime_days) angegeben werden.
#
# Alternativ koennen Sie anstatt der genannten Zeiteinheiten auch Sekunden,
# Minuten oder Wochen angeben, indem Sie die aktuelle Zeiteinheit des
# Parameters durch _seconds, _minutes oder _weeks austauschen und den
# begleitenden Text in der Vorlage anpassen.
 
delay_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Nachricht wurde verzoegert (Zustellung wird weiter versucht)
Postmaster-Subject: Postmaster Warning: Delayed Mail
 
Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:
 
 
    Eine von Ihnen gesendete Nachricht konnte seit $delay_warning_time_hours
    Stunden nicht zugestellt werden.
 
    Sie muessen die Nachricht nicht noch einmal senden. Der $mail_name
    E-Mail-Dienst wird so lange versuchen Ihre Nachricht zuzustellen,
    bis sie $maximal_queue_lifetime_days Tage alt ist.
 
    Sollte eine Zustellung bis in $maximal_queue_lifetime_days Tagen nicht
    gelingen, wird der $mail_name E-Mail-Dienst die Zustellung abbrechen und
    Sie davon in Kenntnis setzen.
 
 
Fuer weitere Hilfe kontaktieren Sie bitte den fuer Sie zustaendigen
<postmaster>.
 
Senden Sie dazu den, in dieser E-Mail angefuegten, Problem-Bericht mit.
Den Inhalt Ihrer urspruenglichen Nachricht koennen Sie, zum Schutz Ihrer
Privatsphaere, entfernen; er ist fuer eine Fehler-Diagnose nicht zwingend
notwendig.
 
                      Der $mail_name E-Mail-Dienst
 
 
                        INTERNATIONAL VERSION
 
This is the $mail_name program at host $myhostname.
 
####################################################################
# THIS IS A WARNING ONLY.  YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
####################################################################
 
Your message could not be delivered for $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.
 
For further assistance, please send mail to <postmaster>
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
                      The $mail_name program
EOF
 
 
# success_template
# Das success_template kommt zum Einsatz, wenn eine Nachricht an ein Postfach
# zugestellt wurde, wenn ein Alias-Name oder eine Liste von Empfaengern in ihre
# Zieladressen aufgeloest wurde oder wenn eine Nachricht an ein System
# zugestellt wurde, das im Dialog mit Ihrem Postfix-Server keine
# DSN-Faehigkeiten erkennen lies.
#
# Achtung:
# Sie duerfen fuer diese Art von Zustell-Status-Benachrichtigung kein
# Postmaster-Subject: angeben.
 
success_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Bericht ueber erfolgreiche Zustellung
 
Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:
 
 
    Ihre Nachricht wurde erfolgreich an die E-Mail-Server der am Ende dieser
    E-Mail aufgelisteten Empfaenger ausgeliefert.
 
    Falls Sie eine Zustellbericht angefordet haben und der empfangende
    E-Mail-Server diese Funktionalitaet unterstuetzt erhalten Sie
    auch von diesem E-Mail-Server eine entsprechende Benachrichtigung.
 
 
                      Der $mail_name E-Mail-Dienst
 
 
                        INTERNATIONAL VERSION
 
This is the $mail_name program at host $myhostname.
 
Your message was successfully delivered to the destination(s)
listed below. If the message was delivered to mailbox you will
receive no further notifications. Otherwise you may still receive
notifications of mail delivery errors from other systems.
 
                      The $mail_name program
EOF
 
 
# verify_template
# Das verify_template kommt zum Einsatz, wenn Adress-Ueberpruefung (sendmail
# -bv adresse...) oder ausfuehrliche Protokollierung (sendmail -v adresse...)
# angefordert wurde.
#
# Achtung:
# Sie duerfen fuer diese Art von Zustell-Status-Benachrichtigung kein
# Postmaster-Subject: angeben.
 
verify_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Zustellbericht (Mail Delivery Status Report)
 
Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:
 
 
    Sie haben einen Empfaenger-Adressen-Bericht angefordert. Der Bericht wurde
    an diese Nachricht angehaengt.
 
 
                      Der $mail_name E-Mail-Dienst
 
 
                        INTERNATIONAL VERSION
 
This is the $mail_name program at host $myhostname.
 
Enclosed is the mail delivery report that you requested.
 
                      The $mail_name program
EOF

Restrictions: Grundlagen

Mit der Definition von Restrictions (Einschränkungen), wird Postfix in die Lage versetzt, Entscheidungen zu treffen, was mit e-Mails passieren soll, die dem Mail-Server zur Einlieferung angeboten werden.

Für die Annahme von e-Mails via SMTP ist das Postfix-Modul

  • smtpd

zuständig.

Für jeden Schritt den der Client beim Einlieferungsprozess durchläuft, besitzt smtpd eine eigene Restriction, die Postfix durchläuft, um entweder zu einem positiven oder negativen Ergebnis zu kommen.

Nachfolgende Tabelle zeigt eine Übersicht der Restrictions:

Name der Restriction Beschreibung der Restriction
smtpd_client_restrictions Prüfung, nach dem Connect
smtpd_helo_restrictions Prüfung, nach dem HELO/EHLO
smtpd_sender_restrictions Prüfung, nach MAIL FROM:…
smtpd_recipient_restrictions Prüfung, nach RCPT TO:…
smtpd_data_restrictions Prüfung, nach DATA
smtpd_end_of_data_restrictions Prüfung, nach erfolgter e-Mail Übertragung

:!: WICHTIG - Die Restrictions werden nacheinander durchlaufen und ähnlich wie bei iptables, gilt auch hier, falls ein Restriction einen Treffer erzielt, werden keine weiteren Überprüfungen innerhalb der entsprechenden Restriction mehr durchgeführt!

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - REJECT:

  • Führt innerhalb einer Restriction eine Überprüfung zu einem REJECT, fährt Postfix zunächst im SMTP-Dialog scheinbar weiter fort, um den Client nicht zu verwirren.
  • Erst nach der Angabe von RCPT TO:… würde bei einem vorhergehenden REJECT die Ablehnung der e-Mail erfolgen.

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - OK:

  • Führt innerhalb einer Restriction eine Überprüfung zu einem OK, so gilt nur diese Restriction als bestanden und es werden keine weiteren Überprüfung innerhalb dieser Restriction durchgeführt.
  • Anschließend fährt Postfix mit der nächsten Restriction und deren Überprüfung fort.

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - DUNNO:

  • Führt innerhalb einer Restriction die Überprüfung weder zu einem REJECT noch zu einem OK - sprich zu einem DUNNO, wird die nächste Überprüfung innerhalb der Restriction durchgeführt.

:!: WICHTIG - Erst nach dem der Client die smtpd_recipient_restrictions erfolgreich hinter sich gelassen hat, darf die Übertragung des Inhalts der e-Mail mit dem DATA-Kommando erfolgen.

Falls nun auch die Überprüfungen der

  • header_checks
  • body_checks
  • mime_header_checks
  • nested_header_checks

erfolgreich abgeschlossen werden kann, wird die e-Mail angenommen.

:!: WICHTIG - Die smtpd_recipient_restrictions Überprüfungen werden bei jedem Empfänger = RCPT TO:… durchgeführt !!!

Fazit

Aufgrund des vorhergehend beschrieben Verfahrens der e-Mail Annahme bzw. Ablehnung, sind folgende Erkenntnisse zu beachten und sollten zu nachfolgend dargestellten Ergebnis führen:

  1. Bei genauer Analyse der Prozedur ist festzustellen, dass die nachfolgend genannten ersten drei Restrictions, streng genommen keine Rolle spielen:
    1. smtpd_client_restrictions
    2. smtpd_helo_restrictions
    3. smtpd_sender_restrictions
  2. Ein positives Ergebnis in den ersten drei Restrictions führt nicht automatisch zur Annahme der e-Mail, nur zur positiven Beendigung von einer der jeweiligen ersten drei Restrictions. Jede positive Überprüfung in einer der jeweiligen ersten drei Restrictions müsste in der jeweils nachfolgenden Restriction wiederholt werden - oder gleich in der vierten Restriction durchgeführt werden.
  3. Ein negatives Ergebnis in den ersten drei Restrictions führt nicht zu einer sofortigen Ablehnung der e-Mail. Es werden weiterhin alle Restrictions bis zur vierten Restriction durchlaufen, auch wenn schon klar ist, das die e-Mail nicht angenommen wird ist dies der Fall um einen Client nicht zu verwirren.

:!: WICHTIG - Da in jedem Fall immer bis zur vierten Restriction alle Prüfungen durchgeführt werden, sollten alle Prüfungen NUR in

  • smtpd_recipient_restrictions

statt finden !!!

Restrictions: Konfiguration

Aufgrund der aktuellen Erkenntnisse und Feststellungen, sollten nun alle Prüfungen nur in

  • smtpd_recipient_restrictions

statt finden.

Die Nachfolgende „Musterlösung“, stammt fast ausschließlich aus Das Postfix Buch, von Peer Heinlein - http://www.postfixbuch.de/.

...
# Restrictions
#
smtpd_recipient_restrictions =
# Postmaster, abuse and other RFC or important ROLE-Accounts - Whitelisting
        check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,
# White- and Blacklisting
        check_client_access cidr:/etc/postfix/check_client_access,
        check_helo_access btree:/etc/postfix/check_helo_access,
        check_sender_access btree:/etc/postfix/check_sender_access,
        check_recipient_access btree:/etc/postfix/check_recipient_access,
# Accept NO unclean e-Mail
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
# Allow OWN USERS
        permit_sasl_authenticated,
        permit_mynetworks,
# RBL checks (or only by policyd-weight possible)
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,    
        reject_rhsbl_client multi.uribl.com,
# Check dynamicaly existing Relay-Recipient
        reject_unverified_recipient,
# Allow Backup-MX
        permit_mx_backup,
# Deny all other Relaying
        reject_unauth_destination,
# All else
        permit

:!: WICHTIG - Um die vorhergehende „Musterlösung“ einsetzen zu können, sind nachfolgende check-Tabellen erforderlich!

/etc/postfix/check_recipient_access_rfc

Der Inhalt der check-Tabelle

  • /etc/postfix/check_recipient_access_rfc

sollte ein RFC-1142-konformes - Whitelisting von nachfolgenden e-Mail-Adressen enthalten:

postmaster@     permit_auth_destination
webmaster@      permit_auth_destination
abuse@          permit_auth_destination

Möglicherweise sollten auch noch weitere e-Mail-Adressen Inhalt dieser check-Tabelle sein, wie z.B.

  • support@
  • admin@
  • helpdesk@

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_recipient_access_rfc

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/check_recipient_access_rfc.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/check_recipient_access_rfc*
-rw-r--r-- 1 root root  120 Jan 20 09:04 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Jan 20 09:04 /etc/postfix/check_recipient_access_rfc.db

/etc/postfix/check_client_access

Der Inhalt der check-Tabelle

  • /etc/postfix/check_client_access

kann z.B. IP-Adressen beinhalten, welche von der Einlieferung ausgeschlossen werden sollen.

Falls der Inhalt auf Basis von IP-Adressen erfolgen soll, könnte die check-Tabelle wie folgt aussehen:

172.16.0.0/12           REJECT

Erklärung:

  1. Der „private“ Adressbereich 172.16.0.0/12 soll gesperrt werden, da diese im internen Netzwerk nicht vorkommen (dürften).

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden, falls das cidr-Format verwendet wird !

/etc/postfix/check_helo_access

Der Inhalt der check-Tabelle

  • /etc/postfix/check_helo_access

kann dazu verwendet werden, nach dem HELO/EHLO und dem darin genannten FQDN eine Prüfung zu veranlassen

spammer.org             REJECT

Erklärung:

  1. Die Angabe von spammer.org als HELO/EHLO-Angabe führt zur Ablehnung der Einlieferung einer e-Mail.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_helo_access

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/check_helo_access.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/check_helo_access*
-rw-r--r-- 1 root root    0 Jan 20 09:48 /etc/postfix/check_helo_access
-rw-r--r-- 1 root root 8192 Jan 20 09:49 /etc/postfix/check_helo_access.db

/etc/postfix/check_sender_access

Der Inhalt der check-Tabelle

  • /etc/postfix/check_sender_access

kann dazu verwendet werden, die bei der Einlieferung verwendete Absender e-Mail-Adresse zu Überprüfen.

spammer.org             554 You not already
someuser@tld.de         REJECT

Erklärung:

  1. Falls der Absender Teil der Domain spammer.org ist, würde dieser mit einer Fehlermeldung und zusätzlicher Fehlerbeschreibung an der Einlieferung einer e-Mail gehindert werden.
  2. Dem Absender mit der e-Mail-Adresse someuser@tld.de wird nicht erlaubt eine e-Mail einzuliefern.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_sender_access

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/check_sender_access.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/check_sender_access*
-rw-r--r-- 1 root root    0 Jan 20 10:02 /etc/postfix/check_sender_access
-rw-r--r-- 1 root root 8192 Jan 20 10:02 /etc/postfix/check_sender_access.db

/etc/postfix/check_recipient_access

Der Inhalt der check-Tabelle

  • /etc/postfix/check_recipient_access

kann dazu verwendet werden, die bei der Einlieferung verwendete Empfänger e-Mail-Adresse zu Überprüfen.

klaus-der-spammer@tachtler.net         REJECT

Erklärung:

  1. An die Empfänger e-Mail-Adresse klaus-der-spammer@tachtler.net wird nicht erlaubt eine e-Mail zu senden.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_recipient_access

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/check_recipient_access.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/check_recipient_access*
-rw-r--r-- 1 root root    0 Jan 20 10:10 /etc/postfix/check_recipient_access
-rw-r--r-- 1 root root 8192 Jan 20 10:10 /etc/postfix/check_recipient_access.db
-rw-r--r-- 1 root root  120 Jan 20 09:04 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Jan 20 09:04 /etc/postfix/check_recipient_access_rfc.db

SASL-Authentication

Um eine Authentifizierung beim einliefern von e-Mails am Postfix-Mailserver zu realisieren, kann nachfolgende Konfiguration genutzt werden.

Hier soll mit

  • cyrus-sasl
  • Modul: auxprop

Variante 1:

  • Backend: ldapdb

Variante 2:

  • Backend: sql

zum Einsatz kommen.

:!: HINWEIS - Aufgrund von Compiler-Einstellungen, sollten NICHT BEIDE Pakete

  • cyrus-sasl-ldap
  • cyrus-sasl-sql

GLEICHZEITIG installiert sein !!!

Nachfolgende rpm-Pakete müssen dafür zuerst installiert werden:

Installation: cyrus-sasl-plain

Der Postfix-Mailserver, beherrscht verschiedene Methoden zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten. Ein dieser Methoden ist die Authentifizierung durch „Klartext“-Passwörter (welche die Übertragungsart des Passworts bezeichnet).

Zur Installation der Authentifizierungsmethode plain durch den Postfix-Mailserver wird nachfolgendes Paket benötigt:

  • cyrus-sasl-plain - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-plain installiert:

# yum install cyrus-sasl-plain
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-plain.x86_64 0:2.1.23-8.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                 Arch          Version                Repository   Size
================================================================================
Installing:
 cyrus-sasl-plain        x86_64        2.1.23-8.el6           base         30 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 30 k
Installed size: 33 k
Is this ok [y/N]: y
Downloading Packages:
cyrus-sasl-plain-2.1.23-8.el6.x86_64.rpm                 |  30 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : cyrus-sasl-plain-2.1.23-8.el6.x86_64                         1/1 

Installed:
  cyrus-sasl-plain.x86_64 0:2.1.23-8.el6                                        

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-plain installiert wurden.

# rpm -qil cyrus-sasl-plain
Name        : cyrus-sasl-plain             Relocations: (not relocatable)
Version     : 2.1.23                            Vendor: CentOS
Release     : 8.el6                         Build Date: Thu 11 Nov 2010 05:11:37 AM CET
Install Date: Fri 09 Dec 2011 01:16:59 PM CET      Build Host: c6b3.bsys.dev.centos.org
Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-8.el6.src.rpm
Size        : 34000                            License: BSD
Signature   : RSA/8, Sun 03 Jul 2011 06:09:12 AM CEST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : PLAIN and LOGIN authentication support for Cyrus SASL
Description :
The cyrus-sasl-plain package contains the Cyrus SASL plugins which support
PLAIN and LOGIN authentication schemes.
/usr/lib64/sasl2/liblogin.so
/usr/lib64/sasl2/liblogin.so.2
/usr/lib64/sasl2/liblogin.so.2.0.23
/usr/lib64/sasl2/libplain.so
/usr/lib64/sasl2/libplain.so.2
/usr/lib64/sasl2/libplain.so.2.0.23

Installation: cyrus-sasl-md5

Der Postfix-Mailserver, beherrscht verschiedene Methoden zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten. Ein dieser Methoden ist die Authentifizierung durch auf dem Algorithmus von „MD5-Verschlüsselten“-Passwörter (CRAM-MD5 und DIGEST-MD5) (welche die Übertragungsart des Passworts bezeichnet).

Zur Installation der Authentifizierungsmethode CRAM-MD5 und DIGEST-MD5 durch den Postfix-Mailserver wird nachfolgendes Paket benötigt:

  • cyrus-sasl-md5 - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-md5 installiert:

# yum install cyrus-sasl-md5
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-md5.x86_64 0:2.1.23-8.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                Arch           Version               Repository    Size
================================================================================
Installing:
 cyrus-sasl-md5         x86_64         2.1.23-8.el6          base          46 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 46 k
Installed size: 67 k
Is this ok [y/N]: y
Downloading Packages:
cyrus-sasl-md5-2.1.23-8.el6.x86_64.rpm                   |  46 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : cyrus-sasl-md5-2.1.23-8.el6.x86_64                           1/1 

Installed:
  cyrus-sasl-md5.x86_64 0:2.1.23-8.el6                                          

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-md5 installiert wurden.

# rpm -qil cyrus-sasl-md5
Name        : cyrus-sasl-md5               Relocations: (not relocatable)
Version     : 2.1.23                            Vendor: CentOS
Release     : 8.el6                         Build Date: Thu 11 Nov 2010 05:11:37 AM CET
Install Date: Fri 09 Dec 2011 01:18:40 PM CET      Build Host: c6b3.bsys.dev.centos.org
Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-8.el6.src.rpm
Size        : 68592                            License: BSD
Signature   : RSA/8, Sun 03 Jul 2011 06:09:09 AM CEST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : CRAM-MD5 and DIGEST-MD5 authentication support for Cyrus SASL
Description :
The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support
CRAM-MD5 and DIGEST-MD5 authentication schemes.
/usr/lib64/sasl2/libcrammd5.so
/usr/lib64/sasl2/libcrammd5.so.2
/usr/lib64/sasl2/libcrammd5.so.2.0.23
/usr/lib64/sasl2/libdigestmd5.so
/usr/lib64/sasl2/libdigestmd5.so.2
/usr/lib64/sasl2/libdigestmd5.so.2.0.23

Installation: cyrus-sasl-ldap

:!: HINWEIS - Aufgrund von Compiler-Einstellungen, sollten NICHT BEIDE Pakete

  • cyrus-sasl-ldap
  • cyrus-sasl-sql

GLEICHZEITIG installiert sein !!!

Der Postfix-Mailserver, soll mit einer Anbindung an LDAP zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten betrieben werden.

Wie ein OpenLDAP-Server installiert und grundlegend konfiguriert werden kann, kann unter nachfolgendem Link innerhalb dieses DokuWiki nachgelesen werden:

:!: HINWEIS - Die Konfiguration des Postfix-Mailserver soll nachfolgend NUR gegen LDAP erfolgen!

Zur Installation einer LDAP-Anbindung des Postfix-Mailserver wird nachfolgendes Paket benötigt:

  • cyrus-sasl-ldap - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-ldap installiert:

# yum install cyrus-sasl-ldap
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-ldap.x86_64 0:2.1.23-8.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                 Arch           Version              Repository    Size
================================================================================
Installing:
 cyrus-sasl-ldap         x86_64         2.1.23-8.el6         base          28 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 28 k
Installed size: 18 k
Is this ok [y/N]: y
Downloading Packages:
cyrus-sasl-ldap-2.1.23-8.el6.x86_64.rpm                  |  28 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : cyrus-sasl-ldap-2.1.23-8.el6.x86_64                          1/1 

Installed:
  cyrus-sasl-ldap.x86_64 0:2.1.23-8.el6                                         

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-ldap installiert wurden.

# rpm -qil cyrus-sasl-ldap
Name        : cyrus-sasl-ldap              Relocations: (not relocatable)
Version     : 2.1.23                            Vendor: CentOS
Release     : 8.el6                         Build Date: Thu 11 Nov 2010 05:11:37 AM CET
Install Date: Fri 09 Dec 2011 01:20:08 PM CET      Build Host: c6b3.bsys.dev.centos.org
Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-8.el6.src.rpm
Size        : 18240                            License: BSD
Signature   : RSA/8, Sun 03 Jul 2011 06:09:05 AM CEST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : LDAP auxprop support for Cyrus SASL
Description :
The cyrus-sasl-ldap package contains the Cyrus SASL plugin which supports using
a directory server, accessed using LDAP, for storing shared secrets.
/usr/lib64/sasl2/libldapdb.so
/usr/lib64/sasl2/libldapdb.so.2
/usr/lib64/sasl2/libldapdb.so.2.0.23

Installation: cyrus-sasl-sql

:!: HINWEIS - Aufgrund von Compiler-Einstellungen, sollten NICHT BEIDE Pakete

  • cyrus-sasl-ldap
  • cyrus-sasl-sql

GLEICHZEITIG installiert sein !!!

Der Postfix-Mailserver, soll mit einer Anbindung an SQL-Datenbank zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten betrieben werden.

:!: HINWEIS - Die Konfiguration des Postfix-Mailserver soll nachfolgend NUR gegen eine SQL-Datenbank erfolgen!

Zur Installation einer SQL-Datenbank-Anbindung des Postfix-Mailserver wird nachfolgendes Paket benötigt:

  • cyrus-sasl-sql - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-sql installiert:

# yum install cyrus-sasl-sql
Loaded plugins: fastestmirror
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-sql.x86_64 0:2.1.23-13.el6_3.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch          Version                  Repository   Size
================================================================================
Installing:
 cyrus-sasl-sql        x86_64        2.1.23-13.el6_3.1        base         32 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 32 k
Installed size: 26 k
Is this ok [y/N]: y
Downloading Packages:
cyrus-sasl-sql-2.1.23-13.el6_3.1.x86_64.rpm              |  32 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : cyrus-sasl-sql-2.1.23-13.el6_3.1.x86_64                      1/1 
  Verifying  : cyrus-sasl-sql-2.1.23-13.el6_3.1.x86_64                      1/1 

Installed:
  cyrus-sasl-sql.x86_64 0:2.1.23-13.el6_3.1                                     

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-sql installiert wurden.

# rpm -qil cyrus-sasl-sql
Name        : cyrus-sasl-sql               Relocations: (not relocatable)
Version     : 2.1.23                            Vendor: CentOS
Release     : 13.el6_3.1                    Build Date: Tue 27 Nov 2012 12:49:36 PM CET
Install Date: Fri 28 Mar 2014 11:12:41 AM CET      Build Host: c6b9.bsys.dev.centos.org
Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6_3.1.src.rpm
Size        : 27000                            License: BSD
Signature   : RSA/SHA1, Tue 27 Nov 2012 01:18:58 PM CET, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : SQL auxprop support for Cyrus SASL
Description :
The cyrus-sasl-sql package contains the Cyrus SASL plugin which supports
using a RDBMS for storing shared secrets.
/usr/lib64/sasl2/libsql.so
/usr/lib64/sasl2/libsql.so.2
/usr/lib64/sasl2/libsql.so.2.0.23

SASL-Module: Prüfung

Um keine Meldungen wie nachfolgend gezeigt bei der Prüfung mittels

  • /usr/sbin/pluginviewer

in der LOG-Datei

  • /var/log/messages

zu erhalten:

Apr  8 06:18:45 rechner60 pluginviewer: sql_select option missing
Apr  8 06:18:45 rechner60 pluginviewer: auxpropfunc error no mechanism available

sollte nachfolgende Konfigurationsdatei - neu - angelegt werden und nachfolgenden DUMMY-Inhalt enthalten:

  • /etc/sasl2/pluginviewer.conf

:!: HINWEIS - Nur erforderlich bei der Verwendung von cyrus-sasl-sql !!!:

(Komplette Konfigurationsdatei)

sql_select: dummy

Mit nachfolgendem Befehl kann überprüft werden, welche SASL-Module installiert sind:

# /usr/sbin/pluginviewer
Installed SASL (server side) mechanisms are:
PLAIN CRAM-MD5 ANONYMOUS DIGEST-MD5 LOGIN EXTERNAL
List of server plugins follows
Plugin "plain" [loaded],        API version: 4
        SASL mechanism: PLAIN, best SSF: 0, supports setpass: no
        security flags: NO_ANONYMOUS
        features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
Plugin "crammd5" [loaded],      API version: 4
        SASL mechanism: CRAM-MD5, best SSF: 0, supports setpass: no
        security flags: NO_ANONYMOUS|NO_PLAINTEXT
        features: SERVER_FIRST
Plugin "anonymous" [loaded],    API version: 4
        SASL mechanism: ANONYMOUS, best SSF: 0, supports setpass: no
        security flags: NO_PLAINTEXT
        features: WANT_CLIENT_FIRST
Plugin "digestmd5" [loaded],    API version: 4
        SASL mechanism: DIGEST-MD5, best SSF: 128, supports setpass: no
        security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH
        features: PROXY_AUTHENTICATION
Plugin "login" [loaded],        API version: 4
        SASL mechanism: LOGIN, best SSF: 0, supports setpass: no
        security flags: NO_ANONYMOUS
        features:
Installed auxprop mechanisms are:
sasldb sql
List of auxprop plugins follows
Plugin "sasldb" ,       API version: 4
        supports store: yes
 
Plugin "sql" ,  API version: 4
        supports store: yes
 
Installed SASL (client side) mechanisms are:
PLAIN CRAM-MD5 ANONYMOUS DIGEST-MD5 LOGIN EXTERNAL
List of client plugins follows
Plugin "plain" [loaded],        API version: 4
        SASL mechanism: PLAIN, best SSF: 0
        security flags: NO_ANONYMOUS
        features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
Plugin "crammd5" [loaded],      API version: 4
        SASL mechanism: CRAM-MD5, best SSF: 0
        security flags: NO_ANONYMOUS|NO_PLAINTEXT
        features: SERVER_FIRST
Plugin "anonymous" [loaded],    API version: 4
        SASL mechanism: ANONYMOUS, best SSF: 0
        security flags: NO_PLAINTEXT
        features: WANT_CLIENT_FIRST
Plugin "digestmd5" [loaded],    API version: 4
        SASL mechanism: DIGEST-MD5, best SSF: 128
        security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH
        features: PROXY_AUTHENTICATION|NEED_SERVER_FQDN
Plugin "login" [loaded],        API version: 4
        SASL mechanism: LOGIN, best SSF: 0
        security flags: NO_ANONYMOUS
        features: SERVER_FIRST
Plugin "EXTERNAL" [loaded],     API version: 4
        SASL mechanism: EXTERNAL, best SSF: 0
        security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY
        features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION

/etc/sasl2/smtpd.conf

Nachfolgende Konfigurationsdatei

  • /etc/sasl2/smtpd.conf

regelt, welches Modul und welches Backend-System für die Authentifizierung am Postfix-Mailserver verwendet werden soll.

:!: HINWEIS - Aufgrund von Compiler-Einstellungen, sollten NICHT BEIDE Pakete

  • cyrus-sasl-ldap
  • cyrus-sasl-sql

GLEICHZEITIG installiert sein !!!

Variante 1: Hier ein Beispiel für das

  • Modul: auxprop
  • Backend: ldapdb
pwcheck_method: auxprop
auxprop_plugin: ldapdb
mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
ldapdb_uri: ldap://ldap.dmz.tachtler.net
ldapdb_id: SASL-Ersatzauthentifizierer
ldapdb_pw: geheim
ldapdb_mech: DIGEST-MD5

Variante 2: Hier ein Beispiel für das

  • Modul: auxprop
  • Backend: sql
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
sql_engine: pgsql
sql_hostnames: 127.0.0.1
sql_user: DB-Authentifizierer
sql_passwd: geheim
sql_database: DB-Name
sql_select: SELECT password FROM users WHERE user = '%u@%r'

Erklärung:

  • %u = localpart@domain.tld
  • %r = localpart@domain.tld (realm oder domain-part)

/etc/postfix/main.cf

Nachfolgende Anpassungen an der Konfigurationsdatei (nur relevanter Ausschnitt)

  • /etc/postfix/main.cf

des Postfix-Mailserver sind notwendig, um eine Authentifizierung zu ermöglichen:

...
# SASL-Authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = tachtler.net
broken_sasl_auth_clients = yes
...

:!: HINWEIS - Alle anderen benötigten Parameter stehen bereits auf sinnvollen Standardwerten !!!

Jedoch nachfolgende Tabelle verdeutlicht noch einmal die Einstellungsmöglichkeiten:

Parameter Defaultwert Neuer Wert
smtpd_sasl_auth_enable no yes
smtpd_sasl_authenticated_header no no
smtpd_sasl_exceptions_networks
smtpd_sasl_local_domain tachtler.net
smtpd_sasl_path smtpd smtpd
smtpd_sasl_security_options noanonymous noanonymous
smtpd_sasl_tls_security_options $smtpd_sasl_security_options $smtpd_sasl_security_options
smtpd_sasl_type cyrus cyrus
Parameter Defaultwert Neuer Wert
broken_sasl_auth_clients no yes

*broken_sasl_auth_clients dient zur Kompatibilität zu älteren und nicht RFC-Konformen Clients

Policy Delegation: postgrey

Unter Policy Delegation ist die Möglichkeit von Postfix über einen UNIX-Socket oder eine TCP-Verbindung im Klartext bekannte technische Merkmale einer e-Mail an einen Policy-Daemon zu übermitteln. Dieser Policy-Daemon trifft dann eine Entscheidung über die weitere Behandlung der e-Mail und liefert dieses Ergebnis dann an Postfix zurück.

Einer dieser Policy-Daemon's bietet die Möglichkeit Greylisting über postgrey zu betreiben.

postgrey: installieren

Die Installation von postgrey, kann durch Einbinden eines externen Repositorys, in diesem Fall RPMforge realisiert werden.

:!: WICHTIG - Ein detaillierte Anleitung, wie das RPMforge-Repository in CentOS eingebunden werden kann, kann unter

nachgelesen werden!

Mit nachfolgendem Befehl kann postgrey installiert werden:

# yum install postgrey
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
6 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package postgrey.noarch 0:1.34-1.el6.rf will be installed
--> Processing Dependency: perl(Net::Server) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(Net::Server::Multiplex) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(IO::Multiplex) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(Net::DNS) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(Net::Server::Daemonize) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(Parse::Syslog) for package: postgrey-1.34-1.el6.rf.noarch
--> Processing Dependency: perl(BerkeleyDB) for package: postgrey-1.34-1.el6.rf.noarch
--> Running transaction check
---> Package perl-BerkeleyDB.x86_64 0:0.43-1.el6.rf will be installed
---> Package perl-IO-Multiplex.noarch 0:1.10-1.el6.rf will be installed
---> Package perl-Net-DNS.x86_64 0:0.65-4.el6 will be installed
--> Processing Dependency: perl(Digest::HMAC_MD5) for package: perl-Net-DNS-0.65-4.el6.x86_64
---> Package perl-Net-Server.noarch 0:0.99-1.el6.rf will be installed
--> Processing Dependency: perl(Time::HiRes) for package: perl-Net-Server-0.99-1.el6.rf.noarch
---> Package perl-Parse-Syslog.noarch 0:1.10-1.el6.rf will be installed
--> Running transaction check
---> Package perl-Digest-HMAC.noarch 0:1.01-22.el6 will be installed
--> Processing Dependency: perl(Digest::SHA1) for package: perl-Digest-HMAC-1.01-22.el6.noarch
---> Package perl-Time-HiRes.x86_64 4:1.9721-119.el6_1.1 will be installed
--> Running transaction check
---> Package perl-Digest-SHA1.x86_64 0:2.12-2.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch       Version                    Repository    Size
================================================================================
Installing:
 postgrey              noarch     1.34-1.el6.rf              rpmforge      46 k
Installing for dependencies:
 perl-BerkeleyDB       x86_64     0.43-1.el6.rf              rpmforge     296 k
 perl-Digest-HMAC      noarch     1.01-22.el6                base          22 k
 perl-Digest-SHA1      x86_64     2.12-2.el6                 base          49 k
 perl-IO-Multiplex     noarch     1.10-1.el6.rf              rpmforge      23 k
 perl-Net-DNS          x86_64     0.65-4.el6                 base         232 k
 perl-Net-Server       noarch     0.99-1.el6.rf              rpmforge     171 k
 perl-Parse-Syslog     noarch     1.10-1.el6.rf              rpmforge      15 k
 perl-Time-HiRes       x86_64     4:1.9721-119.el6_1.1       base          46 k

Transaction Summary
================================================================================
Install       9 Package(s)

Total download size: 900 k
Installed size: 2.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): perl-BerkeleyDB-0.43-1.el6.rf.x86_64.rpm          | 296 kB     00:00     
(2/9): perl-Digest-HMAC-1.01-22.el6.noarch.rpm           |  22 kB     00:00     
(3/9): perl-Digest-SHA1-2.12-2.el6.x86_64.rpm            |  49 kB     00:00     
(4/9): perl-IO-Multiplex-1.10-1.el6.rf.noarch.rpm        |  23 kB     00:00     
(5/9): perl-Net-DNS-0.65-4.el6.x86_64.rpm                | 232 kB     00:00     
(6/9): perl-Net-Server-0.99-1.el6.rf.noarch.rpm          | 171 kB     00:00     
(7/9): perl-Parse-Syslog-1.10-1.el6.rf.noarch.rpm        |  15 kB     00:00     
(8/9): perl-Time-HiRes-1.9721-119.el6_1.1.x86_64.rpm     |  46 kB     00:00     
(9/9): postgrey-1.34-1.el6.rf.noarch.rpm                 |  46 kB     00:00     
--------------------------------------------------------------------------------
Total                                           2.6 MB/s | 900 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 4:perl-Time-HiRes-1.9721-119.el6_1.1.x86_64                  1/9 
  Installing : perl-Net-Server-0.99-1.el6.rf.noarch                         2/9 
  Installing : perl-BerkeleyDB-0.43-1.el6.rf.x86_64                         3/9 
  Installing : perl-Parse-Syslog-1.10-1.el6.rf.noarch                       4/9 
  Installing : perl-Digest-SHA1-2.12-2.el6.x86_64                           5/9 
  Installing : perl-Digest-HMAC-1.01-22.el6.noarch                          6/9 
  Installing : perl-Net-DNS-0.65-4.el6.x86_64                               7/9 
  Installing : perl-IO-Multiplex-1.10-1.el6.rf.noarch                       8/9 
  Installing : postgrey-1.34-1.el6.rf.noarch                                9/9 

Installed:
  postgrey.noarch 0:1.34-1.el6.rf                                               

Dependency Installed:
  perl-BerkeleyDB.x86_64 0:0.43-1.el6.rf                                        
  perl-Digest-HMAC.noarch 0:1.01-22.el6                                         
  perl-Digest-SHA1.x86_64 0:2.12-2.el6                                          
  perl-IO-Multiplex.noarch 0:1.10-1.el6.rf                                      
  perl-Net-DNS.x86_64 0:0.65-4.el6                                              
  perl-Net-Server.noarch 0:0.99-1.el6.rf                                        
  perl-Parse-Syslog.noarch 0:1.10-1.el6.rf                                      
  perl-Time-HiRes.x86_64 4:1.9721-119.el6_1.1                                   

Complete!

Nach der Installation, kann mit folgendem Befehl überprüft werden, was alles im Paket postgrey enthalten ist:

# rpm -qil postgrey
Name        : postgrey                     Relocations: (not relocatable)
Version     : 1.34                              Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
Release     : 1.el6.rf                      Build Date: Thu 01 Sep 2011 11:04:32 PM CEST
Install Date: Fri 20 Jan 2012 12:45:55 PM CET      Build Host: lisse.hasselt.wieers.com
Group       : System Environment/Daemons    Source RPM: postgrey-1.34-1.el6.rf.src.rpm
Size        : 115993                           License: GPLv2
Signature   : DSA/SHA1, Thu 01 Sep 2011 11:25:12 PM CEST, Key ID a20e52146b8d79e6
Packager    : Dag Wieers <dag@wieers.com>
URL         : http://postgrey.schweikert.ch/
Summary     : Postfix Greylisting Policy Server
Description :
Postgrey is a Postfix policy server implementing greylisting.  When a request
for delivery of a mail is received by Postfix via SMTP, the triplet CLIENT_IP /
SENDER / RECIPIENT is built.  If it is the first time that this triplet is
seen, or if the triplet was first seen less than 5 minutes, then the mail gets
rejected with a temporary error. Hopefully spammers or viruses will not try
again later, as it is however required per RFC.
/etc/postfix/postgrey_whitelist_clients
/etc/postfix/postgrey_whitelist_clients.local
/etc/postfix/postgrey_whitelist_recipients
/etc/rc.d/init.d/postgrey
/usr/sbin/policy-test
/usr/sbin/postgrey
/usr/sbin/postgreyreport
/usr/share/doc/postgrey-1.34
/usr/share/doc/postgrey-1.34/COPYING
/usr/share/doc/postgrey-1.34/Changes
/usr/share/doc/postgrey-1.34/README
/usr/share/doc/postgrey-1.34/README-rpm
/usr/share/doc/postgrey-1.34/README.exim
/usr/share/man/man8/postgrey.8.gz
/var/spool/postfix/postgrey 

postgrey: deamon start

Um das Starten des postgrey auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird postgrey zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig postgrey on

Ein Überprüfung, ob nur noch der postgrey in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep postgrey
postgrey        0:off   1:off   2:on    3:on    4:on    5:on    6:off

Abschließend ist ein Start von postgrey notwendig, was mit folgendem Befehl realisiert werden kann:

# service postgrey start
Starting postgrey:                                         [  OK  ]

Die Ausgabe der „Start“-Meldung des postgrey in der Log-Datei /var/log/maillog sollte in etwa wie folgt aussehen und kann mit folgendem Befehl Abgefragt werden (nur relevanter Ausschnitt):

# cat /var/log/maillog
...
Jan 20 12:47:19 rechner60 postgrey[2365]: Process Backgrounded
Jan 20 12:47:19 rechner60 postgrey[2365]: 2012/01/20-12:47:19 postgrey (type Net::Server::Multiplex) starting! pid(2365)
Jan 20 12:47:19 rechner60 postgrey[2365]: Using default listen value of 128
Jan 20 12:47:19 rechner60 postgrey[2365]: Binding to UNIX socket file /var/spool/postfix/postgrey/socket using SOCK_STREAM#012
Jan 20 12:47:19 rechner60 postgrey[2365]: Setting gid to "497 497"
Jan 20 12:47:19 rechner60 postgrey[2365]: Setting uid to "498"
...

postgrey: konfigurieren

Um Postgrey in Postfix einzubinden, bestehen zwei Möglichkeiten:

  1. Über einen UNIX-Socket, falls sich Postfix und postgrey auf einem Server befinden
  2. Über eine TCP-Verbindung

UNIX-Socket

Ein Definition in der /etc/postfix/main.cf würde in diesem Fall wie folgt aussehen (nur relevanter Ausschnitt):

...
# Restrictions
#
smtpd_recipient_restrictions =
# Postmaster, abuse and other RFC or important ROLE-Accounts - Whitelisting
        check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,
# White- and Blacklisting
        check_client_access cidr/etc/postfix/check_client_access,
        check_helo_access btree:/etc/postfix/check_helo_access,
        check_sender_access btree:/etc/postfix/check_sender_access,
        check_recipient_access btree:/etc/postfix/check_recipient_access,
# Accept NO unclean e-Mail
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
# Allow OWN USERS
        permit_sasl_authenticated,
        permit_mynetworks,
# RBL checks (or only by policyd-weight possible)
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,    
        reject_rhsbl_client multi.uribl.com,
# Greylisting check over UNIX-Socket 
        check_policy_service unix:postgrey/socket,        
# Check dynamicaly existing Relay-Recipient
        reject_unverified_recipient,
# Allow Backup-MX
        permit_mx_backup,
# Deny all other Relaying
        reject_unauth_destination,
# All else
        permit

TCP-Verbindung

:!: WICHTIG - Bevor eine TCP-Verbindung zu postgrey aufgebaut werden kann muss die Konfigurationsdatei:

  • /etc/sysconfig/postgrey

mit nachfolgendem Inhalt neu erstellt werden:

OPTIONS="--inet=127.0.0.1:10023"

Ein Definition in der /etc/postfix/main.cf würde in diesem Fall wie folgt aussehen (nur relevanter Ausschnitt):

...
# Restrictions
#
smtpd_recipient_restrictions =
# Postmaster, abuse and other RFC or important ROLE-Accounts - Whitelisting
        check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,
# White- and Blacklisting
        check_client_access cidr/etc/postfix/check_client_access,
        check_helo_access btree:/etc/postfix/check_helo_access,
        check_sender_access btree:/etc/postfix/check_sender_access,
        check_recipient_access btree:/etc/postfix/check_recipient_access,
# Accept NO unclean e-Mail
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
# Allow OWN USERS
        permit_sasl_authenticated,
        permit_mynetworks,
# RBL checks (or only by policyd-weight possible)
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,    
        reject_rhsbl_client multi.uribl.com,
# Greylisting check over TCP-Connection 
        check_policy_service inet:127.0.0.1:10023,        
# Check dynamicaly existing Relay-Recipient
        reject_unverified_recipient,
# Allow Backup-MX
        permit_mx_backup,
# Deny all other Relaying
        reject_unauth_destination,
# All else
        permit

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

postgrey: testen

Ein abschließender Test, kann durch ausführen eines telnet-Verbindungsaufbaus mit nachfolgenden Parametern erfolgen, und sollte in etwa nachfolgendes Ergebnis zurück liefern:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO server.nausch.org
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: <root@server.nausch.org>
250 2.1.0 Ok
RCPT TO: <root@tachtler.net>
450 4.2.0 <root@tachtler.net>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/tachtler.net.html
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Nach einer Wartezeit von in etwa 5 Minuten, kann erneut versucht werden die e-Mail mit den gleichen Verbindungsparametern einzuliefern und das Ergebnis sollte dann wie folgt aussehen und eine Zustellung der e-Mail ernmöglichen:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO server.nausch.org
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: <root@server.nausch.org>
250 2.1.0 Ok
RCPT TO: <root@tachtler.net>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test e-Mail
Hallo,
dies ist ein postgrey Test 
Gruss Klaus.
.
250 2.0.0 Ok: queued as 84C8C5F114
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Policy Delegation: policyd-weight

Unter Policy Delegation ist die Möglichkeit von Postfix über einen UNIX-Socket oder eine TCP-Verbindung im Klartext bekannte technische Merkmale einer e-Mail an einen Policy-Daemon zu übermitteln. Dieser Policy-Daemon trifft dann eine Entscheidung über die weitere Behandlung der e-Mail und liefert dieses Ergebnis dann an Postfix zurück.

Einer dieser Policy-Daemon's bietet die Möglichkeit Erweiterte und gewichtete Prüfungen über policyd-weight zu betreiben.

policyd-weight: installieren

Die Installation von policyd-weight, kann durch Herunterladen des entsprechenden rpm-Pakets von den nachfolgenden Adressen

in z.B. das Verzeichnis

  • /tmp

realisiert werden.

:!: HINWEIS - Die immer noch zu verwendende Version ist policyd-weight-0.1.14b17-1.noarch.rpm
bzw. Update durch nachfolgende Version
:!: HINWEIS - Die immer noch zu verwendende Version ist policyd-weight-0.1.15dev3-1.noarch

Mit nachfolgendem Befehl kann policyd-weight installiert werden:

# yum localinstall --nogpgcheck /tmp/policyd-weight-0.1.15dev3-1.noarch.rpm
Loaded plugins: priorities
Setting up Local Package Process
Examining /tmp/policyd-weight-0.1.15dev3-1.noarch.rpm: policyd-weight-0.1.15dev3-1.noarch
Marking /tmp/policyd-weight-0.1.15dev3-1.noarch.rpm as an update to policyd-weight-0.1.14b17-1.noarch
1260 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package policyd-weight.noarch 0:0.1.14b17-1 will be updated
---> Package policyd-weight.noarch 0:0.1.15dev3-1 will be an update
--> Processing Dependency: perl(Net::IP) for package: policyd-weight-0.1.15dev3-1.noarch
--> Running transaction check
---> Package perl-Net-IP.noarch 0:1.25-13.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch   Version        Repository                           Size
================================================================================
Updating:
 policyd-weight noarch 0.1.15dev3-1   /policyd-weight-0.1.15dev3-1.noarch 187 k
Installing for dependencies:
 perl-Net-IP    noarch 1.25-13.el6    base                                 32 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       1 Package(s)

Total size: 220 k
Total download size: 32 k
Is this ok [y/N]: y
Downloading Packages:
perl-Net-IP-1.25-13.el6.noarch.rpm                       |  32 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : perl-Net-IP-1.25-13.el6.noarch                               1/3
  Updating   : policyd-weight-0.1.15dev3-1.noarch                           2/3

Please read the man page for suggested configuration: policyd-weight(8)
  Cleanup    : policyd-weight-0.1.14b17-1.noarch                            3/3
  Verifying  : perl-Net-IP-1.25-13.el6.noarch                               1/3
  Verifying  : policyd-weight-0.1.15dev3-1.noarch                           2/3
  Verifying  : policyd-weight-0.1.14b17-1.noarch                            3/3

Dependency Installed:
  perl-Net-IP.noarch 0:1.25-13.el6

Updated:
  policyd-weight.noarch 0:0.1.15dev3-1

Complete!

Nach der Installation, kann mit folgendem Befehl überprüft werden, was alles im Paket policyd-weight enthalten ist:

# rpm -qil policyd-weight
Name        : policyd-weight               Relocations: (not relocatable)
Version     : 0.1.15dev3                        Vendor: (none)
Release     : 1                             Build Date: Tue 06 Oct 2009 02:59:47 AM CEST
Install Date: Mon 11 Mar 2013 09:21:40 PM CET      Build Host: localhost
Group       : Applications/System           Source RPM: policyd-weight-0.1.15dev3-1.src.rpm
Size        : 191914                           License: GPL
Signature   : (none)
URL         : http://www.policyd-weight.org
Summary     : Weighted Postfix SMTPD policy daemon written entirely in perl.
Description :
policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later) intended to eliminate forged envelope senders and HELOs (i.e. in bogus mails). It allows you to score DNSBLs (RBL/RHSBL), HELO, MAIL FROM and client IP addresses before any queuing is done. It allows you to REJECT messages which have a score higher than allowed, providing improved blocking of spam and virus mails. policyd-weight caches the most frequent client/sender combinations (SPAM as well as HAM) to reduce the number of DNS queries.
/etc/init.d/policyd-weight
/etc/policyd-weight.conf
/usr/sbin/policyd-weight
/usr/share/doc/policyd-weight-0.1.15dev3
/usr/share/doc/policyd-weight-0.1.15dev3/COPYING
/usr/share/doc/policyd-weight-0.1.15dev3/LICENSE
/usr/share/doc/policyd-weight-0.1.15dev3/changes.txt
/usr/share/doc/policyd-weight-0.1.15dev3/documentation.txt
/usr/share/doc/policyd-weight-0.1.15dev3/policyd-weight.conf.sample
/usr/share/doc/policyd-weight-0.1.15dev3/todo.txt
/usr/share/man/man5/policyd-weight.conf.5.gz
/usr/share/man/man8/policyd-weight.8.gz

policyd-weight: check-Table

Um z.B. für gewisse Clients eine Ausnahme zu definieren, kann auch hier eine check-Tabelle mit Ausnahmen gepflegt werden.

Um für diesen Fall, Probleme bei der Bewertung von diesen e-Mails zu vermeiden, und dadurch evtl. „false positives“ zu produzieren, kann eine check-Tabelle mit Ausnahmen mit den z.B. Namen /etc/postfix/check_client_access_policyd_weight definiert werden.

Der Inhalt der check-Tabelle

  • /etc/postfix/check_client_access_policyd_weight

kann dazu verwendet werden, die Prüfung durch policyd-weight zu deaktivieren.

example.com             OK

Erklärung:

  1. Falls der Absender Teil der Domain example.com ist, würde dieser durch policyd-weight nicht geprüft werden.

:!: WICHTIG - Zum Abschluss muss die Text-Datei in das btree-Format mithilfe des Postfix eigenen Befehls

  • postmap

umgewandelt werden.

Der Aufruf für des Befehls zur Umwandlung in das btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_client_access_policyd_weight

Anschließend sollte eine neue Datei mit dem Namen

  • /etc/postfix/check_client_access_policyd_weight.db

entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ls -la /etc/postfix/check_client_access_policyd_weight*
-rw-r--r-- 1 root root    0 Jan 20 15:01 /etc/postfix/check_client_access_policyd_weight
-rw-r--r-- 1 root root 8192 Jan 20 15:01 /etc/postfix/check_client_access_policyd_weight.db

policyd-weight: deamon start

Um das Starten des policyd-weight auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird policyd-weight zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig policyd-weight on

Ein Überprüfung, ob nur noch der policyd-weight in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep policyd-weight
policyd-weight  0:off   1:off   2:on    3:on    4:on    5:on    6:off

Abschließend ist ein Start von policyd-weight notwendig, was mit folgendem Befehl realisiert werden kann:

# service policyd-weight start
Starting policyd-weight:                                   [  OK  ]

Die Ausgabe der „Start“-Meldung des policyd-weight in der Log-Datei /var/log/maillog sollte in etwa wie folgt aussehen und kann mit folgendem Befehl abgefragt werden (nur relevanter Ausschnitt):

# cat /var/log/maillog
...
Jan 20 15:04:19 vml000060 postfix/policyd-weight[3364]: policyd-weight 0.1.14 beta-17 started and daemonized. conf:/etc/policyd-weight.conf; 
GID:501 501 EGID:501 501 UID:497 EUID:497; taint mode: 1
Jan 20 15:04:19 vml000060 postfix/policyd-weight[3364]: warning: cache_query: $csock couln't be created: connect: No such file or directory, 
calling spawn_cache()
Jan 20 15:04:19 vml000060 postfix/policyd-weight[3366]: cache spawned
...

Folgender Befehl, überprüft ob die benötigten Prozesse von policyd-weight gestartet sind:

# ps aux | grep policyd-weight | grep polw
polw      1510  0.0  0.8 143660  8416 ?        Ss   15:33   0:00 policyd-weight (master)
polw      1511  0.0  0.7 143660  8108 ?        Ss   15:33   0:00 policyd-weight (cache)

Folgender Befehle zeigen, auf welchem Port policyd-weight (standardmäßig) lauscht:

# netstat -tulpen | grep policyd-weight
tcp        0      0 127.0.0.1:12525             0.0.0.0:*                   LISTEN      0          10715      1552/policyd-weight

policyd-weight: konfigurieren

Um policyd-weight in Postfix einzubinden ist eine Definition in der /etc/postfix/main.cf notwendig und sieht wie folgt aus (nur relevanter Ausschnitt):

...
# Restrictions
#
smtpd_recipient_restrictions =
# Postmaster, abuse and other RFC or important ROLE-Accounts - Whitelisting
        check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,
# White- and Blacklisting
        check_client_access cidr/etc/postfix/check_client_access,
        check_helo_access btree:/etc/postfix/check_helo_access,
        check_sender_access btree:/etc/postfix/check_sender_access,
        check_recipient_access btree:/etc/postfix/check_recipient_access,
# Accept NO unclean e-Mail
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
# Allow OWN USERS
        permit_sasl_authenticated,
        permit_mynetworks,
# RBL checks (or only by policyd-weight possible)
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,    
        reject_rhsbl_client multi.uribl.com,
# Policyd-Weight check over TCP-Connection
        check_client_access btree:/etc/postfix/check_client_access_policyd_weight,
        check_policy_service inet:127.0.0.1:12525,        
# Greylisting check over UNIX-Socket 
        check_policy_service unix:postgrey/socket,        
# Check dynamicaly existing Relay-Recipient
        reject_unverified_recipient,
# Allow Backup-MX
        permit_mx_backup,
# Deny all other Relaying
        reject_unauth_destination,
# All else
        permit

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

:!: HINWEIS - SPAM lässt meist auch nicht lange auf sich warten, wie folgendes Beispiel aus der LOG-Datei /var/log/maillog zeigt:

Jan 21 16:31:14 rechner60 postfix/smtpd[25550]: connect from 124-11-193-25.static.tfn.net.tw[124.11.193.25]
Jan 21 16:31:16 rechner60 postfix/policyd-weight[25555]: child: spawned
Jan 21 16:31:17 rechner60 postfix/policyd-weight[25555]: weighted check:  NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_NE_HELO=1.5 RESOLVED_IP_IS_NOT_HELO=1.5 HELO_NUMERIC=2.5 (check from: .yahoo. - helo: .88.217.171.167. - helo-domain: .167.)  FROM_NOT_FAILED_HELO(DOMAIN)=3; <client=124.11.193.25> <helo=88.217.171.167> <from=jk9l3g4jle@yahoo.com> <to=sseenndd1201@yahoo.com.hk>; rate: 4
Dec 21 16:31:17 nss postfix/policyd-weight[25555]: decided action=550 Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs; MTA helo: 88.217.171.167, MTA hostname: 124-11-193-25.static.tfn.net.tw[124.11.193.25] (helo/hostname mismatch); <client=124.11.193.25> <helo=88.217.171.167> <from=jk9l3g4jle@yahoo.com> <to=sseenndd1201@yahoo.com.hk
>; delay: 1s
Jan 21 16:31:17 rechner60 postfix/smtpd[25550]: NOQUEUE: reject: RCPT from 124-11-193-25.static.tfn.net.tw[124.11.193.25]: 550 5.7.1 <sseenndd1201@yahoo.com.hk>: Recipient address rejected: Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs; MTA helo: 88.217.171.167, MTA hostname: 124-11-193-25.static.tfn.net.tw[124.11.193.25] (helo/hostname
 mismatch); from=<jk9l3g4jle@yahoo.com> to=<sseenndd1201@yahoo.com.hk> proto=SMTP helo=<88.217.171.167>
Jan 21 16:31:17 rechner60 postfix/smtpd[25550]: lost connection after RCPT from 124-11-193-25.static.tfn.net.tw[124.11.193.25]
Jan 21 16:31:17 rechner60 postfix/smtpd[25550]: disconnect from 124-11-193-25.static.tfn.net.tw[124.11.193.25]

policyd-weight: /etc/policyd-weight.conf

Standardmäßig bringt policyd-weight eine Konfiguration, welche sich innerhalb von policyd-weight befindet mit.

Da sich hier auch die zu überprüfenden RBL-Listen befinden sich diese RBL-Domains und zwar

  • list.dsbl.org
  • rfc-ignorant.org
  • rbl.ipv6-world.net
  • dnsbl.njabl.org

welche nicht mehr verfügbar sind, sollten nachfolgende Ergänzungen der Konfigurationsdatei

  • /etc/policyd-weight.conf

durchgeführt werden:

#
# Run "/usr/sbin/policyd-weight defaults" to see the default settings.
# Add to this file only the variables that you would like to differ from the defaults.
# This file must conform to perl syntax - run "perl -c /etc/policyd-weight.conf" to verify.
#
 
## DNSBL settings
   @dnsbl_score = (
#    HOST,                    HIT SCORE,  MISS SCORE,  LOG NAME
    'pbl.spamhaus.org',       3.25,          0,        'DYN_PBL_SPAMHAUS',
    'sbl-xbl.spamhaus.org',   4.35,       -1.5,        'SBL_XBL_SPAMHAUS',
    'bl.spamcop.net',         3.75,       -1.5,        'SPAMCOP',
#   'dnsbl.njabl.org',        4.25,       -1.5,        'BL_NJABL',
    'ix.dnsbl.manitu.net',    4.35,          0,        'IX_MANITU',
#   'rbl.ipv6-world.net',     4.25,          0,        'IPv6_RBL'
);
 
## RHSBL settings
   @rhsbl_score = (
    'multi.surbl.org',               4,        0,        'SURBL',
    'rhsbl.ahbl.org',                4,        0,        'AHBL',
#   'dsn.rfc-ignorant.org',          3.5,      0,        'DSN_RFCI',
#   'postmaster.rfc-ignorant.org',   0.1,      0,        'PM_RFCI',
#   'abuse.rfc-ignorant.org',        0.1,      0,        'ABUSE_RFCI'
    'dsn.bl.rfc-ignorant.de',        3.5,      0,        'DSN_RFCI',
    'postmaster.bl.rfc-ignorant.de', 0.1,      0,        'PM_RFCI',
    'abuse.bl.rfc-ignorant.de',      0.1,      0,        'ABUSE_RFCI'
);

:!: WICHTIG - Der Dienst dsbl.org wurde eingestellt! (siehe auskommentierte Zeile)
:!: WICHTIG - Der Dienst rfc-ignorant.org wurde eingestellt! (siehe auskommentierte Zeilen)
:!: WICHTIG - Der Dienst rfc-ignorant.org wird unter rfc-ignorant.de weitergeführt! (siehe entsprechende Zeilen)
:!: WICHTIG - Der Dienst rbl.ipv6-world.net wurde eingestellt! (siehe auskommentierte Zeilen)
:!: WICHTIG - Der Dienst dnsbl.njabl.org wurde eingestellt! (siehe auskommentierte Zeilen)

Ein Überprüfung, ob die Konfigurationsdatei einen korrekten Syntax hat, kann mit nachfolgendem Befehl überprüft werden und sollte nachfolgende Ausgabe erzeugen:

# perl -c /etc/policyd-weight.conf
/etc/policyd-weight.conf syntax OK

policyd-weight: /etc/init.d/policyd-weight

In dem Start-Skript von policyd-weight hat sich ein kleiner Fehler eingeschlichen. Dieser kommt nur zum tragen, wenn der Befehl

  • service policyd-weight restart

ausgeführt wird.

Fehlermeldung:

# service policyd-weight restart
Restarting policyd-weight:                                 [  OK  ]
Restarting policyd-weight: /etc/init.d/policyd-weight: line 149: rc_status: command not found

Durch nachfolgende Anpassung im Start-Skript von policyd-weight

  • /etc/init.d/policyd-weight

ab der Zeile 149, sollte nachfolgende Änderung durchgeführt werden (nur relevanter Ausschnitt):

...
'restart')
    if [ -f /etc/init.d/functions ]; then
        restartf
    fi
    # Tachtler
    # default: if [ -f /etc/rc.local ]; then
    if [ -f /etc/rc.status ]; then
        echo -n "Restarting policyd-weight: "
        /usr/sbin/policyd-weight restart > /dev/null 2>&1
        rc_status
    fi
        ;;
...

Sender Policy Framework (SPF)

:!: HINWEIS - Der restriktive Einsatz des Sender Policy Frameworks ist eher nicht zu empfehlen!

Das (SPF) schreibt fest, welche MTA (Mail Transport Agent) ausgehend für den Versandt von e-Mails einer Domain zulässig ist!

Es würde auch die Möglichkeit verhindern, e-Mails mit eigener Absender-e-Mail-Adresse über einen dritten Rechner zu versenden. Es wäre also nur möglich e-Mails auch über den Mail-Server zu versenden, auf dem auch das Postfach liegt! Also wäre der Versand über ein z.B. Webformular, oder eine Web-Grußkarte über einen Drittanbieter NICHT möglich!

Deshalb sollte eine Sender Policy Framework (SPF) Definition so gewählt werden, das diese Beschränkung nicht greift.

Über folgende Seite kann ein Dialog durchlaufen werden, mit dem eine Sender Policy Framework (SPF) geprüft werden kann:

Die durch diesen Link geprüfte Information muss dann in den DNS-Server wie folgt eingebunden werden (relevanter Ausschnitt - bind):

tachtler.net.    TXT     "v=spf1 ip4:88.217.171.167/32 mx ?all" 

Die ob enstehende Information setzt sich wie folgt zusammen:

Schlüssel Bedeutung
v=spf1 Identifiziert den TXT-Eintrag als SPF-Zeichenkette in der Version 1
ip4:88.217.171.167/32 Die IP-Adresse 88.217.171.167, hat die Erlaubnis e-Mails im Namen von tachtler.net zu senden
mx Die Server welche im MX-Record genannt sind, haben die Erlaubnis e-Mails im Namen von tachtler.net zu senden
?all e-Mails, welche nicht von den spezifizierten Servern kommen, können e-Mails im Namen von tachtler.net senden

Um weitere Informationen erhalten zu können, kann folgender Link genutzt werden:

Delivery Status Notifications (DSN)

Über Delivery Status Notifications (DSN) sendet der Absender (nicht der eigene Mail-Server) Anweisungen, wie und wann der über den Zustellstatus einer Nachricht informiert werden möchte! Dies ist auch als „Benachrichtigung über gelesen an den Absender“ bekannt.

Solche Benachrichtigungen an den Absender, welche Informationen mehr als nur über die normalen „Bounce“-Nachrichten hinaus preis geben, bedeutet letztendlich, hier fordert der Absender einer e-Mail Informationen (auch über eine erfolgreich zugestellte e-Mail) vom eigenen MTA (Mail Transport Agent) an! Folgende Beispiele dienen der Verdeutlichung dieses Verfahren:

Nachrichten an den Absender z.B. bei:

  • MAIL FROM: user@example.com RET=FULL, bei einem „Bounce“ der Nachricht, soll die original e-Mail vollständig zurück gesandt werden!
  • MAIL FROM: user@example.com ENVID=„envelop-id“, legt eine ID fest, welche bei einem „Bounce“ zurückgeschickt werden soll!
  • RCPT TO: user@example.com NOTIFY=NEVER, der Absender möchte nie auch bei nicht erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=SUCCESS, der Absender möchte bei erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=FAILURE, der Absender möchte bei nicht erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=DELAY, der Absender möchte bereits bei einer verzögerten Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com ORCPT=user@example.com, gibt den ursprünglichen Empfänger an, von dem aus die e-Mail weitergeleitet wurde!

:!: HINWEIS - Die einzelnen Möglichkeiten sind auch sinnvoll miteinander kombinierbar !

:!: WICHTIG - Aufgrund von evtl. unerwünschter Server-Last oder auch von Informationen über die eigene Infrastruktur, welche durch Delivery Status Notifications (DSN) erzeugt bzw. preis gegeben werden, kann es unerwünscht sein Delivery Status Notifications (DSN) zuzulassen!

Ob ein Mail-Server unterstützt, wird im SMTP-Envelop-Dialog nach dem HELO/EHLO-Kommando bekanntgegeben, wie in nachfolgendem Beispiel gezeigt:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO server.nausch.org
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
...

Hier ist die Zeile

250 DSN

ausschlaggebend!

DSN: global deaktivieren

Delivery Status Notifications (DSN) kann global deaktiviert werden!

Nachfolgende Einstellung in der Konfigurationsdatei von Postfix

  • /etc/postfix/main.cf

würde Delivery Status Notifications (DSN) global deaktiviert (nur relevanter Ausschnitt):

...
smtpd_discard_ehlo_keywords = silent-discard, dsn
...

Die vorhergehenden Optionen bedeuten:

  1. silent-dicard - Es werden keine LOG-Meldungen geschrieben
  2. dsn - Verschweigt im SMTP-Dialog die DSN-Fähigkeit vollständig

:!: HIWNEIS - Die globale Deaktivierung ist nicht sinnvoll, da es eine weitaus bessere Möglichkeit gibt! (siehe nächsten Abschnitt !!!)

DSN: nach Client deaktivieren

Delivery Status Notifications (DSN) kann auch, je nach Herkunft des Clients deaktiviert werden.

Folgendes Beispiel zeigt, wie Delivery Status Notifications (DSN) für

  • lokale Clients - erlaubt und für
  • externe Cleints - nicht erlaubt

werden soll.

Damit Postfix dies Möglichkeit nutzen kann ist eine Anpassung in der Konfigurationsdatei

  • /etc/postfix/main.cf

notwendig, und unter nachfolgendem Link beschrieben –> main.cf - smtpd_discard_ehlo_keyword_address_maps

Falls die oben genannte Änderung durchgeführt wurde, kann die Tabelle

  • /etc/postfix/esmtp_access

wie in nachfolgendem Beispiel gezeigt genutzt werden:

192.168.0.0/24          silent-discard
192.168.1.0/24          silent-discard
0.0.0.0/0               silent-discard, dsn

:!: HINWEIS - Der zweite Wert, kann durch [Leerzeichen] oder besser durch [Tabulatoren] in der gleichen Zeile vom ersten Wert getrennt werden!

Die vorhergehenden Optionen bedeuten:

  1. silent-dicard - Es werden keine LOG-Meldungen geschrieben
  2. dsn - Verschweigt im SMTP-Dialog die DSN-Fähigkeit vollständig

Erklärung:

  1. Für den „private“ Adressbereich 192.168.0.0/24 soll Delivery Status Notifications (DSN) erlaubt werden.
  2. Für den „private“ Adressbereich 192.168.1.0/24 soll Delivery Status Notifications (DSN) erlaubt werden.
  3. Für den „alle anderen“ Adressbereiche 0.0.0.0/0' soll Delivery Status Notifications (DSN) nicht erlaubt werden.

:!: WICHTIG - Die Text-Datei muss NICHT via postmap umgewandelt werden, falls das cidr-Format verwendet wird !

Falls weitere „Schlüsselwörter“ vom HELO/EHLO ausgeschlossen werden sollen, müssen diese ebenfalls hier aufgenommen werden und ggf. die Option

  • smtpd_discard_ehlo_keywords

auskommentiert werden, da ein Einsatz beider Optionen NICHT möglich ist!

Evtl. kann der Inhalt der Konfigurationsdatei z.B. auch wie folgt aussehen:

192.168.0.0/24          silent-discard
192.168.1.0/24          silent-discard
0.0.0.0/0               pipelining, silent-discard, dsn

:!: Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Bei Änderungen ist ein reload von Postfix notwendig!

Zum Abschluss kann ein Test über den Aufruf von telnet an mx1.tachtler.net gerichtet, Aufschluss über die Möglichen HELO/EHLO Möglichkeiten des MTA (Mail Transport Agent) geben (nur relevanter Ausschnitt):

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO mx1.tachtler.net
250-mx1.tachtler.net
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250 8BITMIME
...

Rate-Limiting gegenüber Clients

Postfix bietet die Möglichkeit ein Rate-Limiting für Clients einzusetzen. Dabei wird das in Postfix normalerweise bereits eingebundene und aktive Modul

  • anvil

genutzt.

Beim Rate-Limiting wird überprüft

  • wie viele Verbindungen pro Zeiteinheit ein Client aufbauen darf
  • wie viele e-Mails pro Zeiteinheit ein Client einliefern darf
  • wie viele Empfänger pro Zeiteinheit bei einem Client zulässig sind

Zuerst ist es sinnvoll den Standardwert der Zeiteinheit zu kennen. Mit den nachfolgenden Befehlen kann der Standardwert ermittelt werden: Zeiteinheiten des Moduls - anvil

# postconf -d | grep anvil
anvil_rate_time_unit = 60s
anvil_status_update_time = 600s

Erklärung:

  1. anvil_rate_time_unit - Zeitintervall in dem die Verbindungszahlen eines Clients ermittelt werden.
  2. anvil_status_update_time - Zeitintervall in denen eine Statistik in die Log-Datei des Mail-Servers geschrieben wird.

Anzahl Verbindungen eines Clients

Erlaubte Anzahl von Verbindungen, pro Zeiteinheit eines Clients

# postconf -d smtpd_client_connection_count_limit
smtpd_client_connection_count_limit = 50

Erlaubte Anzahl von e-Mails, pro Zeiteinheit eines Clients

# postconf -d smtpd_client_message_rate_limit
smtpd_client_message_rate_limit = 0

* smtpd_client_message_rate_limit = 0 bedeuetet unlimitiert

Erlaubte Anzahl von Empfängern, pro Zeiteinheit eines Clients

# postconf -d smtpd_client_recipient_rate_limit
smtpd_client_recipient_rate_limit = 0

* smtpd_client_recipient_rate_limit = 0 bedeuetet unlimitiert

:!: WICHTIG - Eine Limitierung kann durchaus sinnvoll sein!

Um eine Limitierung in Postfix festzulegen, können folgende Definitionen in der /etc/postfix/main.cf durchgeführt werden (nur relevanter Ausschnitt):

...
smtpd_client_connection_count_limit = 20
smtpd_client_message_rate_limit = 20
smtpd_client_recipient_rate_limit = 20
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Queue-Haltezeiten anpassen

Wie andere MTA's (Mail Transport Agents) auch, bietet Postfix die Möglichkeit „Wartezeiten“ welche in sogenannten Queue's realisiert werden variabel einzustellen.

Ein Beispiel dafür ist, wie lange Postfix versucht eine e-Mail zuzustellen, wenn der annehmende MTA diese aktuell nicht annimmt, bevor Postfix diese e-Mail als „gebounct“ - als unzustellbar - zurückweist und eine „Bounce“-Nachricht an den Absender zustellt.

Auch hier der Befehl, wie der Standardwert für die Versuche eine e-Mail zuzustellen, abgefragt werden kann:

# postconf -d maximal_queue_lifetime
maximal_queue_lifetime = 5d

:!: HINWEIS - Der Absender einer e-Mail würde also erst nach fünf Tagen erfahren, dass seine e-Mail nicht zugestellt werden konnte!

Ebenso gibt es einen Wert für die „Wartezeit“ von „gebouncten“ e-Mails. Dies wäre praktisch die Information an den Absender, dass die e-Mail nicht zugestellt werden konnte, die ebenfalls NICHT zugestellt werden kann.

Auch hier der Befehl, wie der Standardwert für die Versuche eine „Bounce“-e-Mail zuzustellen, abgefragt werden kann:

# postconf -d bounce_queue_lifetime
bounce_queue_lifetime = 5d

:!: HINWEIS - Die eingestellten Werte von fünf Tagen scheinen in der heutigen Zeit etwas lang und auch für das Verständnis vieler e-Mail-Nutzer sehr lange. Deshalb ist die Korrektur der Werte auf z.B. drei Tage durchaus sinnvoll!

Um eine Änderung der Werte in Postfix zu realisieren, können folgende Definitionen in der

  • /etc/postfix/main.cf

durchgeführt werden (nur relevanter Ausschnitt):

...
maximal_queue_lifetime = 3d
bounce_queue_lifetime = 3d
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

/etc/postfix/master.cf

Die Modulkonfigurationsdatei von Postfix.

Nachfolgend die Konfigurationsdatei /etc/postfix/master.cf im Standard Auslieferungszustand von CentOS ab der Version 6.x:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628      inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
        -o smtp_fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
#maildrop  unix  -       n       n       -       -       pipe
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
#uucp      unix  -       n       n       -       -       pipe
#  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# ====================================================================
#
# Other external delivery methods.
#
#ifmail    unix  -       n       n       -       -       pipe
#  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
#
#bsmtp     unix  -       n       n       -       -       pipe
#  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
#
#scalemail-backend unix -       n       n       -       2       pipe
#  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
#  ${nexthop} ${user} ${extension}
#
#mailman   unix  -       n       n       -       -       pipe
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user}

AMaViS einbinden

Nachfolgende Änderungen müssen an der Konfigurationsdatei /etc/postfix/master.cf durchgeführt werden, um eine Anbindung des Postfix an den AMaViS zu realisieren.

Dabei soll die Anbindung von Postfix an den AMaViS mit dem Verfahren

  • „Pre-Queue“ - smtpd_proxy_filter erfolgen.

Nachfolgend eine kurze Beschreibung des Verfahrens „Pre-Queue“ - smtpd_proxy_filter:

     e-Mails von externen Mail-Server 
                    ||                               +-------------------------------+
                    \/                               |                               |
   +--- Postfix --------------------------------------------------+                  |
   |................|................................|............|                  |
   |.+-------------------------+.....+-------------------------+..|  +-------------------------+-> Entpacker
   |.| SMTP, Port 25           |.....| SMTP, Port 10025        |..|  | AMaViS, Port 10024      |-> Virenscanner
   |.| smtpd_proxy_filter      |.....| KEIN smtpd_proxy_filter |..|  | AMaViS, Port 10026      |-> SpamAssassin
   |.+-------------------------+.....+-------------------------+..|  +-------------------------+-> Datenbank
   |................|................................|............|                  |
   +--------------------------------------------------------------+                  |
                    |                                |                               |
                    +----------------------------------------------------------------+
                                                     |
                                          +--------------------+
                                          |    Einlieferung    |
                                          |      Postfach      |
                                          +--------------------+

Hier die Änderungen an der Konfigurationsdatei /etc/postfix/master.cf (nur relevanter Ausschnitt):

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
# Tachtler
# default: smtp      inet  n       -       n       -       -       smtpd
# AMaViS - Incoming and forward to AMaViS listen on Port 10024
smtp      inet  n       -       n       -       20       smtpd
        -o smtpd_proxy_filter=192.168.0.70:10024
        -o smtp_send_xforward_command=yes
        -o content_filter=
# Tachtler
# AMaViS - Outgoing from AMaViS, BACK to Postfix 
192.168.0.60:10025 inet  n       -       n       -       20       smtpd
        -o content_filter=
        -o smtpd_proxy_filter=
        -o smtpd_authorized_xforward_hosts=192.168.0.0/24
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=
        -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24
        -o receive_override_options=no_unknown_recipient_checks
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628      inet  n       -       n       -       -       qmqpd
# Tachtler
# default: pickup    fifo  n       -       n       60      1       pickup
# AMaViS - Local generated and forward to AMaViS listen on Port 10024
pickup    fifo  n       -       n       60      1       pickup
        -o content_filter=lmtp:[192.168.0.70]:10026
...

Falls vorstehende Änderungen (natürlich an die jeweiligen Bedürfnisse angepasst) durchgeführt wurden, sollte ein Neustart von Postfix mit nachfolgendem Befehl durchgeführt werden:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Eine Überprüfung, ob die vorhergehenden Änderungen wirksam geworden sind, kann unter anderem dadurch erreicht werden, dass nun auch auf Port 10025 gelauscht werden sollte, was mit nachfolgendem Befehel überprüft werden kann:

# netstat -tulpen | grep master
tcp        0      0 0.0.0.0:25                  0.0.0.0:*          LISTEN      0         10108      2117/master         
tcp        0      0 192.168.0.60:10025          0.0.0.0:*          LISTEN      0         10115      2117/master

Port submission (und AMaViS)

Falls eine direkte Einlieferung von abzusendenden e-Mails durch Einlieferung auf Port 25 fehlschlägt, z. B. wegen einer IP-Adresse die einem vom ISP zugewiesen wurde, jedoch auf „Blacklisten“ steht, oder eine generelle Einlieferung von „fremden“ IP-Adressen nicht gewünscht ist, kann das Verfahren Port submission zum Einsatz kommen.

Die Einlieferung von e-Mails via Port submission, stellt einen SMTP-Daemon dar, welcher jedoch grundsätzlich nur e-mails authentifizierter Nutzer annimmt. Die Einlieferung von e-Mails wird selbst dann abgelehnt, wenn ein nicht-authentifizierter Einlieferer eine e-Mail einliefert, wenn sich Postfix selbst für diese Zieldomain zuständig fühlt, und eine Einlieferung auf Port 25 kein Problem wäre!

Es ist sogar möglich, e-Mails Einzuliefern, wenn die zugewiesen IP-Adresse des ISP (z.B. in öffentlichen Netzen, oder bei Mobilen Geräten) auf einer „Blacklist“ gelistet ist. Es zählt primär die Authentifizierung!

Um Port submission zu aktivieren sind nachfolgende Einträge in der Konfigurationsdatei

  • /etc/postfix/master.cf

von Postfix, welche schon vorbereitet aber auskommentiert sind, zu aktivieren.

Nachfolgend werden die relevanten Zeilen gezeigt:

#submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

Port submission OHNE Einbindung von AMaViS

submission inet n       -       n       -       20      smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Port submission MIT Einbindung von AMaViS

Wenn zusätzlich noch AMaViS in die Einlieferung von e-Mails via Port submission eingebunden werden soll, kann dies durch hinzufügen der letzten Zeile am besten erfolgen (Einbindung via content_filter):

submission inet n       -       n       -       20      smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o content_filter=lmtp:[192.168.0.70]:10026

oder (Einbindung via smtpd_proxy_filter):

submission inet n       -       n       -       20      smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_proxy_filter=192.168.0.70:10026
  -o smtp_send_xforward_command=yes
  -o content_filter

:!: HINWEIS - Nachfolgende Ergänzung in der Konfigurationszeile ist nur notwendig, wenn auch Skripte, welche keine Authentifizierung durchführen können, via Port submission einliefern sollen:

(Nur relevanter Ausschnitt)

...
  -o smtpd_client_restrictions=permit_mynetworks,...
...

:!: HINWEIS - Die Konfiguration von AMaViS muss entsprechend angepasst werden, um auf Port 10026 einliefern zu können !!!

Siehe dazu nachfolgenden internen Link:

Falls vorstehende Änderungen durchgeführt wurden, sollte ein Neustart von Postfix mit nachfolgendem Befehl durchgeführt werden:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Eine Überprüfung, ob die vorhergehenden Änderungen wirksam geworden sind, kann unter anderem dadurch erreicht werden, dass nun auch auf Port 587 gelauscht werden sollte, was mit nachfolgendem Befehl überprüft werden kann:

# netstat -tulpen | grep master
tcp        0      0 192.168.0.60:10025          0.0.0.0:*          LISTEN      0         1135415    27195/master
tcp        0      0 0.0.0.0:587                 0.0.0.0:*          LISTEN      0         1135420    27195/master
tcp        0      0 0.0.0.0:25                  0.0.0.0:*          LISTEN      0         1135408    27195/master

:!: HINWEIS - Die Firewall sollte ebenfalls so angepasst werden, dass der Postfix auf Port 587 erreichbar ist!

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/postfix_centos_6.txt · Zuletzt geändert: 2015/08/19 10:49 von klaus