SPFBL local com Zimbra – Parte II – KyaFilter

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