Postfix-HowTo: Spam schon bei der Einlieferung blockieren.

Lesenswerte Artikel, Anleitungen und Diskussionen
syntaxys
Posts: 9
Joined: 2004-07-25 14:30
Location: München

Postfix-HowTo: Spam schon bei der Einlieferung blockieren.

Post by syntaxys » 2004-08-08 21:42

Hallo RootForum'ler,
da ich inzwischen über 300 Spam-Mails pro Tag clientseitig aus meinen Mailboxen separiere und mir das sozusagen auf den Sack geht, habe ich mich heute mal wieder intensiv um die Konfiguration des Mailservers gekümmert und wollte Euch an den Erfolgserlebnissen teilhaben lassen. Falls das Nachfolgende schon kalter Kaffee für Euch ist, dann betrachtet es als Reminder 8)

Ein sehr wichtiger Punkt vorweg!
Die Provider - und deren Mitarbeiter - unter Euch sind gesetzlich dazu verpflichtet, jede Mail an ihren Empfänger zuzustellen. Mit dem nachfolgenden HowTo könnt Ihr jede eMail-Adresse feintunen, aber holt Euch eine schriftliche Zustimmung von Euren Kunden / Freunden, für die Ihr den Mail-Traffic abwickelt!

Das ist zu tun!
1) Zuerst braucht Ihr eine Lookup-Table mit den eMail-Adressen und Ihrer zugeordneten Regeln:
- legt mit einem Editor im Verzeichnis /etc/postfix die Datei spamschutz_adressen an.
- diese enthält z. B. folgende Angaben:
user@domain.tld spam_restrictions_low
mailbox@domaene.tld spam_restrictions_high
..... weitere Adressen und Regeln .....
- speichert die Datei und generiert die Hash-Table mit dem Befehl postmap /etc/postfix/spamschutz_adressen

2) Da einige Spammer gerne die IP des annehmenden MTA als HELO/EHLO versenden, blocken wir das mal zuerst. Auch hier benötigen wir eine Lookup-Table im gleichen Stil, wie unter Punkt 1) beschrieben. Siehe auch: http://www.rootforum.org/forum/viewtopic.php?t=28165
- legt mit einem Editor im Verzeichnis /etc/postfix die Datei helo_checks an.
- diese enthält z. B. folgende Angaben:
/^XXX.XXX.XXX.XXX$/ 550 Don't use my own IP
/^[XXX.XXX.XXX.XXX]$/ 550 Don't use my own IP
- speichert die Datei und generiert die Hash-Table mit dem Befehl postmap /etc/postfix/helo_checks

3) Der folgende Auszug aus der main.cf zeigt den Aufbau des Spamschutzes. Bitte seht es mir nach, dass ich nicht ganz genau auf jeden Parameter eingehe, aber jedem die Lektüre "Das Postfix-Buch" von Peer Heinlein empfehle.

Manche Spammer sind zum Glück faule und dumme Schlampen, da lässt sich ein bisserl was schon vorab blockieren:
smtpd_helo_required = yes
strict_rfc821_envelopes = yes

Hier tritt das geniale Postfix-Regelwerk in Aktion:
smtpd_client_restrictions =
reject_unauth_pipelining,
reject_unknown_client

Viele Spammer melden sich ohne Hostnamen zur Einlieferung an oder senden ihren Müll schon, ohne zu fragen, ob sie das dürfen. Das ist etwas ungeschickt, da wir eine Einlieferung von Mails nur durch korrekt konfigurierte Server zulassen, die nichts zu verbergen haben. Jemand der sich hier schon versteckt, hat nichts Gutes vor... >>> BLOCK IT!

smtpd_helo_restrictions =
check_helo_access regexp:/etc/postfix/helo_checks

Hier greift der Lookup auf die access-table aus Punkt 2) - bis hierher werden schon etwa 40% des Spams geblockt. Gewünschte eMails enthalten gewöhnlich keine gefälschten Angaben und schaffen es auch bis ins Postfach.

smtpd_sender_restrictions =
reject_invalid_hostname,
reject_unknown_sender_domain

Bei allen die es hierher schaffen, gucken wir noch, ob sie einen korrekten Namen haben und ob die Absender-Domain überhaupt existiert. Wer hier dümmlich fälscht, fliegt raus - immerhin etwa 15% in meinem Traffic...

smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_recipient_domain,
check_recipient_access hash:/etc/postfix/spamschutz_adressen,
permit

Erst hier werden Erlaubnisse erteilt. Wer sich authentifiziert oder zum eigenen Netzwerk gehört, bekommt 'ne Art "Persilschein". Relay-Versuche nach ausserhalb und unbekannte Empfänger werden erst hier geblockt. Erst hier wird auch empfänger-spezifisch das folgende Regelwerk aktiv.

Hier könnt Ihr 1 bis n Klassen definieren...
smtpd_restriction_classes =
spam_restrictions_low,
spam_restrictions_high


...und hier das Regelwerk pro Klasse tunen:
spam_restrictions_low =
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client combined.njabl.org


spam_restrictions_high =
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client combined.njabl.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client dnsbl.net.au,
reject_rhsbl_sender dsn.rfc-ignorant.org


Hiermit könnt Ihr Konfigurationsfehler und Fälschungen der Spammer global für alle Adressen aktivieren und "harte" RBL-Abfragen nur für bestimmte Adressen durchführen, für die das gewünscht ist. Nicht jede eMail-Adresse wird mit Spam geflutet - daher könnt Ihr Euch den Traffic/Last sparen...
Wichtig ist aber auch, dass der Spammer ein bisserl mit Eurem Server beschäftigt ist. Nach meinen Logfiles sind nicht wenige von denen hartnäckig und probieren die Einlieferung mit mehreren Versuchen - was natürlich Zeit kostet, in der sie woanders nichts anliefern können... 250-Please wait, you're little bit teergrubed!
Mit dieser Konfiguration wird bei mir 90% des Spam schon bei der Annahme blockiert, ohne dass wichtige eMails verloren gehen und man erspart sich die weitere Verarbeitung des Mülls. Alles was trotzdem noch durchkommt, durchläuft natürlich weiterhin - soweit vorhanden - den Viren-Scanner und Spamassassin. Ein weitergehendes Feintuning, um die Viagra-Angebote schon bei der Annahme zu verweigern, wären die header_checks und body_checks mit regExp's, doch dazu mehr an einem anderen Sonntag.
:wink:

4) Postfix benötigt ein /etc/init.d/postfix reload nach der Ã?nderung der main.cf!

LG
Achim

Und hier noch ein Link:
http://www.stahl.bau.tu-bs.de/~hildeb/postfix/