Inhaltsverzeichnis
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:
- 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. - Die zweite Schicht implementiert komplexere SMTP-Level-Zugriffsüberprüfungen durch den Postfix SMTP-Server, wie Policy Daemons und Milter-Anwendungen.
- Die dritte Schicht führt einfache Inhaltsprüfung mit den in Postfix eingebauten
header_checks
undbody_checks
durch. Diese kann inakzeptable Anhänge, wie ausführbare Programme und Würmer oder Viren, mit leicht zu erkennen Signaturen blockieren. - 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.
Beschreibung | Externer Link |
---|---|
Homepage | http://www.postfix.org |
Dokumentation | http://www.postfix.org/POSTSCREEN_README.html |
Dokumentation | http://www.postfix.org/documentation.html |
Ankündigungen | http://www.postfix.org/announcements.html |
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
postscreen_reject_footer
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
Hier geht es weiter… / To be continued …