Sommario
- Creare la configurazione di sendmail per utilizzare mailertable e il mailer procmail, come segue.
- /etc/mail/sendmail.mc
dnl Enable support for the mailertable FEATURE(`mailertable') dnl Add procmail to the list of available mailers MAILER(procmail)
- Inserire regole locali per permettere il reinvio di posta senza loop (attenzione al TAB tra '>' e '$')
- /etc/mail/sendmail.mc
LOCAL_CONFIG # Add .PROCMAIL to the pseudo-domain list CP.PROCMAIL LOCAL_RULE_0 # Strip .PROCMAIL and send via esmtp R$+ < @ $+ .PROCMAIL . > $#esmtp $@ $2 $: $1<@$2>
- Usare mailertable per inviare la posta di domini specifici (o tutti i domini) al mailer procmail (l'ultima linea si applica a tutta la posta):
- /etc/mail/mailertable
example.com procmail:/etc/mail/procmailrcs/spam-filter wrotethebook.net procmail:/etc/mail/procmailrcs/spam-filter fake.ora.com procmail:/etc/mail/procmailrcs/uce-filter . procmail:/etc/mail/procmailrcs/any.rc
- Nel direttorio /etc/mail/procmailrcs creare i file per filtrare la posta, ricordandosi di estendere gli indirizzi dei destinatari finali con lo pseudodominio .PROCMAIL
Discussione ed esempi
Il mailer procmail e mailertable
La macro MAILER(procmail) aggiunge la definizione del procmail mailer.
Questo è completamente separato ed indipendente dalla feature
local_procmail (che si può usare per filtrare la posta in ingresso)
La macro MAILER(procmail) non aggiunge codice alla configurazione, e per usare il mailer stesso bisogna usare mailertable o aggiungere regole a sendmail.cf
sendmail chiama procmail dal mailer mailer nel modo seguente
Il flag -Y selezione il formato Berkeley Unix mailbox; il flag -m invoca procmail come un filtro di posta di uso generale. $h contiene il path del file di regole, $f è il valore dell'envelope sender (mittente) del messaggio, $u quello dell'envelope recipient (destinatario) del messaggio: nel file rc essi possono essere referenziati come le variabili $1 e $2.
La macro MAILER(procmail) non aggiunge codice alla configurazione, e per usare il mailer stesso bisogna usare mailertable o aggiungere regole a sendmail.cf
- /etc/mail/mailertable
example.com procmail:/etc/mail/procmailrcs/spam-filter . procmail:/etc/mail/procmailrcs/any.rc
# sendmail -bv crooks@example.com crooks@example.com... deliverable: mailer procmail, host /etc/mail/procmailrcs/spam-filter, user crooks@example.com # sendmail -bv spammers@wrotethebook.net spammers@wrotethebook.net... deliverable: mailer procmail, host /etc/mail/procmailrcs/any.rc, user spammers@wrotethebook.net
sendmail chiama procmail dal mailer mailer nel modo seguente
procmail -Y -m $h $f $u
Il flag -Y selezione il formato Berkeley Unix mailbox; il flag -m invoca procmail come un filtro di posta di uso generale. $h contiene il path del file di regole, $f è il valore dell'envelope sender (mittente) del messaggio, $u quello dell'envelope recipient (destinatario) del messaggio: nel file rc essi possono essere referenziati come le variabili $1 e $2.
Regole locali
Se l'intento è tornare ad inviare la posta dopo il filtraggio, bisogna
proteggersi dai loop che si possono provocare rientrando nel mailer
procmail inavvertitamente; per fare ciò, aggiungiamo lo pseudodominio
.PROCMAIL all'indirizzo del destinatario utilizzando
le regole di procmail: in questo modo il messaggio no sarà mai
selezionato tra quelli di mailertable. Ecco le regole da aggiungere in
fondo a /etc/mail/sendmail.mc (attenzione al TAB tra '>' e '$'):
- /etc/mail/sendmail.mc
LOCAL_CONFIG # Add .PROCMAIL to the pseudo-domain list CP.PROCMAIL LOCAL_RULE_0 # Strip .PROCMAIL and send via esmtp R$+ < @ $+ .PROCMAIL . > $#esmtp $@ $2 $: $1<@$2>
- La macro LOCAL_CONFIG delimita una sezione che sarà aggiunta a sendmail.cf verbatim;
- CP.PROMAIL inserisce .PROCMAIL nell classe P degli pseudodomini che sendmail non cercherà di risolvere via DNS.
- La macro LOCAL_RULE_0 dà inizio alla sezione di codice da aggiungere al ruleset 0—more - anche detto il parse ruleset; questo codice farà parte del ParseLocal ruleset (anche detto ruleset 98). L'intento del parse ruleset è risolvere l'indirizzo di consegna nella tripla di consegna della posta.
- Il comando R riconosce indirizzi della forma user@domain.PROCMAIL, riscrivendoli in una tripla con mailer “esmtp”, host uguale a “domain” e destinatario “user@domain”. Dopo aver rigenerato la configurazione, si dovrà vedere:
# sendmail -bv crooks@example.com.PROCMAIL crooks@example.com.PROCMAIL... deliverable: mailer esmtp, host example.com, user crooks@example.com
Regole di procmail
Passiamo ora ad un esempio completo. Lo scopo (discutibile) è la
creazione di un'isanza di sendmail che inoltri tutti i messaggi che
transitano per la macchina a indirizzi terzi.
- Il file /etc/mail/sendmail.mc è come sopra
- Mailertable:
- /etc/mail/mailertable
. procmail:/etc/mail/procmailrcs/any.rc
- Utilizziamo regole a carattere generale per organizzare l'ambiente.
- /etc/mail/promailrcs/000_setup
# Per debugging (usare =no e =no per spegnerle) VERBOSE=on LOGABSTRACT=all # PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin LOGFILE=/var/log/proc_log #recommended #per non confondersi OSENDER=$1 ORECIPIENT=$2 #Viene scritta nel logfile alla fine. TRAP="echo '---------- End of procmailer ------' " # # Controllo antiloop: usiamo cintura e bretelle - di qui non si dovrebbe passare mai :0 w * 1^0 ^X-Our-Anti-Loop: SET ! -f $OSENDER $ORECIPIENT.PROCMAIL
- /etc/mail/promailrcs/999_end
# # Controllo antiloop :0 w | (formail \ -A"X-Our-Anti-Loop: SET" \ ) | $SENDMAIL -oi -f $OSENDER $ORECIPIENT.PROCMAIL
- In any.rc si includono all'inizio e alla fine i file di cui sopra: tra i due si effettua l'inoltro in copia:
- /etc/mail/promailrcs/any.rc
# Setup generale INCLUDERC=/etc/mail/procmailrcs/000_setup # #flag 'c' creates a carbon copy for processing #Evita i duplicati per indirizzi multipli :0 Whc | formail -D 16384 /tmp/idcache # #flag 'c' creates a carbon copy for processing #flag 'e' executes only if previous command failed. #espiones must contain addresses that are either local or .PROCMAIL terminated :0 ec | (formail -A"X-Our-Processed: SET" ) | $SENDMAIL -oi -f $OSENDER espiones #clean up and forward INCLUDERC=/etc/mail/procmailrcs/999_end
- I messaggi saranno inviati in copia ad un alias; gli indirizzi non locali vanno essi stessi protetti:
- /etc/aliases
espiones: foo@bar.com.PROCMAIL, baz@sna.fu.PROCMAIL, snafu
No comments:
Post a Comment