Antes de começar a ler o artigo, que tal fazer parte de nosso grupo no Telegram @kyafilter ?
Na parte I vimos como instalar, configurar e integrar o SPFBL ao Zimbra. Neste artigo vamos levar a integração entre o SPFBL e o Zimbra muito mais adiante utilizando o KyaFilter, um programa criado para funcionar como ”content filter” do postfix permitindo muita flexibilidade ao lidar com as mensagens e os comportamentos desejados.
A primeira integração é feita fazendo os botões “Spam” e “Não Spam” do webmail do Zimbra, interagirem com o SPFBL, dessa forma as ações dos usuários vai afinando o comportamento do anti-spam e tornando-o cada vez mais eficiente. Essa interação é feita de forma granular e individual, permitindo que o bloqueio de uma mensagem seja feito apenas para o usuário que desejar bloquear aquele remetente.
Outra ação é o “autowhite”, ou seja, todos os endereços de e-mail para os quais se envia mensagens são inseridos na whitelist do SPFBL minimizando os falsos positivos, afinal de contas, faz sentido querer receber a resposta dos endereços para os quais se enviam mensagens.
As mensagens que passarem pelo primeira checagem de envelope do SPFBL terão seu conteúdo analisado e, de acordo com a pontuação recebida a mesnagem será então marcada como Spam para ser entregue na pasta de Spam ou não.
Fluxo
A mensagem ao chegar no servidor é recebido pelo Postfix que faz uma checagem de envelope com o SPFBL, em seguida encaminha para o Amavis que faz as checagens no Clamav e no SpamAssassin. Com a instalação do KyaFilter, o Amavis entregará a mensagem para o KyaFilter que ao finalizar faz a entrega de volta ao Postfix. Desenhando:
Postfix –> SPFBL –> Amavis –> KyaFilter + SPFBL –> Postfix
Pré requisitos
O KyaFilter exige SPFBL V3 ou superior para funcionar como esperado, além do python 2.7
Baixando o KyaFilter
Você pode fazer o download do KyaFilter aqui
Instalando
1 – Copie o arquivo kyafilter.tgz para o diretório /opt ou baixe diretamente com o comando abaixo:
wget https://www.anahuac.eu/kyafilter.tgz
2 – Descompacte o arquivo com o comando abaixo:
tar zxvf kyafilter.tgz
3 – Crio o diretório /opt/kyafilter e copie o conteúdo para ele
mkdir /opt/kyafilter
cp kyafilter /opt/ -Rf
4 – Entre no diretório criado e execute o instalador:
cd /opt/kyafilter
./install
O instalador solicita algumas informações:
Default installation dir [/opt/kyafilter]:
* apenas pressione enter
Zimbra Spam Account:
* Essa conta será criada pelo instalador
Zimbra Ham Account:
*Essa conta será criada pelo instalador
SPFBL IP address:
* Se no SPFBL está tudo como 127.0.0.1, deixe assim mesmo.
SPFBL runs in a multi domain admins server? (N/y):
* Se seu SPFBL tiver um usuário por domínio responda \"y\", se não apenas pressione enter
Messages too big will have only headers scanned? [yes]:
* Esta opção vai entregar apenas os cabeçalhos das mensagens grandes para o SPFBL.
How big a message nees to be to have only it\'s header scanned? [1048576] 1Mb in bytes:
* Qual é o tamanho da mensagem grande?
Ele cria as contas de HAM e SPAM para as quais o integrador do Zimbra vai envias as mensagens quando se usam os botões de Spam e Não Spam no webmail do Zimbra.
4 – Alterando o master.cf.in do Zimbra
Esse passo exige um pouco mais de cuidado, portanto atenção:
a) Edite /opt/zimbra/common/conf/master.cf.in
b) Adicione o trecho abaixo, no final do aquivo, respeitando a tabulação:
# Kya Filter
kyafilter unix - - n - 10 smtp
-o smtp_data_done_timeout=5800
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o smtpd_sasl_auth_enable=no
-o max_use=20
[127.0.0.1]:20024 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o virtual_mailbox_maps=
-o virtual_alias_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o smtpd_end_of_data_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_milters=
-o smtpd_sender_restrictions=
-o smtpd_reject_unlisted_sender=no
-o smtpd_relay_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_sasl_auth_enable=no
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8,[::1]/128
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings
-o local_header_rewrite_clients=
-o syslog_name=postfix/kyafilter
c) Ainda dentro de master.cf.in procure pela linha abaixo:
[%%zimbraLocalBindAddress%%]:10025 inet n - n - - smtpd
-o content_filter=
Altere para ficar assim:
[%%zimbraLocalBindAddress%%]:10025 inet n - n - - smtpd
-o content_filter=kyafilter:[127.0.0.1]:20025
5 – Reiniciando os serviços
Com o KyaFilter instalado e o Zimbra configurado, é hora de reiniciar os serviços.
Primeiro o KyaFilter, execute:
/etc/init.d/kyafilter restart
/etc/init.d/kyafilter status
Em seguida basta reiniciar o MTA do Zimbra, assim:
su - zimbra -c "/opt/zimbra/bin/zmmtactl restart"
6 – Acompanhe os logs:
Cada comando abaixo em um terminal diferente. Particularmente prefiro usar o screen para isso
tail -f /var/log/mail.log | grep kya
tail -f /var/log/kyafilter.log
E assim a integração entre Zimbra e SPFBL usando o KyaFilter está completa.
Atualizando o SPFBL + KyaFilter de qualquer versão anterior a 1 para a versão 1.0 ou posterior
Se você já tinha um SFPBL com KyaFilter instalado e esta atualizando então vai precisar tomar alguns cuidados extras, pois as atualizações foram tão grandes que exigem cuidados extras.
KyaFilter
A atualização do kyafilter é bem simples: apague o conteúdo de /opt/kyafilter e copie os novos aruqivos para lá. E em seguida ajuste o arquivo de configuração como dito abaixo:
Adicione estas duas novas opções no kyafilter.conf:
spfbl_port_aw = 9877
Se seu SPFBL delega domínios para usuários diferentes então a opção spfbl_port_aw deve ser definida para 9875.
Se seu SPFBL usa apenas um usuário para gerenciar todos os domínios, então basta deixar a opção spfbl_port_aw igual à opção spfbl_port, ou seja, 9877
spfbl_user = admin_do_spfbl
Nesta opção coloque o seu usuário admin do SPFBL.
Finalmente reinicie o KyaFilter
/etc/init.d/kyafilter restart
SPFBL
A atualização do SPFBL
SPFBL
Roteiro simplificado:
1) Exporte as listas de block e white
spfbl superwhite show all > whitelist.old
spfbl superblock show all > blocklist.old
2) Proceda com a atualização do SPFBL
A atualização do SPFBL é feita da mesma forma que uma instalação do zero, sobrescrevendo os arquivos descritos no tutorial de instalação do SPFBL. O único passo extra é criar o diretório \”history\”
3) Tratar as listas exportadas acima
A sintaxe das bases de white e block do SPFBL mudaram, portanto a sua base atual não servirá na nova versão do SPFBL.
Na versão atual a sintaxe é assim:
[email protected]>[email protected]
Na versão nova é exatamente invertido.
A outra mudança é que na versão nova do KyaFilter os registros no SPFBL são feitos usando explicitamente o usuário do SPFBL, aquele criado no momento da instalação do SPFBL e definido como admin.
Dessa forma a nova sintaxe é assim:
[email protected]:[email protected]>[email protected]
Você pode fazer o seu script para corrigir isso, mas eu forneço dois aqui abaixo.
Blocklist
Script fix_block.sh
#! /bin/bash
# BLOCK
seudominio="dominio"
admin_do_spfbl="spfbl@dominio"
>blockadd
spfbl superblock show all | grep $seudominio | egrep -v "WHOIS|DNSBL|REGEX" | grep "@$seudominio$" > blockdel
for cada in `cat blockdel` ; do
from=`echo $cada | cut -d\> -f1 | cut -d\; -f1`
to=`echo $cada | cut -d\> -f2`
echo "$admin_do_spfbl:$from>$to" >> blockadd
done
Depois de executar esse script você terá dois arquivos resultantes: blockdel e blockadd.
Como os nomes já dizem um serve para apagar as regras antigas e o outro para adicionar as regras novas. Confira os arquios para ver se eles foram gerados corretamente.
Tudo certo? arquivos conferidos?… então execute:
for cada in `cat blockdel` ; do ; spfbl superblock drop "$cada" ; done
for cada in `cat blockadd` ; do ; spfbl superblock add "$cada" ; done
Whitelist
Script fix_white.sh
#! /bin/bash
# WHITE
seudominio="dominio"
admin_do_spfbl="spfbl@dominio"
>whiteadd
spfbl superwhite show all | grep '@$seudominio;PASS' > whitedel
for cada in `cat whitedel` ; do
to=`echo $cada | cut -d\> -f1 | cut -d\; -f1`
from=`echo $cada | cut -d\> -f2`
echo "$admin_do_spfbl:$from;PASS>$to" >> whiteadd
done
Depois de executar esse script você terá dois arquivos resultantes: whitedel e whiteadd.
Como os nomes já dizem um serve para apagar as regras antigas e o outro para adicionar as regras novas. Confira os arquios para ver se eles foram gerados corretamente.
Tudo certo? arquivos conferidos?… então execute:
for cada in `cat whitedel` ; do ; spfbl superwhite drop "$cada" ; done
for cada in `cat whiteadd` ; do ; spfbl superwhite add "$cada" ; done