Postfix Sicherheit · 6 min read · Sep 22, 2025
Postfix für ISPConfig 3 absichern
Postfix für ISPConfig 3 absichern
Autor: Jesús Córdoba
E-Mail: j.cordoba [at] gmx [dot] net
Forum Benutzer: pititis
Version: 1.2
Das Ziel dieses Tutorials ist es, den Mailserver Postfix, der von ISPConfig für Internet-Mail-Server verwendet wird, abzusichern, wo authentifizierte Benutzer vertrauenswürdig sind. Mit diesem Setup werden Sie eine große Menge an Spam ablehnen, bevor er in Ihre Mail-Warteschlange gelangt, was viele Systemressourcen spart und Ihren Mailserver stark gegen Spammer und Spam-Botnetze macht. Lassen Sie uns beginnen.
Reverse DNS, (DNS PTR Record)
Um rdns einzurichten, werden Sie zwei Situationen finden:
Ihr ISP erlaubt es Ihnen, es selbst zu ändern. Werfen Sie einen Blick in Ihr Kontrollpanel.
Ihr ISP erlaubt es Ihnen nicht, es zu ändern. Senden Sie einfach eine E-Mail mit Ihrer Anfrage.
Fragen Sie oder weisen Sie Ihren rdns-Eintrag auf Ihren Server. z.B.
server.example.com
Sie können Ihr rdns mit dem Befehl host überprüfen:
root@server / # host 149.20.4.69 69.64-27.4.20.149.in-addr.arpa domain name pointer pub2.kernel.org.Denken Sie daran, dass DNS die Änderungen propagieren muss.
SPF für Ihre Domain (DNS TXT Record)
SPF ist ein E-Mail-Validierungssystem, das entwickelt wurde, um E-Mail-Spam zu verhindern, indem es E-Mail-Spoofing erkennt, eine häufige Schwachstelle, indem es die IP-Adressen des Absenders überprüft.
Um SPF einzurichten, müssen Sie einen TXT-Eintrag zu Ihrer DNS-Zone hinzufügen, aber zuerst können Sie Ihren Eintrag hier generieren: http://www.mailradar.com/spf/
Kopieren Sie das SPF-Ergebnis, gehen Sie dann zu ISPConfig -> dns -> zones -> klicken Sie auf Ihren Domainnamen -> klicken Sie auf die Registerkarte Records -> und klicken Sie auf TXT
Hostname -> example.com. (mit Punkt am Ende!)
Text -> Fügen Sie hier das SPF-Ergebnis ein (ohne “ “).
Beispiel: v=spf1 a mx ptr ip4:11.222.333.444 -all …und klicken Sie auf Speichern.
Denken Sie daran, dass DNS die Änderungen propagieren muss.
Postfix main.cf
Lassen Sie uns etwas zu /etc/postfix/main.cf hinzufügen/ändern.
Helo-Einschränkungen:
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostnameHelo-Einschränkungen in Aktion:
Jan 12 01:57:08 server postfix/smtpd[4687]: NOQUEUE: reject: RCPT from unknown[186.43.77.153]: 450 4.7.1 Client host rejected: cannot find your hostname, [186.43.77.153]; from=
to= proto=ESMTP helo=<[186.43.77.153]>
Jan 8 00:32:22 server postfix/smtpd[17504]: NOQUEUE: reject: RCPT from 201-93-87-2.dial-up.telesp.net.br[201.93.87.2]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= Strikte RFC:
strict_rfc821_envelopes = yesClient-Einschränkungen:
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cfEmpfänger-Einschränkungen:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unknown_recipient_domainDaten-Einschränkungen:
smtpd_data_restrictions = reject_unauth_pipeliningSmtpd-Verzögerung:
smtpd_delay_reject = yesVergessen Sie nicht, Postfix neu zu laden:
/etc/init.d/postfix reloadSPF-Überprüfung für Postfix (Debian und Ubuntu)
Installieren Sie das SPF-Paket:
apt-get install postfix-policyd-spf-pythonoder
apt-get install postfix-policyd-spf-perlFügen Sie dies zu /etc/postfix/main.cf hinzu:
policy-spf_time_limit = 3600sund fügen Sie check_policy_service unix:private/policy-spf am Ende von smtpd_recipient_restrictions hinzu:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spfJetzt bearbeiten Sie master.cf und fügen Sie am Ende dies (für die Python-Version) hinzu:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf oder dies für die Perl-Version:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl…laden Sie Postfix neu.
/etc/init.d/postfix reloadSPF-Überprüfung in Aktion:
Jan 4 15:50:11 server postfix/smtpd[19096]: NOQUEUE: reject: RCPT from g230068165.adsl.alicedsl.de[92.230.68.165]: 550 5.7.1 <[email protected]>: Recipient address rejected: Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.org/Why?s=helo;id=paxxxxxn.com;ip=92.230.68.165;[email protected]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=
Greylist
Greylisting ist eine Methode, um E-Mail-Nutzer gegen Spam zu verteidigen. Ein Mail Transfer Agent (MTA), der Greylisting verwendet, wird jede E-Mail von einem Absender, den er nicht erkennt, “vorübergehend ablehnen”. Wenn die Mail legitim ist, wird der ursprungsserver nach einer Verzögerung erneut versuchen, und wenn genügend Zeit vergangen ist, wird die E-Mail akzeptiert.
Installation von Postgrey (Debian, Ubuntu):
apt-get install postgreyDie Konfigurationsoptionen befinden sich in /etc/default/postgrey (Standardverzögerung beträgt 5 Minuten).
Bearbeiten Sie main.cf und fügen Sie check_policy_service inet:127.0.0.1:10023 am Ende von smtpd_recipient_restrictions hinzu:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf,check_policy_service inet:127.0.0.1:10023…laden Sie Postfix neu:
/etc/init.d/postfix reloadGreylisting in Aktion:
Jan 10 17:38:57 server postfix/smtpd[21302]: NOQUEUE: reject: RCPT from mailout-de.gmx.net[213.165.64.22]: 451 4.7.1 <[email protected]>: Recipient address rejected: Greylisting in effect, please come back later; from=<[email protected]> to=<[email protected]> proto=SMTP helo=DNSBL (DNS-basierte Blacklist/Blockliste)
Eine DNSBL ist eine Liste von IP-Adressen, die über den Internet Domain Name Service (DNS) veröffentlicht werden, entweder als Zonen-Datei, die von DNS-Server-Software verwendet werden kann, oder als Live-DNS-Zone, die in Echtzeit abgefragt werden kann. DNSBLs werden am häufigsten verwendet, um die Adressen von Computern oder Netzwerken zu veröffentlichen, die mit Spam in Verbindung stehen; die meisten Mailserver-Software kann so konfiguriert werden, dass sie Nachrichten ablehnt oder kennzeichnet, die von einer auf einer oder mehreren solchen Listen aufgeführten Seite gesendet wurden. Dazu kann das Auflisten der Adressen von Zombie-Computern oder anderen Maschinen gehören, die zum Versenden von Spam verwendet werden, das Auflisten der Adressen von ISPs, die bereitwillig Spammer hosten, oder das Auflisten von Adressen, die Spam an ein Honeypot-System gesendet haben. Um DNSBL mit Postfix zu verwenden, verwenden wir reject_rbl_client. Fügen Sie einfach einige Live-DNS-Zonen für Abfragen in die main.cf-Datei ein.
In meinem Beispiel werde ich zwei Listen mit sehr gutem Ruf verwenden (am Ende von smtpd_client_restrictions hinzugefügt):
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf, reject_rbl_client cbl.abuseat.org, reject_rbl_client b.barracudacentral.orgRBL in Aktion:
Jan 12 01:52:42 server postfix/smtpd[4616]: NOQUEUE: reject: RCPT from 89.pool85-49-26.dynamic.orange.es[85.49.26.89]: 554 5.7.1 Service unavailable; Client host [85.49.26.89] blocked using cbl.abuseat.org; Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=85.49.26.89; from=<[email protected]> to=<[email protected]> proto=SMTP helo=
Jan 11 20:13:58 server postfix/smtpd[29591]: NOQUEUE: reject: RCPT from 93-87-122-56.dynamic.isp.telekom.rs[93.87.122.56]: 554 5.7.1 Service unavailable; Client host [93.87.122.56] blocked using b.barracudacentral.org; http://www.barracudanetworks.com/reputation/?pr=1&ip=93.87.122.56; from=
to= proto=ESMTP helo= Postscreen
Hinweis: Diese Funktion ist in Postfix 2.8 und höher verfügbar.
Der Postfix postscreen-Daemon bietet zusätzlichen Schutz gegen Überlastung des Mailservers. Ein postscreen-Prozess verarbeitet mehrere eingehende SMTP-Verbindungen und entscheidet, welche Clients mit einem Postfix SMTP-Serverprozess kommunizieren dürfen. Indem er Spam-Bots fernhält, lässt postscreen mehr SMTP-Serverprozesse für legitime Clients verfügbar und verzögert den Beginn von Überlastungsbedingungen des Servers.
Die größte Herausforderung für postscreen besteht darin, eine Entscheidung zu treffen, ob es sich um einen Zombie handelt, basierend auf einer einzigen Messung. Dies ist notwendig, da viele Zombies versuchen, unter dem Radar zu fliegen und zu vermeiden, dieselbe Seite wiederholt zu spammen. Sobald postscreen entscheidet, dass ein Client kein Zombie ist, wird der Client vorübergehend auf die Whitelist gesetzt, um weitere Verzögerungen für legitime Mails zu vermeiden.
Für dieses Tutorial verwenden wir die Standardeinstellungen mit einer Ausnahme. Diese Einstellungen sind für die meisten Situationen in Ordnung.
Zuerst fügen wir eine Zeile zu main.cf mit dem Befehl hinzu:
postscreen_greet_action = enforceZweitens fügen wir postscreen und einige neue Dienste zu master.cf hinzu. Hinweis: Diese Einstellungen können bereits existieren, einfach auskommentieren. Stellen Sie auch sicher, dass die Zeile “smtp inet … smtpd”, einschließlich aller Parameter, auskommentiert ist (falls vorhanden, müssen die Parameter zum neuen smtpd-Dienst verschoben werden).
# 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 - - - - smtpd
# -o ...
smtpd pass - - n - - smtpd
-o ... # Parameters moved from smtp service to the new smtpd service.(if any)
smtp inet n - n - 1 postscreen
tlsproxy unix - - n - 0 tlsproxy
dnsblog unix - - n - 0 dnsblogJetzt laden wir Postfix neu:
/etc/init.d/postfix reloadErhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.