Newsgroup: it.comp.os.linux.sys
Titolo: Scrivere un filtro avanzato per Postfix

Spero di aver scritto nel newsgroup corretto!
Vorrei realizzare un filtro personalizzato per postfix, in modo da
bloccare alcune mail che presentano un pattern predefinito.
Il documento che utilizzo come riferimento si trova su
http://www.postfix.org/FILTER_README.html
, e la sezione che tratta il
mio problema, a quanto parte, sembrerebbe essere "Advanced Content
Filter Example".
Ecco i passi che ho seguito. In 
main.cf
 ho aggiunto le seguenti righe:
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings
in modo che tutte le mail in ingresso vengano rigirate al filtro.
poi aggiunto al file 
master.cf
 le seguenti righe:
scan unix - - n - 10 smtp
   -o smtp_send_xforward_command=yes
A questo punto mi pare ci siano due soluzioni per procedere.
La prima consiste nello scrivere un applicativo server in ascolto sulla
porta 10025.
La soluzione che ho scelto č invece la seconda, la quale consiste
nell'utilizzare il comando "spawn" di postfix.
In 
master.cf
 ho quindi aggiunto anche:
localhost:10025 inet n n n - 10 spawn
  user=filter argv=/usr/local/customfilter/
cf.pl
 localhost 10026
che dovrebbe dire quale filtro resta in ascolto sulla porta 10025. O
forse ho sbagliato a capire?
Infine ho aggiunto la riga localhost:10026, con tutti i parametri presi
pari pari dalla guida.
Quello che non riesco a capire č: come va scritto questo filtro? Nella
guida non c'č un esempio...
Io ho provato a scrivere il seguente codice, che si limita a copiare il
proprio input nell'output:
---
#!/usr/bin/perl
my $riga;
while (($riga = <STDIN>) ne ".\n") {
  print $riga;
}
print ".\n";
---
ma non solo non funziona, mi sembra che non venga mai eseguito.
I test che ho effettuato sono i seguenti:
telnet localhost 25: ok risponde, se mando una mail viene accodata, ma
la mail non mi arriva
telnet localhost 10026: tutto ok, la mail viene accodata e la ricevo
nella casella di posta
telnet localhost 10025: risponde, ma non funziona nulla, digito i
comandi a vuoto, e non riesco ad uscire
Sapete dire dove sbaglio?
Oppure dove posso trovare qualche esempio piů completo?
Grazie
Federico
-- 
http://www.myspace.com/alienmindbender
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 comandi a vuoto, e non riesco ad uscire
non ho esperienza in merito, ma credo tu debba capire come creare un 
demone in ascolto sulla porta 10026
Al massimo dai un occhio alla documentazione di amavisd-new, le 
modifiche da fare al 
master.cf
 sono molto simili a quelle che servono a te.
Ciao,
Manuel

 wrote:
[...]
Io in 
master.cf
 ho aggiunto e modificato:
-----------------------------------------------------------
smtp      inet  n       -       n       -       -       smtpd -o
content_filter=filter:dummy
filter  unix    -       n       n       -       -       pipe
  flags=Rq user=filter argv=/usr/local/bin/spamfilter -f ${sender} -- ${recipient}
-----------------------------------------------------------
In 
main.cf
:
-----------------------------------------------------------
filter_destination_recipient_limit = 1
-----------------------------------------------------------
Poi in /usr/local/bin/spamfilter leggo da STDIN
 Gio'
--
/*
 * Solutions for New Business - 
http://www.snb.it
 */

 modifiche da fare al 
master.cf
 sono molto simili a quelle che servono a te.
tramite il comando spawn il demone sulla 10025 dovrebbe essere
già implementato da postfix (almeno così mi pare di aver capito).
A questo demone è associato uno script: ma come funziona questo script?
devo leggere dallo STDIN e scrivere nello STDOUT?
devo leggere da un file temporaneo, e scrivere su un altro file
temporaneo? o deve comunque essere scritto in client server?
grazie e ciao


 ed applicare le RBL a quell'indirizzo.
Fa' fare quelle verifiche a Spamassassin che è già predisposto allo scopo. 
L'unico contro è che non potrai fare reject sul socket.

 L'unico contro è che non potrai fare reject sul socket.
dici che questo controllo può essere fatto direttamente da spamassassin?
se è così è un'ottima notizia!
provo ad informarmi, non ho trovato molta documentazione, ma cerco
meglio.
il reject sul socket purtroppo è un problema, ma d'altra parte la mail
è già stata accettata dal mio relay server, e non ha senso fare un
reject
al mio relay!
grazie e ciao
federico


 [...]
Così sono riuscito a farlo funzionare.
Questo metodo però utilizza il comando "pipe" e, secondo la
documentazione, non è una soluzione molto robusta nel caso in cui il
server diventi troppo carico.
Io vorrei imparare ad utilizzare il comando "spawn".
Strano perchè la documentazione per quanto riguarda il comando pipe è
abbastanza completa (basta copiare pari pari gli esempi!); invece per il
comando spawn manca proprio un esempio di filtro! Forse sottointendono
che sia una banalità, e magari è proprio così! Ma non riesco a capire
dove sbaglio...
grazie e ciao!


 al mio relay!
Reject che si tramuterà in un bounce da parte del tuo relay verso un 
indirizzo mail al 90% falsificato. Concordo, a quel punto un reject 
non ha più senso.

 non ha più senso.
si non è mai bello cancellare della posta senza notificare in qualche
modo il mittente, ma pare non ci sia soluzione! le liste RBL che
utilizzo però mi sembrano molto affidabili, ed è molto difficile che
venga cancellata per errore una mail legittima.
ti ringrazio molto, mi sei stato molto utile!


 venga cancellata per errore una mail legittima.
Visto che tanto il reject non puoi farlo (provocheresti solo del 
backscatter), tanto vale collocare le mail di spam in una directory di 
quarantena per eventuali ispezioni. Usi SpamAssassin con Amavis?
 > ti ringrazio molto, mi sei stato molto utile!
 > ciao
 > federico
Prego :)

 quarantena per eventuali ispezioni. Usi SpamAssassin con Amavis?
Adesso applico le RBL direttamente dal firewall, mentre come antivirus
utilizzo TrendMicro. Non ho mai utilizzato SpamAssassin perchč credevo
disponesse solo di filtri bayesiani e poco piů, invece mi pare di capire
che ci siano molte altre opzioni che possono risultare efficaci.
Comunque TrendMicro dispone di una cartella per la quarantena, e credo
non sia un problema interfacciarla con SpamAssassin. Credo sia questa la
soluzione migliore.
grazie e ciao
Federico


 soluzione migliore.
Spamassassin ha una sola funzione: analizzare un messaggio e, qualora 
lo ritenga spam, marcarlo come tale; spetta invece ad altri programmi 
filtrare la mail sulla base degli esiti della verifica di spamassassin.

 filtrare la mail sulla base degli esiti della verifica di spamassassin.
OK con TrendMicro non dovrebbero esserci problemi a mettere
in quarantena solo i messaggi marcati in un certo modo.
Ciao!
