Após um periodo de execução do Spamassassin, percebemos que ele esta marcando as mensagens de Spam corretamente, podemos então querer excluir essas mensagens antes de cair para o usuário, ou redirecioná-las para outra pasta “.Spam” por exemplo caso use Imap com Maildir.
O Spamassassin nativamente não apaga os emails marcados como SPAM.
Podemos excluir ou fazer outra ação com o E-mail criando um próprio script para verificar o conteúdo das mensagens.
Abaixo segue um script para filtrar as mensagens com o postfix e o spamassassin.
Foi testado no Debian Squeeze 6.0.4 , Postfix 2.7.1 e Spamassassin 3.3.1
Criando o script
Crie o arquivo /bin/spamchk com o seguinte conteudo:
#!/bin/sh # ----------------------------------------------------------------- # File: spamchk # Purpose: SPAMASSASIN shell-based filter # Location: /usr/local/bin # Usage: Call this script from master.cf (Postfix) # ----------------------------------------------------------------- # Variables SENDMAIL="/usr/sbin/sendmail -i" EGREP=/bin/egrep TMPDIR=/var/tmp # Exit codes fromEX_UNAVAILABLE=69 # Number of *'s in X-Spam-level header needed to sideline message: # (Eg. Score of 5.5 = "*****" ) SPAMLIMIT=6 # Clean up when done or when aborting. trap "rm -f $TMPDIR/out.$$" 0 1 2 3 15 # Pipe message to spamc cat | /usr/bin/spamc -u filter | sed 's/^\.$/../' > $TMPDIR/out.$$ # Are there more than $SPAMLIMIT stars in X-Spam-Level header? : if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < $TMPDIR/out.$$ then # Option 1: Move high scoring messages to sideline dir so # a human can look at them later: # mv out.$$ $SIDELINE_DIR/`date +%Y-%m-%d_%R`-$$ # Option 2: Divert to an alternate e-mail address: #$SENDMAIL xyz@xxxx.xx < $TMPDIR/out.$$ # Option 3: Delete the message rm -f $TMPDIR/out.$$ else $SENDMAIL "$@" < $TMPDIR/out.$$ fi # Postfix returns the exit status of the Postfix sendmail command. exit $?
Adicionando usuário e mudando a permissão para executar o script
Adicione o usuário e grupo filter:
groupadd -g 500 filter useradd -u 500 -g 500 -d /home/filter -s /bin/false filter chmod +x /bin/spamchk chown filter.filter /bin/spamchk
Configurando o Postfix:
Modifique a linha do smtp no arquivo de configuração master.cf:
smtp inet n - n - - smtpd -o content_filter=spamchk:dummy
Crie um transporte chamado spamchk no arquivo de configuração master.cf:
spamchk unix - n n - 10 pipe flags=Rq user=filter argv=/bin/spamchk -f ${sender} ${recipient}
Concluindo
Recarrege as configurações do postfix:
service postfix reload
Faça os testes com mensagens que eram identificadas como SPAM e fique atento aos logs para ver se tudo esta certo:
tail -f /var/log/mail.lof
Jul 17 16:01:09 maximahost spamd[31927]: spamd: setuid to filter succeeded Jul 17 16:01:09 maximahost spamd[31927]: spamd: processing message <222d9127-cb72-4a48-85b0-d09a92a3a361@xtnvmta1309.xt.local> for filter:500 Jul 17 16:01:11 maximahost spamd[28310]: spamd: identified spam (7.4/6.0) for filter:500 in 3.6 seconds, 10485 bytes. Jul 17 16:01:11 maximahost spamd[28310]: spamd: result: Y 7 - ADVANCE_FEE_2,ADVANCE_FEE_3,BAYES_00,FILL_THIS_FORM_LONG,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS,T_FILL_THIS_FORM,T_LOTS_OF_MONEY,US_DOLLARS_3 scantime=3.6,size=10485,user=filter,uid=500,required_score=6.0,rhost=localhost,raddr=127.0.0.1,rport=58593,mid=,bayes=0.000000,autolearn=no Jul 17 15:55:51 maximahost postfix/pipe[3812]: 5F14F9802F8: to= , relay=spamchk, delay=5.4, delays=1.8/0/0/3.6, dsn=2.0.0, status=sent (delivered via spamchk service) Jul 17 15:55:51 maximahost postfix/qmgr[32767]: 5F14F9802F8: removed
Referências:
http://www.postfix.org/FILTER_README.html
http://www.akadia.com/services/postfix_spamassassin.html