SPF
O Sceo tem suporte nativo a SPF, basta usá-lo. As respostas dos testes SPF se dão em números. Seguem os possíveis números:
Valor | Descrição
0 - Sem SPF
1 - Passou no teste. (Pass)
2 - O servidor não pertence a rede que mantém o domínio (Neutral)
3 - Este servidor não deveria estar mandando esse email (SoftFail)
4 - Email DEVE ser recusado (Fail)
5 - Erro temporário. (TempError)
6 - Erro permanente durante a checagem do SPF (PermError)
Edite o arquivo regras_remetente:
# pico /usr/local/sceo/regras_remetente
Acrescente as seguintes linhas:
!Ip? "127.0.0.1" Spf_test!
Spf_resp? "4" Reply! "550 Remetente recusado. SPF Fail" Deny!
Obs.: A exclamação (!) antes de uma condição inverte o resultado. Na regra acima (!Ip? "127....) ela será verdadeira se o IP conectado NÃO for o 127.0.0.1.
Caso queria bloquear também servidores com SoftFail:
Spf_resp? "3" Reply! "550 Remetente recusado. SPF SoftFail" Deny!
Se quiser adicionar a resposta do SPF no header do email, acrescente também:
Hadd! "X-Spf: %y"
%y -> Retorna o valor de resposta do teste SPF. Você pode usar esta variável nos outros arquivos de regras.
Salve e saia do arquivo.
SPF configurado!
Greylist
Alguns dizem que a Greylist vem caindo em desuso por atrasar mensagens válidas e por seu resultado final não ser tão eficiente. Eu discordo, a Greylist corta muito lixo eletrônico e se você souber quando usa-la, ela não atrasa mensagem de servidores bem configurados.
Para quem não sabe o que é a Greylist, aqui vai uma "rápida" explicação:
Existe um tipo de mensagem de erro no protocolo SMTP que indica um erro temporário, são os códigos que começam com 4 (Ex: 450, 451 etc).
Se um servidor válido e bem configurado tentar entregar um email ao destinatário interno lucas@meudominio.com.br e obter a seguinte resposta de nosso MTA: "450 Deu pau aqui e eu estou pegando fogo e NUNCA mais voce podera entregar este email a mim", ele não dará a mínima para a mensagem em si pois o que importa é o código na frente, 450, que diz que ele deve tentar mais tarde e é exatamente isso que ele vai fazer, mas muitos programas de spam não tentam ou se tentam, as vezes eles mudam o endereço de remetente. É ai que a Greylist entra.
A Greylist verifica em um banco de dados se IP+remetente está liberado lá, se não estiver, a Greylist diz ao Sceo para responder com erro temporário (450 Tente mais tarde), se for um spammer é muito provável que ele não tente e se for um servidor válido e bem configurado ele vai tentar entregar o email novamente, então, nesta segunda tentativa o email será aceito e o IP+remetente será liberado para não sofrer mais este atraso.
Grande parte das reclamações da Greylist é o fato dela atrasar o recebimento dos emails, mas nós a usaremos só se o servidor remoto não passar pelo teste SPF, ou seja, todos os servidores bem configurados NÃO sofrerão o atraso da Greylist (Nao atrasando mensagens do Gmail, Hotmail etc...) e outro diferencial é que não usaremos o endereço IP e sim o hostname que torna a Greylist muito mais eficiente.
Vamos a instalação:
# mkdir /usr/local/sceo/uteis
# cd /usr/local/sceo/uteis
# cp /home/progs/sceo_greylist.tar.bz2 .
# tar xjf sceo_greylist.tar.bz2
Criando o banco de dados:
# mysql
mysql>
create database sceo_greylist;
mysql>
grant all privileges on sceo_greylist.* to sceo@localhost identified by "minhasenha";
Lembre-se de colocar a mesma senha que usou para criação do banco de dados "mail".
mysql>
flush privileges;
mysql>
quit
# mysql sceo_greylist < sceo_greylist.sql
Agora você precisa colocar a senha do banco de dados no código fonte do sceo_greylist.
# pico sceo_greylist.c
Procure os defines "USUARIO" e "SENHA", altere seus valores colocando o usuário e senha do banco de dados sceo_greylist que criamos anteriormente.
#define USUARIO "sceo"
#define SENHA "minhasenha"
Salve e saia do arquivo para compilarmos.
# gcc sceo_greylist.c -o sceo_greylist -lmysqlclient
Se der erro na compilação é porque você não deve ter o Mysql-devel instalado aí em seu sistema operacional. Vamos fazer o Sceo acionar o sceo_greylist caso o MTA conectado não tenha passado pelo teste SPF.
Edite o arquivo /usr/local/sceo/regras_destinatario:
# pico /usr/local/sceo/regras_destinatario
Acrescente a seguinte linha de regra:
!Ip? "127.0.0.1" !Spf_resp? "1" !Auth? Internal_rcpt? Exec! "/usr/local/sceo/uteis/sceo_greylist -i %s -f %f -t %r" Exec_resp? "1" Reply! "451 Tente mais tarde" Deny!
Obs.: As linhas passadas acima devem ficar em uma única linha dentro do arquivo.
Esta linha roda o programa sceo_greylist caso a resposta do SPF seja diferente de 1 (Pass), se a conexão NÃO for autenticada e se o destinatário for um email interno.
Caso queria processar Greylist para os MTAs que passarem pelo SPF também, basta tirar a segunda condição: !Spf_resp? "1".
Salve e saia do regras_destinatario. Não é preciso reiniciar o Sceo. Você só precisa reinicia-lo quando alterar o arquivo sceo.conf.
Agende o seu CRON para rodar a seguinte linha uma vez ao dia:
sceo_greylist -clean
Linha do CRON:
00 0 * * * /usr/local/sceo/uteis/sceo_greylist -clean
Isto fará a exclusão de registros mortos mantendo o banco de dados limpo e rápido.
Greylist instalada e configurada!