[Postfixbuch-users] Fragen zu laufender Spam-Attacke

Stefan Förster cite+postfix-buch at incertum.net
So Mai 31 21:09:51 CEST 2009


Hallo Andreas,

wie ich vermutet hatte: Ein telnet auf Deine Kiste zeigt, daß Postfix
keine freien smtpd-Dämonen kriegt. Ergo musst Du viel mehr Mail viel
schneller ablehnen. Aber eins nach dem anderen.

Das große Problem bei Dir ist, daß Du uns keine Logzeilen präsentierst
und auch sonst nicht wirklich nachzufroschen scheinst, wie das Problem
zu Stande kommt.

Du scheinst z.B. nur zwei amavisd-new-Prozesse zu betreiben, schreibst
aber weiter oben, daß die CPU meist idle ist - liegt es dann am RAM?
Wenn nein, hast Du versucht, mehr amavisd-new-Prozesse zu starten und
die Zahl in der Definition von "amavis" in der master.cf daran
anzupassen? Ich denke, daß würde am allerschnellsten helfen!

Ansonsten gehe ich mal davon aus, daß die Ressourcen Deines Systems
erschöpft sind:

* "Andreas v. Heydwolff" <listmail at sandpsych.at> wrote:
> Stefan Förster wrote:
> Unter http://andreas.heydwolff.de/public_html/postfix
> sind der output von postconf -n, die master.cf und meine

Eigentlich macht Uwe sowas immer, aber ich fange gleich mal mit dem
wichtigsten an:

smtpd_recipient_restrictions =
   reject_non_fqdn_sender
   reject_non_fqdn_recipient
   reject_unknown_sender_domain
   reject_unknown_recipient_domain
   permit_mynetworks,
   permit_sasl_authenticated
   reject_unauth_destination
   reject_unlisted_recipient
   reject_rbl_client zen.spamhaus.org=127.0.0.10
   reject_rbl_client zen.spamhaus.org=127.0.0.11
   reject_rbl_client zen.spamhaus.org=
   rbl_reply_maps = hash:/etc/postfix/rbl_reply_maps <- Paste-Fehler bei mir?!?
   reject_rbl_client dnsbl.njabl.org
   reject_invalid_hostname

Wenn wir das jetzt umstellen ohne es zu erweitern erhalten wir (ungetestet):

smtpd_recipient_restrictions =
   reject_invalid_helo_hostname     # reject_invalid_hostname ist etwas älter
   reject_non_fqdn_sender
   reject_non_fqdn_recipient
   reject_unlisted_sender
   reject_unlisted_recipient
   reject_unknown_sender_domain     # das kommt hier so früh, weil das auch unsere eigenen SASL-Nutzer betrifft
   reject_unknown_recipient_domain  # und das ebenso
   permit_sasl_authenticated
   permit_mynetworks
   reject_unauth_destination
   reject_rbl_client zen.spamhaus.org
   reject_rbl_client dnsbl.njabl.org

(immer schön auf die Spaces achten, wenn Du eine Zeile forsetzen
willst)
Jetzt brauchst Du aber noch eine "Keule", um noch mehr Mails zu
filtern - dazu verwenden wir den Stress-Modus:

smtpd_client_restrictions = ${stress?reject_unknown_client_hostname}
smtpd_delay_reject = ${stress?no}${stress:yes}
smtpd_hard_error_limit = ${stress?1}${stress:20} # <--- das hier ist ziemlich, äh, "zerstörerisch"
smtpd_timeout = ${stress?10}${stress:300}
unknown_client_reject_code = ${stress?421}${stress:450}
smtpd_client_connection_count_limit = ${stress?2}${stress:10} # davon ausgehend, daß Du 20 smtpds startest
unknown_address_reject_code = ${stress?421}${stress:554}

(Nicht vergessen, "-o smtpd_client_connection_count_limit=10 " aus der
master.cf rauszunehmen!)

Mehr geht erstmal nicht - es sein denn, Du lässt Dich auf Greylisting
ein:

aptitude install postgrey postfix-pcre

In die main.cf einzufügen:

smtpd_restriction_classes = greylisting
greylisting = check_policy_service inet:127.0.0.1:60000

Dann noch Datei http://www.incertum.net/~cite/postgrey.pcre nach
/etc/postfix herunterladen, z.B. mit

wget -O /etc/postfix/postgrey.pcre http://www.incertum.net/~cite/postgrey.pcre

und vor die erste "reject_rbl_client" einfügen:

  check_client_access pcre:${maps_dir}/postgrey.pcre

(immer schön auf die Spaces achten, wenn Du eine Zeile forsetzen
willst). Nach einem "postfix reload" lehnst Du jetzt meines Erachtens
nach so viele Mails ab, wie Du ohne weitere Umstellungen zu leisten in
der Lage bist. Du kannst noch "policyd-weight" installieren und direkt
unter die letzte Zeile, die ich schreib, noch einen AUfruf von
"check_policy_service inet:127.0.0.1:12525" einfügen, kannst dann aber
meines Erachtens nach die beiden "reject_rbl_client"-Zeilen
auskommentieren.

> virtual Tabelle einzusehen (da gibt es noch ein anderes Problem,
> "warning: do not list domain sandpsych.at in BOTH mydestination and
> virtual_alias_domains").

Ich hab's jetzt nicht getestet, aber eigentlich sollte es reichen,
die Zeile

sandpsych.at            anything

aus der virtual-Datei zu entfernen. Umschreiben geht mit
virtual_alias_maps immer, sofern die Domain einer anderen Adressklasse
angehört.

> $final_virus_destiny      = D_DISCARD;  # (data not lost, see virus
> quarantine)
> $final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
> ## $final_spam_destiny       = D_BOUNCE;
> $final_spam_destiny       = D_PASS;
> $final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

Wenn Du als smtpd_proxy_filter arbeitest, darfst Du
$final_spam_destiny ruhig auf D_REJECT setzen.

>> Du benötigst einen smtpd, der aus dem LAN heraus funktioniert?
>> Definiere einen in der master.cf und setze dort ein niedriges
>> Prozesslimit, da man im Normalfall aus dem LAN heraus ja nicht soviele
>> Mails wie von außen schicken wird.
> 
> Sollte ich noch einen als 10.0.1.10:10027 definieren, z.B.?

Ja, natürlich - und diesen dann in der mm_cfg.py mit "SMTPPORT =
10027" ansprechen.



Ciao
Stefan
-- 
Stefan Förster     http://www.incertum.net/     Public Key: 0xBBE2A9E9
FdI #247: Trace - Billiger Fortsetzungsroman. (Manfred Worm Schäfer)
Stefan Förster     http://www.incertum.net/     Public Key: 0xBBE2A9E9
25 Zeichen, daß Du erwachsen bist, Nummer fünf:
Du hörst Dein Lieblingslied in einem Aufzug.



Mehr Informationen über die Mailingliste Postfixbuch-users