Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_centos_7_-_postscreen_einsetzen

Postfix CentOS 7 - Postscreen einsetzen

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

Der Postfix postscreen-Daemon bietet zusätzlichen Schutz vor Mail-Server Überlastung. Ein Postfix postscreen-Prozess kann mehrere eingehende SMTP-Verbindungen gleichzeitig verwalten, und entscheidet, welche Clients eine Verbindung zum Postfix SMTP-Server-Prozess letztendlich aufbauen dürfen. Dadurch ist es Möglich, dass weitere SMTP-Server-Prozesse nicht 1:1 unnötig durch unerwünschten e-Mail-Verkehr gebunden werden und so weiterhin ausreichend Postfix SMTP-Server-Prozess für die einlieferung erwünschter e-Mail zur Verfügung stehen, so dass eine Verzögerung des Beginns einer Serverüberlastung möglicherweise verhindert werden kann.

Der Postfix postscreen-Daemon sollten nicht auf Ports betrieben werden, auf denen e-Mails von Endbenutzer-Clients (MUAs) empfangen werden, wie dies z.B mit Postfix CentOS 7 - Port submission (Port: 587) der Fall wäre. Wenn Endbenutzer-Clients (MUAs) e-Mails über z.B. Postfix CentOS 7 - Port submission (Port: 587) einliefern, wird eine Client-Authentifizierung erforderlich, welche der Postfix postscreen-Daemon nicht durchführen kann.

:!: WICHTIG - In einer typischen Implementierung, übernimmt Postfix postscreen-Daemon die MX-Dienste nur auf Port: 25!

Der Postfix postscreen-Daemon unterhält eine temporäre Whitelist für eingelieferte e-Mails, die die Prüfungen bestehen, was es diesen Clients ermöglicht, die Tests bei einer ernueten e-Mail Zustellung zu überspringen. Der Postfix postscreen-Daemon hat dabei die Aufgabe, die Auswirkungen der Prüfungen auf den legitime E-Mail-Verkehr auf ein Minimum zu beschränken und die Prüfungen so performant wie möglich durchzuführen.

Nachfolgende Prüfungsschichten werden dabei durchlaufen:

  1. Als die erste Schicht, blockiert der Postfix postscreen-Daemon Verbindungen von Zombies und andere Spambots, die für etwa 90% aller Spam-Mails verantwortlich sind. Es ist in einem einzigen Prozess implementiert, um dieses Verfahren so kostengünstig wie möglich zu gestalten.
  2. Die zweite Schicht implementiert komplexere SMTP-Level-Zugriffsüberprüfungen durch den Postfix SMTP-Server, wie Policy Daemons und Milter-Anwendungen.
  3. Die dritte Schicht führt einfache Inhaltsprüfung mit den in Postfix eingebauten header_checks und body_checks durch. Diese kann inakzeptable Anhänge, wie ausführbare Programme und Würmer oder Viren, mit leicht zu erkennen Signaturen blockieren.
  4. Die vierte Schicht bietet ausführlichere Inhaltsprüfung mit externen Content-Filter. Typische Beispiele hierfür sind amavisd-new, spamassassin und Milter-Anwendungen.

Jede Schicht reduziert das Spam-Aufkommen. Die allgemeine Strategie ist es, zunächst die weniger teuren Verteidigungsmechanismen anzuwenden, um die teureren Abwehrmechanismen dann nur für den Spam, welcher dann noch übrig bleibt, anzuwenden.

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

:!: WICHTIG - Bei CentOS ab der Version 7.x ist Postfix in der Version 2.10.1 enthalten, was die Nutzung einiger Möglichkeiten neuerer Postfix Versionen verhindert. Deshalb soll Postfix aus nachfolgendem Drittanbieter-Repository installiert werden! - Siehe dazu den nachfolgenden internen Link:

Postfix wird von Wietse Venema entwickelt.

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:

Konfiguration

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_reject_footer
Defaultwert
postscreen_reject_footer = $smtpd_reject_footer
Neuer Wert
postscreen_reject_footer = \c. (postscreen) For assistance, contact YOUR postmaster or 
administrator. He can achieve OUR postmaster via email: <postmaster@tachtler.net>. In any 
case, please provide the following information in your problem report: This error message, 
time ($localtime), client ($client_address), port ($client_port) and server ($server_name).
Beschreibung Optionale zusätzliche Angaben, die an jede Postfix postscreen Daemon 4xx oder 5xx-Antwort angehängt werden.

:!: HINWEIS - Der obige Text dient dazu, in der Postfix LOG-Datei, leichter Datensätze für eine fehlgeschlagene SMTP-Sitzung zu finden. Der Text selbst ist nicht in der eigenen LOG-Datei des Postfix SMTP-Server protokolliert.

Nachfolgende Tabelle zeigt optionale Variablen, welche in den Text mit eingebaut werden können:

Variable Beschreibung
client_address Die Client-IP-Adresse, die in der LOG-Datei protokolliert wird.
client_port Der Client-TCP-Port, der in der LOG-Datei protokolliert wird.
localtime Die lokale Server Zeit (Mmm dd hh:mm:ss), die in der LOG-Datei protokolliert wird.
server_name Der Hostname (aus myhostname) des Servers.

Schnelltests: /etc/postfix/main.cf

postscreen_access_list

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_access_list
Defaultwert
postscreen_access_list = permit_mynetworks
Neuer Wert
postscreen_access_list = permit_mynetworks,
        cidr:/etc/postfix/postscreen_access_list
Beschreibung Hinterlegung einer permanenten white- und blacklist mit Remote-SMTP-Client-IP-Adressen. Der Postfix postscreen-Daemon durchsucht diese Liste unmittelbar nachdem eine Remote-SMTP-Client Verbindung hergestellt wurde. Angaben könne in eine durch Kommas oder durch Leerzeichen getrennten Liste von Befehlen (in Groß- oder Kleinschreibung), oder Lookup-Tabellen angegeben werden. Die Suche wird beenden, sobald eine Bedingung (hier eine IP-Adresse) erfüllt wurde bei dessen ersten Eintrag, der für die Client-IP-Adresse getroffen wird.

Nachfolgende Werte können als Lookup-Tabelle Ergebniseinträge verwendet werden:

Wert Beschreibung
permit Whitelistet den Client und beendet die weitere Verarbeitung.
reject Blacklistet den Client und beendet die weitere Verarbeitung. :!: Siehe auch postscreen_blacklist_action
dunno Wenn dunno innerhalb einer Lookup-Tabelle verwendet wird, wird die Lookup-Tabelle verlassen und es erfolgt eine Übergabe an den nächsten Befehl, zur weiteren Bewertung.
Wenn dunno außerhalb einer Lookup-Tabelle ausgeführt wird, wird die weitere Verarbeitung sofort beendet.

Nachfolgend können hier Einträge in die cidr-Map nach nachfolgendem Muster eingetragen werden:

192.168.0.1        dunno
192.168.0.0/24     reject

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/postscreen_access_list

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/postscreen_access_list

:!: HINWEIS - 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 - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

postscreen_blacklist_action

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_blacklist_action
Defaultwert
postscreen_blacklist_action = ignore
Neuer Wert
postscreen_blacklist_action = drop
Beschreibung Eine Aktion, die der Postfix postscreen-Daemon auslöst, wenn ein Remote-SMTP-Client dauerhaft mit durch einen Eintrag auf der postscreen_access_list blockiert wird.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Schnelltests: /etc/postfix/main.cf - postscreen_access_list

postscreen_whitelist_interfaces

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_whitelist_interfaces
Defaultwert
postscreen_whitelist_interfaces = static:all
Neuer Wert
postscreen_whitelist_interfaces = !217.91.103.190/32 static:all
Beschreibung Eine Liste der lokalen Postfix postscreen-Daemon Server-IP-Adressen, bei denen ein nicht Whitelist-Remote-SMTP-Client beim Postfix postscreen-Daemon temporäre den Whitelist-Status erhalten kann. Dieser Status ist erforderlich, bevor der Client an einen Postfix SMTP-Server-Prozess e-Mail einliefern kann. Standardmäßig kann ein Client beim Postfix postscreen-Daemon den Whitelist-Status auf jeder lokalen Postfix postscreen-Daemon Server-IP-Adresse erhalten.

Wenn der Postfix postscreen-Daemon auf beiden Primär- und Backup-MX-Adressen zu erreichen ist, kann der Parameter postscreen_whitelist_interfaces konfiguriert werden, um den Einträgen einen temporäre Whitelist-Status geben zu können, aber nur dann, wenn ein Client eine Verbindung zu einer primären MX-Adresse aufbaut. Sobald ein Client den Status Whitelist hat, kann dieser zu einem Postfix SMTP-Server auf jeder beliebigen Adresse eine Einlieferung einer e-Mail starten.

So werden die Clients, die versuchen nur zur Backup-MX-Adressen eine versuchen Verbindungen aufzubauen, nie den Eintrag auf eine Whitelist erhalten und es wird diesen nie erlaubt, zu einem Postfix SMTP-Server-Prozess eine Verbindung aufbauen zu können.

Die Liste wird von links nach rechts durchlaufen, und der Suchlauf stoppt an der Stelle, an der die erste Übereinstimmung gefunden wird. „! Muster“, schließen eine Adresse oder einen Netzwerkblock von der Liste aus.

:!: HINWEIS - Clients können den temporäre Whitelist-Status auf allen Server-IP-Adressen erhalten, außer die IP-Adresse: 217.91.103.190/32, welche selbst eine Backup MX-Adresse ist.

Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf

postscreen_greet_action

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_greet_action
Defaultwert
postscreen_greet_action = ignore
Neuer Wert
postscreen_greet_action = enforce
Beschreibung Eine Aktion, die der Postfix postscreen-Daemon auslöst, wenn ein Remote-SMTP-Client, zu früh und innerhalb der Zeit, die im Parameter postscreen_greet_wait definiert ist, den Einlieferungsprozess beginnt.

Das SMTP-Protokoll ist ein klassisches Beispiel für ein Protokoll, bei dem der Server vor dem Client anfängt die Kommunikation zu beginnen. Der Postfix postscreen-Daemon erkennt Zombies, die in Eile sind dadurch, dass diese die Reihenfolge der RFC-Konformen Kommunikation nicht einhalten.

Der Postfix postscreen-Daemon sendet zuerst einmal, eine nicht RFC-konformen Begrüßung, wie nachfolgendes Beispiel zeigt:

220-mx1.tachtler.net ESMTP Postfix

Anschließend wartet der Postfix postscreen-Daemon die mit Paramater postscreen_greet_wait definierte Zeitspanne ab, um dann erst die richtig und RFC-Konforme Begrüßung zu senden, welche wie nachfolgend dargestellt auszusehen hat:

220 mx1.tachtler.net ESMTP Postfix

Hier kommt es auf das Minuszeichen/Trennstrich zwischen SMTP-Code und Hostnamen an:

220-mx1.tachtler.net...

Nachfolgende Werte können als Reaktion auf diese Verletzung bzw. Prüfung verwendet werden:

Wert Beschreibung
ignore Das Scheitern dieses Tests wird ignoriert. Weitere Tests werden ebenfalls nachfolgend durchgeführt. Falls dieser Test vor einigen anderen Test abläuft, wird dieser Test nicht wiederholt, bis nicht Ergebnisse von anderen nachfolgenden Test zeitlich abgelaufen bzw. ungültig geworden sind. Diese Reaktion auf den Test ist dann sinnvoll, wenn die Auswirkungen des Test statistisch erfasst werden sollen, jedoch aber keine e-Mail tatsächlich, aufgrund dieses Test, blockiert werden soll.
enforce Weitere Tests können ebenfalls nachfolgend durchgeführt werden. E-Mails werden mit einem Rückgabecode 550 abgelehnt und die Informationen über den HELO-Namen, Sender und den Empfänger werden protokolliert. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.
drop Die Verbindung wird sofort mit einem Rückgabewert 521 beendet. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.

:!: HIWNEIS - Der Zweck dieses „Teaser-Banners“ ist, Zombies oder Spambots zu verwirren, so dass diese zur früh beginnen, ihrerseits die Kommunikation zu beginnen. Dieses Vorgehen hat keinen Einfluss auf SMTP-Clients, die das Protokoll korrekt umzusetzen.

postscreen_dnsbl_action

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_dnsbl_action
Defaultwert
postscreen_dnsbl_action = ignore
Neuer Wert
postscreen_dnsbl_action = enforce
Beschreibung Eine Aktion, die der Postfix postscreen-Daemon auslöst, wenn ein Remote-SMTP-Client kombiniert DNSBL-Score-Werte, der gleich oder größer als ein bestimmter Schwellenwert ist (definiert in postscreen_dnsbl_sites und postscreen_dnsbl_threshold) überschreiten.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_sites

Der Parameter postscreen_dnsbl_sites (Standard: leer) gibt eine Liste von DNS-Blocklist-Server mit optionaler Filter und Gewichtsfaktoren (positive Gewichte für Blacklisting, negativ für Whitelisting) an. Diese Server werden parallel mit der umgekehrten Client IP-Adresse abgefragt.

Nachfolgende Werte können als Reaktion auf diese Verletzung bzw. Prüfung verwendet werden:

Wert Beschreibung
ignore Das Scheitern dieses Tests wird ignoriert. Weitere Tests werden ebenfalls nachfolgend durchgeführt. Falls dieser Test vor einigen anderen Test abläuft, wird dieser Test nicht wiederholt, bis nicht Ergebnisse von anderen nachfolgenden Test zeitlich abgelaufen bzw. ungültig geworden sind. Diese Reaktion auf den Test ist dann sinnvoll, wenn die Auswirkungen des Test statistisch erfasst werden sollen, jedoch aber keine e-Mail tatsächlich, aufgrund dieses Test, blockiert werden soll.
enforce Weitere Tests können ebenfalls nachfolgend durchgeführt werden. E-Mails werden mit einem Rückgabecode 550 abgelehnt und die Informationen über den HELO-Namen, Sender und den Empfänger werden protokolliert. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.
drop Die Verbindung wird sofort mit einem Rückgabewert 521 beendet. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.

postscreen_dnsbl_sites

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_dnsbl_sites
Defaultwert
postscreen_dnsbl_sites = 
Neuer Wert
postscreen_dnsbl_sites =         
        zen.spamhaus.org*2,
        bl.mailspike.net*1,
        bl.spamcop.net*1,
        swl.spamhaus.org*-2,
        b.barracudacentral.org*1
Beschreibung Der Parameter gibt eine Liste von DNS-Blocklist-Server mit optionaler Filter und Gewichtsfaktoren (positive Gewichte für Blacklisting, negativ für Whitelisting) an. Diese Server werden parallel mit der umgekehrten Client IP-Adresse abgefragt.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_action
Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_threshold
Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_whitelist_threshold

:!: HINWEIS - Die Nutzung der DNSBL - b.barracudacentral.org - erfordert eine Anmeldung unter nachfolgendem externen Link:

postscreen_dnsbl_threshold

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_dnsbl_threshold
Defaultwert
postscreen_dnsbl_threshold = 1
Neuer Wert
postscreen_dnsbl_threshold = 2
Beschreibung Der Parameter gibt einen Wert an, welcher zum Blockieren eines Remote-SMTP-Client erreicht werden muss und welcher auf der Grundlage des kombinierten DNSBL-Score, der im Parameter postscreen_dnsbl_sites definiert wurde, erreicht werden muss.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_sites

postscreen_dnsbl_whitelist_threshold

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_dnsbl_whitelist_threshold
Defaultwert
postscreen_dnsbl_whitelist_threshold = 0
Neuer Wert
postscreen_dnsbl_whitelist_threshold = -1
Beschreibung Zulassen eines Remote-SMTP-Client zum überspringen der Protokolltest „vor“ und „nach“ dem Rückgabecode 220 „Begrüßung“ durch den Postfix postscreen-Daemon, basierend auf dessen kombinierten DNSBL-Score, wie im Parameter postscreen_dnsbl_sites definiert.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "vor" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_dnsbl_sites

Ein negativen Wert aktiviert diese Funktion. Wenn ein Client den test bzw. diese Prüfung besteht, ohne an einer anderen Prüfungen gescheitert zu sein, werden alle anstehenden oder deaktiviert Tests als bestanden angesehen diese mit einem TTL (Time-to-Live)-Wert wie im Parameter postscreen_dnsbl_ttl gesetzt, gespeichert. Wenn ein Test bereits beendet war, wird sein TTL (Time-to-Live)-Wert aktualisiert, wenn die verstrichene Zeit bereits kleiner, als der unter dem Parameter postscreen_dnsbl_ttl eingestellten Wert, war.

Tests "nach" SMTP-Server: 220 - /etc/postfix/main.cf

postscreen_bare_newline_action

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_bare_newline_action
Defaultwert
postscreen_bare_newline_action = ignore
Neuer Wert
postscreen_bare_newline_action = drop
Beschreibung Eine Aktion, die der Postfix postscreen-Daemon auslöst, wenn ein Remote-SMTP-Client nur einen Zeilenumbruch (newline) sendet, ohne ebenfalls ein Wagenrücklauf Zeichen (cariage return) mit zu senden.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "nach" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_bare_newline_enable

Nachfolgende Werte können als Reaktion auf diese Verletzung bzw. Prüfung verwendet werden:

Wert Beschreibung
ignore Das Scheitern dieses Tests wird ignoriert. Weitere Tests werden ebenfalls nachfolgend durchgeführt. Falls dieser Test vor einigen anderen Test abläuft, wird dieser Test nicht wiederholt, bis nicht Ergebnisse von anderen nachfolgenden Test zeitlich abgelaufen bzw. ungültig geworden sind. Diese Reaktion auf den Test ist dann sinnvoll, wenn die Auswirkungen des Test statistisch erfasst werden sollen, jedoch aber keine e-Mail tatsächlich, aufgrund dieses Test, blockiert werden soll.
enforce Weitere Tests können ebenfalls nachfolgend durchgeführt werden. E-Mails werden mit einem Rückgabecode 550 abgelehnt und die Informationen über den HELO-Namen, Sender und den Empfänger werden protokolliert. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.
drop Die Verbindung wird sofort mit einem Rückgabewert 521 beendet. Dieser Test wird beim nächsten Verbindungsversuch des Remote-SMTP-Clients erneut durchgeführt.

postscreen_bare_newline_enable

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_bare_newline_enable
Defaultwert
postscreen_bare_newline_enable = no
Neuer Wert
postscreen_bare_newline_enable = yes
Beschreibung Aktiviert den Test, ob ein Remote-SMTP-Client nur einen Zeilenumbruch (newline) sendet, ohne ebenfalls ein Wagenrücklauf Zeichen (cariage return) mit zu senden. Diese Test ist verhältnismäßig teuer, da ein Remote-SMTP-Client die Verbindung erst beenden muss, nachdem dieser den Test bestanden hat, bevor es zu einem erneuten Einlieferungsversuch bzw. der eigentlichen Einlieferung kommen kann!.
interner Link Postfix CentOS 7 - Postscreen einsetzen - Tests "nach" SMTP-Server: 220 - /etc/postfix/main.cf - postscreen_bare_newline_action

SMTP ist ein Zeilen orientiertes Protokoll! Zeilen haben eine begrenzte Länge und werden mit <CR> <LF> abgeschlossen. Zeilen welche nur mit ein <LF> beendet werden und bei denen dem Zeilenumbruch <LF> kein Wagenrücklauf <CR> vorausging, sind im SMTP-Protokoll nicht erlaubt.

postscreen_non_smtp_command_enable

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_non_smtp_command_enable
Defaultwert
postscreen_non_smtp_command_enable = no
Neuer Wert
postscreen_non_smtp_command_enable = yes
Beschreibung Aktiviert den Test, ob ein Remote-SMTP-Client fälschlicherweise Nicht-SMTP-Befehle sendet. Diese Test ist verhältnismäßig teuer, da ein Remote-SMTP-Client die Verbindung erst beenden muss, nachdem dieser den Test bestanden hat, bevor es zu einem erneuten Einlieferungsversuch bzw. der eigentlichen Einlieferung kommen kann!.

Einige Spambots schicken ihre E-Mails über offene Proxies. Ein Symptom auf diesem Gebiet, ist die Verwendung von Befehlen wie CONNECT und andere Nicht-SMTP-Befehlen, oder auch smtpd_forbidden_commands über die der Postfix SMTP-Server verfügt. Der Postfix postscreen-Daemon verfügt über ein Äquivalent, den postscreen_forbidden_commands, um diese Remote-Clients, welche diese verwenden, zu sperren.

postscreen_pipelining_enable

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#postscreen_pipelining_enable
Defaultwert
postscreen_pipelining_enable = no
Neuer Wert
postscreen_pipelining_enable = yes
Beschreibung Aktiviert den Test, ob ein Remote-SMTP-Client SMTP pipelining durchführt. Diese Test ist verhältnismäßig teuer, da ein Remote-SMTP-Client die Verbindung erst beenden muss, nachdem dieser den Test bestanden hat, bevor es zu einem erneuten Einlieferungsversuch bzw. der eigentlichen Einlieferung kommen kann!.

Standardmäßig ist SMTP ein Halbduplex-Protokoll. Das bedeutet, dass der Sender einen Befehl sendet und der Empfänger daraufhin eine Antwort sendet. Im Gegensatz zum Postfix SMTP-Server, verfügt der Postfix postscreen-Daemon nicht über die Unterstützung für den ESMTP-Befehl pipelining. Daher wird den Remote-Clients nicht erlaubt, mehrere Befehle nacheinander zu senden.

Postscreen aktivieren - /etc/postfix/master.cf

Nachfolgend müssen in der Konfigurationsdatei /etc/postfix/master.cf nachfolgender Änderungen durchgeführt werden:

(Jeweils NUR relevanter Ausschnitt):

VORHER:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# 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
#smtp      inet  n       -       n       -       1       postscreen
#smtpd     pass  -       -       n       -       -       smtpd
#dnsblog   unix  -       -       n       -       0       dnsblog
#tlsproxy  unix  -       -       n       -       0       tlsproxy
...

NACHHER:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# 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 - disabled -
#smtp      inet  n       -       n       -       -       smtpd
# Tachtler - enabled -
smtp      inet  n       -       n       -       1       postscreen
# Tachtler - enabled -
smtpd     pass  -       -       n       -       -       smtpd
# Tachtler - enabled -
dnsblog   unix  -       -       n       -       0       dnsblog
# Tachtler - enabled -
tlsproxy  unix  -       -       n       -       0       tlsproxy
...

Nachfolgende Erklärungen zu den vorhergehnden Änderungen:

  • #smtp      inet  n       -       n       -       -       smtpd

Auskommentieren der Annahme von e-Mails durch den Postfix SMTP-Daemon, da der Daemon smtpd keine e-Mails vom Typ inet mehr annehmen soll.

  • smtp      inet  n       -       n       -       1       postscreen

Einkommentieren der Annahme von e-Mails durch den Postfix postscreen-Daemon, da der Daemon postscreen nun die e-Mails vom Typ inet annehmen soll.

  • smtpd     pass  -       -       n       -       -       smtpd

Einkommentieren der Annahme von e-Mails durch den Postfix SMTP-Daemon, da der Daemon smtpd nun nur noch e-Mails vom Typ pass vom Postfix postscreen-Daemon mehr annehmen soll.

  • dnsblog   unix  -       -       n       -       0       dnsblog

Dieser Daemon führt DNSBL-Lookups (Überprüfungen) für den Postfix postscreen-Daemon durch und protokolliert die Ergebnisse.

  • tlsproxy  unix  -       -       n       -       0       tlsproxy

Dieser Daemon implementiert STARTTLS Unterstützung für/durch den Postfix postscreen-Daemon.

Postfix Neustart

Mit nachfolgendem Befehl, kann einer Neustart von Postfix durchgeführt werden:

# systemctl restart postfix.service

Anschließend sollten in der LOG-Datei /var/log/maillog, Einträge wie nachfolgend dargestellt erscheinen:

(Nur relevanter Ausschnitt):

...
Sep 25 16:10:43 server60 postfix/postfix-script[4953]: stopping the Postfix mail system
Sep 25 16:10:43 server60 postfix/master[4441]: terminating on signal 15
Sep 25 16:10:43 server60 postfix/postfix-script[5035]: starting the Postfix mail system
Sep 25 16:10:44 server60 postfix/master[5037]: daemon started -- version 2.11.5, configuration /etc/postfix
Sep 25 16:11:02 server60 postfix/postscreen[5042]: cache btree:/var/lib/postfix/postscreen_cache full cleanup:
retained=0 dropped=0 entries
...

Die Zeile:

...
Sep 25 16:11:02 server60 postfix/postscreen[5042]: cache btree:/var/lib/postfix/postscreen_cache full cleanup:
retained=0 dropped=0 entries
...

gibt zu erkennen, das beim allerersten Start von Postfix mit Postfix postscreen-Daemon Unterstützung, die cache-Datei

  • /var/lib/postfix/postscreen_cache

angelegt und aufgebaut wird!

Erster Test

Nachfolgende Log-Einträge sollten nun bei der ersten Einlieferung einer e-Mail in etwa erscheinen:

Sep 25 18:39:47 server60 postfix/postscreen[6218]: CONNECT from [217.91.103.190]:48590 to [192.168.1.60]:25
Sep 25 18:39:53 server60 postfix/tlsproxy[6222]: CONNECT from [217.91.103.190]:48590
Sep 25 18:39:54 server60 postfix/tlsproxy[6222]: Anonymous TLS connection established from
[217.91.103.190]:48590: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Sep 25 18:39:55 server60 postfix/postscreen[6218]: NOQUEUE: reject: RCPT from [217.91.103.190]:48590: 450
4.3.2 Service currently unavailable; from=<michael@nausch.orge>, to=<klaus@tachtler.net>, proto=ESMTP,
helo=<mx01.nausch.org>
Sep 25 18:39:55 server60 postfix/postscreen[6218]: PASS NEW [217.91.103.190]:48590
Sep 25 18:39:55 server60 postfix/postscreen[6218]: DISCONNECT [217.91.103.190]:48590
Sep 25 18:39:55 server60 postfix/tlsproxy[6222]: DISCONNECT [217.91.103.190]:48590
Sep 25 18:40:36 server60 postfix/postscreen[6218]: CONNECT from [217.91.103.190]:48604 to [10.7.1.60]:25
Sep 25 18:40:36 server60 postfix/postscreen[6218]: PASS OLD [217.91.103.190]:48604
Sep 25 18:40:36 server60 postfix/smtpd[6224]: connect from mx01.nausch.org[217.91.103.190]
Sep 25 18:40:36 server60 postfix/smtpd[6224]: Anonymous TLS connection established from
mx01.nausch.org[217.91.103.190]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Sep 25 18:40:37 server60 postfix/smtpd[6224]: DB8E71800089: client=mx01.nausch.org[217.91.103.190]
Sep 25 18:40:37 server60 postfix/cleanup[6230]: DB8E71800089: message-
id=<20150925162941.Horde.v5N71XoqIf8Nae8oimcJOA8@mx01.nausch.org>
Sep 25 18:40:37 server60 postfix/qmgr[6215]: DB8E71800089: from=<michael@nausch.org>, size=2017, nrcpt=1
(queue active)
Sep 25 18:40:38 server60 postfix/smtpd[6224]: disconnect from mx01.nausch.org[217.91.103.190]
Sep 25 18:40:38 server60 postfix/local[6231]: DB8E71800089: to=<klaus@tachtler.net>, relay=local, delay=1.1,
delays=1/0.02/0/0.09, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 25 18:40:38 server60 postfix/qmgr[6215]: DB8E71800089: removed

Nachfolgend die Erläuterungen zu den Log-Einträgen:

  • Sep 25 18:39:47 server60 postfix/postscreen[6218]: CONNECT from [217.91.103.190]:48590 to
    [192.168.1.60]:25

Es wurde eine Verbindung auf Port 25 von mx01.nausch.org aufgebaut.

  • Sep 25 18:39:53 server60 postfix/tlsproxy[6222]: CONNECT from [217.91.103.190]:48590

Die Verbindung wurde via STARTTLS fortgesetzt.

  • Sep 25 18:39:54 server60 postfix/tlsproxy[6222]: Anonymous TLS connection established from
    [217.91.103.190]:48590: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Die Verbindung wurde akzeptiert und der TLS-Handshake war erfolgreich.

  • Sep 25 18:39:55 server60 postfix/postscreen[6218]: NOQUEUE: reject: RCPT from [217.91.103.190]:48590:
    450 4.3.2 Service currently unavailable; from=<michael@nausch.orge>, to=<klaus@tachtler.net>, proto=ESMTP,
    helo=<mx01.nausch.org>

Die Verbindung wurde abgelehnt, da hier die Prüfungen durchgeführt wurden, welche einen neuen Verbindungsaufbau erfordern!

  • Sep 25 18:39:55 server60 postfix/postscreen[6218]: PASS NEW [217.91.103.190]:48590

Der Postfix postscreen-Daemon merkte sich in der Datei /var/lib/postfix/postscreen_cache den Verbindungsversuch.

  • Sep 25 18:39:55 server60 postfix/postscreen[6218]: DISCONNECT [217.91.103.190]:48590

Die Verbindung wurde abgebaut.

  • Sep 25 18:39:55 server60 postfix/tlsproxy[6222]: DISCONNECT [217.91.103.190]:48590

Die TLS-Verbindung wurde ebenfalls abgebaut.

  • Sep 25 18:40:36 server60 postfix/smtpd[6224]: connect from mx01.nausch.org[217.91.103.190]
    Sep 25 18:40:36 server60 postfix/smtpd[6224]: Anonymous TLS connection established from
    mx01.nausch.org[217.91.103.190]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
    Sep 25 18:40:37 server60 postfix/smtpd[6224]: DB8E71800089: client=mx01.nausch.org[217.91.103.190]
    Sep 25 18:40:37 server60 postfix/cleanup[6230]: DB8E71800089: message-
    id=<20150925162941.Horde.v5N71XoqIf8Nae8oimcJOA8@mx01.nausch.org>
    Sep 25 18:40:37 server60 postfix/qmgr[6215]: DB8E71800089: from=<michael@nausch.org>, size=2017, nrcpt=1
    (queue active)
    Sep 25 18:40:38 server60 postfix/smtpd[6224]: disconnect from mx01.nausch.org[217.91.103.190]
    Sep 25 18:40:38 server60 postfix/local[6231]: DB8E71800089: to=<klaus@tachtler.net>, relay=local,
    delay=1.1, delays=1/0.02/0/0.09, dsn=2.0.0, status=sent (delivered to mailbox)
    Sep 25 18:40:38 server60 postfix/qmgr[6215]: DB8E71800089: removed

Aufgrund dessen, dass sich der Postfix postscreen-Daemon den vorherigen Verbindungsversuch in der Datei /var/lib/postfix/postscreen_cache gemekt hat, diesen also temporär gewhitelistet hat, kann nun die Einlieferung (wie es auch ohne den Postfix postscreen-Daemon wäre) durchgeführt werden.

Mit nachfolgendem Befehl kann der Inhalt der Datei,

  • /var/lib/postfix/postscreen_cache

in dem sich der Postfix postscreen-Daemon alle Verbindungsversuche merkt, aufgelistet werden:

# postmap -s btree:/var/lib/postfix/postscreen_cache
217.91.103.190 	1443285593;1443202793;1445791195;1445791195;1445791195
_LAST_CACHE_CLEANUP_COMPLETED_	1443190262

Einträge können mit nachfolgendem Befehl gelöscht werden:

# postmap -d 217.91.103.190 btree:/var/lib/postfix/postscreen_cache

:!: FIXME Hier geht es weiter… / To be continued …

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