Para quem não sabe, o Spamassassin é o filtro antispam. Ele vai filtrar boa parte do lixo eletrônico.
Antes de instalar o Spamassassin nós precisamos instalar os módulos que puxamos. São algumas ferramentas do Perl e que o antispam vai usar.
No caso da minha distribuição (Slackware 12.0 Full) eu não tive problemas para "compilar" estes módulos. É possível que o Spamassassin peça por mais algum modulo necessário que a sua distribuição não tenha. Neste caso você pode entrar no site
http://search.cpan.org e procurar pelo módulo, puxar e instalar da mesma forma que instalo os outros aqui (caso não queira instala-lo, pule para a próxima parte Sceo_rquota).
Vamos ao trabalho:
# cd /home/progs
# tar xzf Digest-SHA1-2.12.tar.gz
# cd Digest-SHA1-2.12
# perl Makefile.PL
# make
# make install
# cd /home/progs
# tar xzf HTML-Parser-3.65.tar.gz
# cd HTML-Parser-3.65
# perl Makefile.PL
# make
# make install
# cd /home/progs
# tar xzf Net-DNS-0.66.tar.gz
# cd Net-DNS-0.66
# perl Makefile.PL
Aqui é capaz que ele te faça uma pergunta. CALMA!!! Sem pânico. É só dar ENTER.
# make
# make install
# cd /home/progs
# tar xzf NetAddr-IP-4.027.tar.gz
# cd NetAddr-IP-4.027
# perl Makefile.PL
# make
# make install
# cd /home/progs
# tar xzf IO-Zlib-1.10.tar.gz
# cd IO-Zlib-1.10
# perl Makefile.PL
# make
# make install
Esta terminando. Força aí! Agora o Spamassassin:
# cd /home/progs
# tar xjf Mail-SpamAssassin-3.2.5.tar.bz2
# cd Mail-SpamAssassin-3.2.5/
# perl Makefile.PL
# make
# make install
Edite o arquivo de configuração do Spamassassin:
# pico /etc/mail/spamassassin/local.cf
Mude a opção trusted_networks para 127.0.0.0/8 e para sua rede local. Digamos que minha rede local seja 192.168.0.0/24, então ficaria assim:
trusted_networks 127.0.0.0/8 192.168.0.0/24
Acrescente a seguinte linha no final do arquivo:
skip_rbl_checks 1
Salve e saia do arquivo.
Spamassassin instalado e configurado, vamos agora criar um script para ligá-lo.
# pico /etc/rc.d/rc.spamd
Coloque o seguinte conteúdo:
#!/bin/sh
#############################################
# Script de controle do Spamassassin
#
spamd_start() {
if [ -x /usr/bin/spamd ]; then
echo "Starting spamd: /usr/bin/spamd"
/usr/bin/spamd -C /etc/mail/spamassassin -d -x -L --pidfile=/var/run/spamd.pid
fi
}
spamd_stop() {
pid=`cat /var/run/spamd.pid`
kill $pid
}
case "$1" in
'start')
spamd_start
;;
'stop')
spamd_stop
;;
'restart')
spamd_stop
sleep 1
spamd_start
;;
*)
echo "Os parametros aceitaveis sao: $0 start|stop|restart"
esac
Salve e saia do arquivo e dê permissão de execução para ele:
# chmod 500 /etc/rc.d/rc.spamd
Agora rode o script para ligar o Spamassassin.
# /etc/rc.d/rc.spamd start
Faça o rc.local chamá-lo quando o sistema iniciar:
# echo "/etc/rc.d/rc.spamd start" >> /etc/rc.d/rc.local
Caso queira testá-lo, chame-o assim:
# spamc -c < email.eml
Onde "email.eml" é um arquivo texto que contém um email completo: header e corpo.
Nós temos duas opções para chamar o Spamassassin e fazê-lo filtrar nossos emails:
Opção 1 - Chamá-lo assim que o MTA remoto termina de entregar o email, com isso, a mensagem ainda pode ser recusada antes de ser aceita, mas a desvantagem é que se aquele email for para mais de um destinatário o bloqueio vai valer para todos e não há como separar a mensagem em pasta diferente (pasta Spam).
Opção 2 - Chamá-lo antes de entregar em cada caixa postal, através de um Shell Script acionado com a opção Dlocal do sceo.conf. Desvantagem é que servidor roda o Spamassassin mais vezes, uma para cada email interno, mas temos a vantagem de criar filtros individuais e se o email for considerado Lixo Eletrônico, ele vai parar na pasta Spam. Coisa que um Webmail ou cliente MUA configurado via IMAP podem acessar sem problemas. Eu prefiro a opção 2. Vou demonstrar as duas aqui. Escolha uma delas:
OPÇÃO 1:
Edite o arquivo /usr/local/sceo/regras_data:
# pico /usr/local/sceo/regras_data
Acrescente no final do arquivo a seguinte regra:
Obs.: Todos os comandos abaixo devem ficar em uma única linha.
!Ip? "127.0.0.1" !Auth? Exec! "/usr/bin/spamc -s 300000 -c < /var/spool/sceo/c%d" Exec_resp? "1" Log! "/var/log/spamd.log: Spam -> %i From:%f To:%r" Reply! "500 Email considerado Lixo Eletronico (Junk Mail)" Deny!
Caso a conexão não venha do localhost e não seja autenticada, o Sceo rodará o spamc para verificar a mensagem e recusar se for o caso e fazer um log (/var/log/spamd.log).
OPÇÃO 2:
Edite o arquivo /usr/local/sceo/sceo.conf:
# pico /usr/local/sceo/sceo.conf
Procure e altere a opção Dlocal que mudamos no início do tutorial para:
Dlocal "/usr/local/sceo/aplicafiltro %l"
Salve e saia do arquivo. Agora confirme a permissão de execução do arquivo /usr/local/sceo/aplicafiltro e edite-o:
# chmod 555 /usr/local/sceo/aplicafiltro
# pico /usr/local/sceo/aplicafiltro
Deixe-o desta forma:
#!/bin/sh
/usr/bin/spamc -s 300000 -c < $2
RESP=$?
if [ $RESP == 0 ]; then
# --- Caso O Spamassassin Tenha retornado ZERO (Nao e’ Spam) ---
/usr/local/libexec/dovecot/deliver -d $1 < $2
else
# --- Caso O Spamassassin Tenha retornado 1 (É’ Spam) Vamos separar na pasta Spam ---
/usr/local/libexec/dovecot/deliver -m Spam -d $1 < $2
fi
Salve e saia do arquivo. Esta feito. Se o Spamassassin considerar a mensagem como Lixo, o deliver vai entregar a mensagem na pasta Spam dentro da caixa postal do cliente.