SPFBL + KyaFilter local com Carbonio

Neste tutorial vamos seguir todas as etapas para instalr o SPFBL e o KyaFilter localmente em um servidor Casrbonio CE.

Antes de começar gostaria de fazer um agradecimento público à SERVERDO.IN que patrocinou a confeccção desde material.

O SPFBL é um poderoso anti-spam livre e gratuito, com gestão independente por domínio via interface web. O índice de acerto do SPFBL é muito bom mesmo e tem tornado a luta contra o spam muito mais fácil.

O KyaFilter é um daemon que integra o SPFBL ao Carbonio permitindo gestão dinâmica onde as ações dos usuários interagem com o SPFBL tornando-o cada vez mais ajustado às necessidade de cada ambiente.

Apesar de tudo de bom, há algumas limitações que eu gostaria d frisar para evitar decepções:

1 – O par SPFBL+KF não faz retenção de mensagens bloqueadas, ou seja, o reenvio fica a cargo do respeito à RFC pelo servidor de envio;
2 – A interface web, chamada de painel de controle é bastante limitada e tem um visual bem superado;

Mas esses são detalhes menores em uma ferramenta sensacional. Fica aqui meus parabéns ao Leandro que é o criador e mantenedor do SPFBL.

Neste tutorial vamos ver como fazer a instalação, integração e configuração para trabalhar em ambiente com um ou mais domínios usando a versão GNU Ubuntu 22.04 LTS Server, Carbonio CE 24.12.1 e instalando o SPFBL+KF no mesmo servidor do Carbonio.

Em todas as configurações vou usar o domínio testes.com.br e você deverá substituí-lo pelo seu domínio.

Pré requisitos

Memória RAM e CPUs são críticos para o bom funcionamento do Carbonio e mais ainda quando se integra com SPFBL+KF no mesmo servidor. A recomendação mínima é de 32Gb RAM e 8 CPUS.

O SPFBL está feito em Java e para poder funcionar precisa do openjdk e de mais alguns utilitários. Já o KyaFiltyer está feito em python 2 o que també exigirá a instalação de alguns pacotes e o ajuste do binário padrão para a V2.

Instale assim:

apt install openjdk-17-jre nmap bc ncat python2.7

Hora de fazer o python2 como padrão do sistema, assim:

ln -s /usr/bin/python2.7 /usr/bin/python

Baixando o SPFBL

Você deve baixar a última versão do SPBL do site deles no Github. Claro que você pode usar o comando git, mas aqui eu vou usar o bom e velho wget mesmo.

Seguem os comandos:

cd /opt
wget https://github.com/leonamp/SPFBL/archive/master.zip
unzip master.zip

Instalando o SPFBL

Depois de descompactar com o comando unzip acima, será criado o diretório SPFBL-master. Será necessário criar um diretório de instalação de sua escolha e vários arquivos e diretórios precisam ser copiados.

Eu escolhi instalar o SPFBL em /opt/spfbl. Então seguem os comandos:

cd /opt
mkdir spfbl
cp -a SPFBL-master/dist/SPFBL.jar spfbl/
cp -a SPFBL-master/run/spfbl.conf spfbl/
cp -a SPFBL-master/lib spfbl/
cp -a SPFBL-master/data spfbl/
cp -a SPFBL-master/web spfbl/
cp -a SPFBL-master/client/spfblpostfix.pl spfbl/
chmod +x spfbl/spfblpostfix.pl
mkdir spfbl/history
mkdir /var/log/spfbl
cp SPFBL-master/client/spfbl.sh /sbin/spfbl
chmod +x /sbin/spfbl
cp SPFBL-master/run/spfbl-init.sh /etc/init.d/spfbl-init
chmod 755 /etc/init.d/spfbl-init

Configurando o SPFBL

Hora de fazer os ajustes necessários na configuração do spfbl. O primeiro passo é aumentar a memória reservada para o daemon. Edite o aqruivo spfbl-init e altere como sugerido abaixo:

vi /etc/init.d/spfbl-init

troque:
/usr/bin/java -jar -Xms1024m -Xmx2048m /opt/spfbl/SPFBL.jar 2>&1 &
por:
/usr/bin/java -jar -Xms2g -Xmx4g /opt/spfbl/SPFBL.jar 2>&1 &

Em seguida vamos criar um e-mail exclusivo no Carbonio para a gerência e uso do SPFBL:

su - zextras -c"zmprov ca [email protected] sua_senha_aqui"

Agora edite o arquivo /opt/spfbl/spfbl.conf e ajuste as seguintes opções como descrito abaixo:

dns_provider_primary=8.8.8.8
hostname=mail.testes.com.br
interface=Nome_da_Interface_de_Rede (eth0, enp6s18)
http_port=8001
peer_limit=127
dnsbl_limit=127
spfbl_limit=127
[email protected]
smtp_auth=true
smtp_starttls=yes
smtp_host=mail.testes.com.br
smtp_port=587
[email protected]
smtp_password=sua_senha_aqui
defer_time_softfail=0
defer_time_yellow=0
cache_time_store=120

As opções são bem auto explicativas e estão documentadas no site do SPFBL então eu não vou repeti-las aqui. Apenas tenha o cuidado de ajustar o nome de seu domínio e hostname do servidor de email.

Agora edite o arquivo /sbin/spfbl e modifique a opção IP_SERVIDOR para o endereço IP ou nome do seu servidor. Pessoalmente eu uso o endereço IP do loopback, assim:

IP_SERVIDOR="127.0.0.1"

Iniciando o SPFBL

Hora de iniciar ele ver os logs. Execute:

/etc/init.d/spfbl-init start

E verifique os logs:

tail -f /var/log/spfbl/spfbl*.log

Você também pode executar o comando abaixo para ter certeza de que seu SPFBL está funcionando adequadamente:

spfbl version

Finalmente faça o SPFBL iniciar automaticamente quando o servidor for reiniciado. Para isso adicione a linha abaixo no arquivo “/etc/rc.local”. Se ele não existir, crie e torne executável. Visando ser o mais didático possível vamos assumir que ele não existe e colocar todos os comandos a seguir:

vi /etc/rc.local

Adicione o conteúdo:

#! /bin/bash
/etc/init.d/spfbl-init start

Torne o aruqivo executável:

chmod +x /etc/rc.local

Armazenando as alterações periodicamente

o SPFBL mantém todas as alterações em memória, portanto uma queda de energia ou reset podem causar a perda delas. Por isso é importante programar no cron para que elas sejam salvas periodicamente.

Insira a seguinte linha no arquivo /etc/crontab para fazê-lo:

0 1 * * * root /sbin/spfbl store

Essa linha salvará todas as alterações, todo dia às 01 da manhã.

Ativando o Painel de Controle via web do SPFBL

O acesso ao Painel de Controle usando um usuário específico. Abaixo seguem os comandos para isso. Atenção para o hostname e o e-mail do admin

spfbl client add 127.0.0.1/32 hostname_server SPFBL [email protected]
spfbl user add [email protected] admin
echo "USER SET [email protected] PASSWORD SenhaForteAqui123" | nc localhost 9875

Use uma senha forte!

Hora de acessar o Painel de controle

A autenticação no Painel de Controle do SPFBL é feita usando o usuário e senha acessando a URL do SPFBL em seu servidor adicionando porta 8001 e o usuário admin, assim:

1 – Tenha certeza de que a porta 8001 está liberada em seu firewall. Pode-se usar qualquer outra porta desejada, basta definir a opção http_port no arquivo de configuração do SPFBL e reiniciar o serviço;

2 – Acesse o link

http://mail.testes.com.br:8001/[email protected]

Navegadores modernos podem forçar o uso de HTTPS, se esse for o caso, use uma “Janela anônima” para acessar a URL por HTTP

Se o Painel de Controle estiver vazio, ou seja, sem nenhuma mensagem, aguarde alguns minutos que elas vão aparecer.

Adicionando gestão por domínio no SPFBL

O SPFBL permite gestão individualizada por domínio. Isso facilita demais a gestão do anti-spam, permitindo que cada domínio tenha suas próprias políticas de liberação e bloqueio.

Essa gestão é terceirizada, ou seja, cada domínio tem sua própria conta administrativa que gerencia apenas esse domínio.

A ativação desse recurso se dá através da criação de um usuário para cada domínio. Essas contas são do tipo “postmaster”. É assim que o SPFBL sabe que elas pertencem a um determinado domínio.

A criação dessas contas no SPFBL é feita assim:

spfbl user add [email protected] postmaster
echo "USER SET [email protected] PASSWORD SenhaForteAqui123" | nc localhost 9875
  • Todas as mensagens para dominio1.org serão gerenciadas pela conta [email protected]
  • O acesso ao painel de controle é igual ao do admin, apenas trocando o usuário no fim, assim:
http://mail.testes.com.br:8001/[email protected]

Integrar o SPFBL com o Carbonio

A integração é bem simples. Essencialmente o SPFBL é adicionado como um content-filter no CArbonio, ou seja, a mensagem chega, é enviada para o SPFBL e este devolve um “status” de OK ou de erro e o Postfix do Carbonio barra ou deixa passar.

O content-filter é um belo script feito em Perl e que já foi copiado durante os passos da instalação.

Hora de alterar o master.cf.in adicionando as linhas abaixo no final do arquivo. Siga os passos:

1 – Edite o arquivo /opt/zextras/common/conf/master.cf.in

2 – Adicione as seguintes linhas no fim do arquivo, cuidando da identação:

policy-spfbl unix - n n - - spawn
   user=nobody argv=/usr/bin/perl /opt/spfbl/spfblpostfix.pl

3 – Edite o arquivo /opt/spfbl/spfblpostfix.pl e altere a opção PeerHost para ficar assim:

PeerHost => '127.0.0.1'

4 – Altere o arquivo /opt/zextras/conf/zmconfigd/smtpd_recipient_restrictions.cf adicionando a linha abaixo imediatamente abaixo da linha que tem reject_unknown_reverse_client_hostname:

vi /opt/zextras/conf/zmconfigd/smtpd_recipient_restrictions.cf

Adicione
check_policy_service unix:private/policy-spfbl

Ficará como na imagem abaixo

5 – Como usuário zextras, reinicie os serviços específicos do Carbonio:

su - zextras -c "zmconfigdctl restart ; zmmtactl stop ; zmmtactl start"

Conclusão da Instalação do SPFBL

O SPFBL é um poderoso anti-spam baseado em reputação. Simples de instalar e administrar.

Recomendo fortemente ler a documentação para poder fazer bloqueios e liberações gerais via o cliente cli.

Comece executando spfbl sem nenhum argumento e olhe atentamente as opções que a ajuda imprime na tela.

KyaFilter

O KyaFilter faz a integração dos botões “Spam” e “Não Spam” do webmail do Carbonio, 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.

Entendendo 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 –> Postfix

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 – Crie 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

Carbonio Spam Account:
* Essa conta será criada pelo instalador

Carbonio 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 checar apenas os cabeçalhos das mensagens grandes no 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 Carbonio vai enviar as mensagens quando se usam os botões de Spam e Não Spam no webmail do Carbonio.

Integrando com o Carbonio

Esse passo exige um pouco mais de cuidado:

1 – Edite /opt/zextras/common/conf/master.cf.in

2 – 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

3 – 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

Reiniciando os serviços

Com o KyaFilter instalado e o Carbonio 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 Carbonio, assim:

su - zextras -c "zmmtactl restart"

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 Carbonio e SPFBL usando o KyaFilter está completa.

Recomendações Importantes

1 – Ajuste o cron do “store” do SPFBL para suas necessidades. Importante ter em mente que tudo que não for “salvo” via store será perdido.

2 – Sempre que possível execute o KyaFilter dentro de uma “janela” do screen. Não sabemos exatamente porque, mas em alguns cenários o KyaFilter falha so se manter em execução permamente. Executá-lo dentro de um screen estabiliza esse comportamento.

3 – Dedique um pouco de tempo ao cli do SPFBL. Abaixo seguem os principais comandos:

spfbl superwhite add "@dominioparaliberar.com"
spfbl superblock add "@dominioparabloquear.com"
spfbl superblock show all | grep dominio
spbfbl check enderecoIP_do_emissor email_do_emissor helo_do_emissor

O último comando acima é muito útil para diagnosticar o motivo de um bloquei e também para saber qual sintaxe usar para o caso de precisar liberá-lo manualmente.

Grupos e participação

É sempre importante ter um grupo de apoio para trocar experiências. Abaixo seguem os grupos do Telegram mais importantes:

Grupo sobre SPFBL – SPFBL Admin @spfbl_admin

Grupo sobre KyaFilter – KyaFilter Admins @kyafilter

Grupo sobre Carbonio – Carbonio Brasil @CarbonioBrasil

Published: 25/02/2025 | Updated: 11/03/2025