PCRE og Postfix - jeg fatter '-'
Howdy!
Jeg har fundet en MTA (CommuniGate Pro SMTP 5.0.11) som er skyld i hovedparten af det spam der indløber (der er open relay ifb. med den).
Hvordan får jeg sat en regexp-linie op til at afvise mails fra denne MTA?
Det er en Yahoo-bruger der anvender disse åbne relay's, men hvis jeg afviser på basis af mailadressen bliver den mailadresse jeg har tilknyttet YahooGroups registreret som 'bouncing' - det dur heller ikke... :-/
Jeg har fundet en MTA (CommuniGate Pro SMTP 5.0.11) som er skyld i hovedparten af det spam der indløber (der er open relay ifb. med den).
Hvordan får jeg sat en regexp-linie op til at afvise mails fra denne MTA?
Det er en Yahoo-bruger der anvender disse åbne relay's, men hvis jeg afviser på basis af mailadressen bliver den mailadresse jeg har tilknyttet YahooGroups registreret som 'bouncing' - det dur heller ikke... :-/
Kommentarer16
Du kan bruge
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/client_checks
/etc/postfix/client_checks filen
123.456.789.123 REJECT
Du kan også blocke på et netværk, subnet osv. hvis det er nødvendigt.
Bruger du sender_checks istedet/også kan du blocke på et domain, fuld email-addr osv.
Det er jeg nok klar over
Jeg har fundet adskillige eksempler på nettet der viser hvordan man filtrerer på from, to, subject og alt muligt andet og så nævner de at det er PCRE - men ikke et eneste eksempel på en meget specifik sammensætning af tegn (CommuniGate Pro SMTP 5.0.11). Det er dér kæden hopper af.
Jeg tror ikke jeg er helt
Med ovenstående, blokere du jo kun for den MTA der sidder på den IP i eksemplet. Jeg har ikke erfaringer med at lave PCRE, som filtrere/blokere andre MTA'er i postfix hvis det er det, du er ude efter? :)
Jeg kører Postfix
Kunne jeg bare forstå PCRE, så kunne jeg selv lave den linie, men jeg fatter hat af de PCRE-vejledninger jeg har fundet på nettet.
Og jeg har ikke mulighederne for at lege med det - en kørende mailserver for 7 aktive domæner er ikke den rette legeplads.
Så hvis der sidder en der kan hjælpe mig med at tyde PCRE, så vil jeg blive enormt glad... :-)
Ah, sådan. Sorry, kan ikke
Søgning på "postfix pcre"
http://www.postfix.org/pcre_table.5.html
Hvis du kigger nederst under "header filter map" er der nogen som sorterer ting fra som indeholder noget bestemt.Du må ku' gøre noget lignende à la
/CommuniGate Pro SMTP 5\.0\.11/ REJECT
Tegnsætning
Det er ikke til at finde en god forklaring. Måske fordi ingen kan forklare det?
Nej, det kan godt forklares
Generelt er syntaksen at udtrykket starter og slutter med en skråstreg /
de fleste tegn ().,[]?+-{^$} etc har en "særlig" betydning, og hvis udtrykket skal matche en tekst som indeholder et af disse tegn, skal der backslash foran tegnet. Derfor de to \. i mit forslag før ( . uden backslash betyder nemlig "et hvilket som helst tegn")
Oftest er det nødvendigt med lidt trial-and-error for at få et regulært udtryk til at gøre det man vil -- så vidt jeg ku' forstå på den manualside jeg fandt, kan du bruge
postmap -q
til at teste med.
Ingen postmap
Fra main.cf:
headers_checks = regexp:/etc/postfix/headers_checks
Men indholdet af /etc/postfix/headers_checks skal stadig være i PCRE-format.
Jeg fandt i øvrigt et sted hvor "" stod nævnt. Er det hen i hegnet at smide "" omkring det der skal filtreres på - så der skrives "CommuniGate Pro SMTP 5.0.11" i PCRE-udtrykket?
Hvordan ser headeren ud på
Det her går igen (IP-adressen undtaget).
by 115.76.122.21 (CommuniGate Pro SMTP 5.0.11)
Du kan gøre sådanne her,
" (CommuniGate Pro SMTP 5.0.11)" vil den blokere mailen.
/\(CommuniGate Pro SMTP 5\.0\.11\)/ REJECT Do not want Open Relay servers. Bye bye
mailtext indeholder
"(CommuniGate Pro SMTP 5.0.11)" står jo i headeren.
Jo, header_checks filtrere
http://www.postfix.org/header_checks.5.html
Her er en anden mulighed der
/^Received: from .*\(CommuniGate Pro SMTP 5\.0\.11\)/
Ikke 100% sikker på den virker, men du kan prøve. Min test med postmap, fanger den i hvert fald. :)
En anden ting, jeg har læst lidt i dokumentationen, og det første eksempel burde også kunne gøre det, uden risiko for at blokere hvis den tekst man blokere på også ville stå i mailen som alm text, da den kun fanger headeren, og ikke body.
Der ligger en body_check som en særskilt funktion hvis man skulle få brug for dette.
Takker