[Postfixbuch-users] Erste Schritte mit postfwd

Jan P. Kessler postfix at jpkessler.info
So Mär 16 10:10:54 CET 2014


Am 11.03.2014 20:24, schrieb Stefan G. Weichinger:
> Ja, ich weiß, da gibt es eine eigene ML ;-)

Jup, genau das ist der Punkt. Ich habe als einerseits Listenteilnehmer
und andererseits Programmautor immer ein bisschen "schlechtes Gewissen",
eine fremde ML zu "missbrauchen". Da Du aber bisher keine Antwort
erhalten hast, gehe ich auf die Punkte ein und hoffe, man sieht mir das
hier nach. Du bist aber auch wirklich auf der postfwd-ML herzlich
willkommen - die wird übrigens auch Weise auf listen.jpberlin.de
gehosted, wofür ich mich an dieser Stelle nochmal bedanken möchte.

> Das mit dem GeoIP-Kram hab ich noch nicht so recht begriffen, ich wollte
> mal testweise unterscheiden zwischen Mail aus zB China und .at/.de ...
> aber das bekam ich noch nicht hin, irgendwie habe ich anscheinend immer
> den selben Counter erhöht:
>
> # GEOIP China check
> &&SK_CHINA_IP { \
>    rbl=cn.countries.nerd.dk ;
> };
>
> # GEOIP AUT/BRD
> &&IP_ATDE { \
>    rbl=at.countries.nerd.dk ; \
>    rbl=de.countries.nerd.dk ; \
> };
>
> #id=RBL_GEO_CHINA    ;  &&SK_CHINA_IP ; rblcount=all ;
> action=set(HIT_CHINA=$$rblcount)
>
> #id=RBL_GEO_ATDE    ;  &&IP_ATDE ; rblcount=all ;
> action=set(HIT_ATDE=$$rblcount)
>
>
> Falsch, oder? ;-)

Eigentlich liest sich das gar nicht so schlecht. Interessant ist aber,
was daraus folgt - sprich: Was fängst Du im Verlauf Deines weiteren
Regelwerkes mit dem Ergebnis an. Z.B.:

id=LIKE_ATDE
    HIT_ATDE > 1
    action=dunno

id=HATE_CHINA
    HIT_CHINA > 0
    action=REJECT we do not want your email

Was genau klappt bei Dir nicht? Um Hilfe zu erhalten, schickst Du am
besten den relevanten Teil der Logs und die Ausgabe des Kommandos

    postfwd --showconfig -f /pfad/zum/regelwerk -v

Um am allerbesten auf der postfwd-ML oder an die auf der Website
genannte info@ Adresse ;)

Das ganze lässt sich übrigens effizienter gestalten - nämlich mit einem
einzigen Lookup. Die Liste zz.countries.nerd.dk liefert abhängig vom
(vermeintlichen) Herkunftsland unterschiedliche Returncodes, also z.B.

# .at und .de
zz.countries.nerd.dk/^127\.0\.0\.[24]0$/86400

# .cn
zz.countries.nerd.dk/^127\.0\.0\.156$/86400

Die komplette Liste findest Du unter
http://countries.nerd.dk/isolist.txt. Der Vorteil bei der Geschichte
ist, dass postfwd das Ergebnis des Lookups von zz.countries.nerd.dk beim
ersten Mal cached.

> Damit müßte ich doch auch hinbekommen, zB für authentifizierte User von
> einem bestimmten Server ein anderes Mail-Size-Limit zu erlauben, als für
> den Rest (sofern hinten dran postfix und amavisd das auch erlauben, klar) ?

Ja, überhaupt kein Problem. Seit postfwd 1.30 sind übrigens die
hässlichen "\"-Zeichen am Zeilenende nicht mehr notwendig. Bei
Statements, die z.B. wegen besserer Lesbarkeit über eine Zeile hinaus
gehen einfach (genau wie bei Postfix) Whitespaces am Anfang der
Folgezeilen verwenden. Bitte beachte, dass postfwd zum Funktionieren von
Regeln mit "size"-Attribut im end_of_data Level eingebunden werden muss:

&&BOFHs {
    jan
    bob
    alice
}

id=ALLOW_HEROES
    sasl_username==&&BOFHs
    size<=400000000
    action=dunno

id=ALL_OTHER_AUTH
    sasl_username=~/./
    size<=200000000
    action=dunno

id=REST_OF_WORLD
    size<=100000000
    action=dunno

id=REJECT_BY_SIZE
    action=REJECT maximum message size exceeded, you had $$size bytes

Das ist nur eine von vielen möglichen Lösungen. Gerade auch mittels des
jump() Kommandos, kannst Du sehr granulare Regelblöcke aufbauen. Schau
Dir dazu am besten mal das letzte Beispiel unter
http://www.postfwd.org/ratelimits.html an.

Gruß, Jan




Mehr Informationen über die Mailingliste Postfixbuch-users