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 aufpostconf -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:
- Die Log-Datei
/var/log/maillog
- 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:
- Genau diese e-Mail-Adresse wird umgeschrieben
- Alle e-Mails an
@example.com
werden auftext@example.com
umgeschrieben - Alle e-Mails an
@example.net
werden auf@example.com
umgeschrieben - Die User-ID
user
in den Domains:$myorigin
,$mydestination
oder IP-Adressen ausinet_interfaces
werden anroot@tachtler.net
umgeschrieben! - Dies gilt NICHT für Domains ausvirtual_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:
- Genau diese e-Mail-Adresse wird umgewandelt
- Alle e-Mails von
@rechner60.dmz.tachtler.net
werden nach@tachtler.net
umgewandelt - Die User-ID wird von
root
nachklaus@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:
- Genau diese e-Mail-Adresse wird umgewandelt
- Alle e-Mails für
@rechner60.dmz.tachtler.net
werden zu@tachtler.net
umgewandelt - Die User-ID wird für
root
zuklaus@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:
- Genau diese e-Mail-Adresse wird umgewandelt
- Alle e-Mails von
@localhost.localdomain
werden nach außen alswebmaster@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:
- Genau diese e-Mail-Adresse wird umgewandelt
- Alle e-Mails von
@localhost.localdomain
werden nach außen alswebmaster@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:
- … 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:
- Alle e-Mails von allen Subdomains gehen an den Mail-Server von
tachtler.net
- MX-Lookup -dig tachtler.net MX
- Alle e-Mails von
syslog.tachtler.net
gehen an den Mail-Servermx1.tachtler.net
- A-Record -dig mx1.tachtler.net
- Alle e-Mials von
localhost.localdomain
werden via LMTP weitergereicht - Alle e-Mails von
root@tachtler.net
gehen an den Mail-Servermx1.tachtler.net
- A-Record -dig mx1.tachtler.net
- Port: 26
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:
- „Bounce“-Ergänzung bei e-Mail an
klaus.tachtler@tachtler.net
mit dem Hinweisuser has moved to klaus@tachtler.net
- „Bounce“-Ergänzung bei
@example.com
mit dem Hinweisuser 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:
- Es wurde im Feld Subject der e-Mail der Begriff
100% Free
gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz - Es wurde im Feld From der e-Mail der Begriff
spammer@domain.de
gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz - 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:
- Es wurde im Text der e-Mail der Begriff z.B.
spam.org
gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz - 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:
- Es wurde der MIME-Type z.B.
exe
in der e-Mail gefunden, die e-Mail wird abgewiesen mit dem definierten Zusatz - 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:
- 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:
- Zeitintervall nach dem das
verify
-Modul eine nicht erfolgreich überprüfte e-Mail-Adresse aus dem Speicher gelöscht wird - Zeitintervall nach dem das
verify
-Modul eine nicht erfolgreich überprüfte nochmals beim Zielserver überprüft - Zeitintervall nach dem das
verify
-Modul eine gespeicherte e-Mail-Adresse, welche nicht mehr beim Zielserver angefragt wurde, löscht - Zeitintervall nach dem das
verify
-Modul einen bereits als existente gespeichert e-Mail-Adresse erneut beim Zielserver anfragen wird - 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:
- Bei genauer Analyse der Prozedur ist festzustellen, dass die nachfolgend genannten ersten drei Restrictions, streng genommen keine Rolle spielen:
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
- 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.
- 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:
- 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:
- Die Angabe von
spammer.org
alsHELO/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:
- 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. - 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:
- 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:
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:
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:
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:
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
oderdomain-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
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:
- 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 eineID
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:
silent-dicard
- Es werden keine LOG-Meldungen geschriebendsn
- 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:
silent-dicard
- Es werden keine LOG-Meldungen geschriebendsn
- Verschweigt im SMTP-Dialog die DSN-Fähigkeit vollständig
Erklärung:
- Für den „private“ Adressbereich
192.168.0.0/24
soll Delivery Status Notifications (DSN) erlaubt werden. - Für den „private“ Adressbereich
192.168.1.0/24
soll Delivery Status Notifications (DSN) erlaubt werden. - 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:
anvil_rate_time_unit
- Zeitintervall in dem die Verbindungszahlen eines Clients ermittelt werden.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!