Bogofilter e SpamAssassin - dica 1/2 Bofofilter e SpamAssassin ========================= Colaboração: Douglas Adriano AugustoEu desenvolvi uma shell script para o treinamento inicial do bogofilter através do spamassassin. Funciona da seguinte maneira: dado um conjunto de mensagens de e-mail (cada qual em um arquivo), contendo spams e não spams, o spamassassin classifica cada uma delas, assim como o bogofilter. Em cada mensagem que a classificação do bogofilter diferir da classificação do spamassasin, este é retreinado de acordo com o palpite do spamassassin. Com uma variedade considerável de e-mails, o bogofilter é capaz de assimilar com bastante fidelidade a experiência do spamassassin. A partir deste momento, o bogofilter já pode seguir rumo próprio, apenas refinando à medida que for necessário. Abaixo o script: --- ### bogoassassin.sh ### #!/bin/sh # Treina a base do Bogofilter utilizando o conhecimento do Spamassassin, para # uma dada mensagem. Se o Bogofilter classificar incorretamente (sob a # perspectiva do spamassassin), este será re-treinado para o caso onde falhou. # Train On Error (TOE) # O objetivo é aproveitar toda a experiência do Spamassasin e, então, apenas # refinar a base de dados do Bogofilter ao decorrer do tempo. # Douglas Augusto (douglas@coc.ufrj.br), 15/Set/2003 - Sob GPL # Uso: ./bogoassassin.sh arquivo-mensagem # É recomendado o processamento em lote, tendo como base todas as mensagens # previamente arquivadas: # Ex.: for i in $(ls); do ./bogoassassin.sh $i; done # (processa todas as mensagens do diretório atual) # localização dos binários BOGOFILTER="/usr/bin/bogofilter"; SPAMASSASSIN="/usr/bin/spamassassin"; SPAMASSASSINCLIENT="/usr/bin/spamc"; $BOGOFILTER < $* # 0 = SPAM, 1 = NONSPAM CLASS_BOGO=$? # Classificação pelo SpamAssassin # Modo normal (mais lento), habilitado por padrão: $SPAMASSASSIN -e < $* > /dev/null # Caso utilize o spamd/spamc. Este método é recomendado para o processamento em # lote, por ser mais veloz. É necessário, entretanto, que o servidor 'spamd' # esteja rodando. Descomente a linha a seguir e comente a linha referente ao modo normal. #$SPAMASSASSINCLIENT -c < $* > /dev/null # 0 = NONSPAM, >0 = SPAM if [ $? = 0 ]; then # nao é SPAM, segundo o spamassassin echo "- NONSPAM" "["$*"] (Spamassassin)" if [ $CLASS_BOGO = 0 ]; then # o bogo acusou erroneamente SPAM echo " SPAM ["$*"] (Bogofilter): Re-treinando!" # fazer a correção $BOGOFILTER -n < $* else echo " NONSPAM ["$*"] (Bogofilter): Ok!" fi else # é SPAM, segundo o spamassassin echo "- SPAM" "["$*"] (Spamassassin)" if [ $CLASS_BOGO != 0 ]; then # o bogo não acusou SPAM echo " NONSPAM ["$*"] (Bogofilter): Re-treinando!" # fazer a correção $BOGOFILTER -s < $* else echo " SPAM ["$*"] (Bogofilter): Ok!" fi fi ### Bogofilter e SpanAssassin - dica 2/2 Colaboração: Victor Maida Uma maneira de deixar o bogofilter ainda mais eficiente é usar o spamassassin para treiná-lo automaticamente. A regra abaixo faz com que as mensagens consideradas spam pelo spamassassin que o bogofilter deixar passar serão enviadas para ele novamente com a opção -s: procmail v3.22 2001/09/10 SpamAssassin version 2.61 bogofilter version 0.15.13 --.procmailrc-- #Bogofilter :0fw | bogofilter -u -e -p -l :0e { EXITCODE=75 HOST } # O que foi classificado como nao-spam pelo bogofilter é jogando no # spamassassin :0fwE * ! ^X-Bogosity: Yes * ! ^X-Beenthere:.*spamassassin-talk@lists.sourceforge.net | spamassassin # spam pego pelo spamassassin é mandado de volta para o bogofilter, para # treiná-lo :0c * ^X-Spam-Status: Yes { :0w | bogofilter -s } # Coloca as mensagens consideradas como spam na mailbox spam # para poderverificar se nenhuma mensagem válida foi considerada # spam :0: * ^X-Bogosity: Yes, tests=bogofilter spam :0: * ^X-Spam-Status: Yes spam --.procmailrc--