[MASOCH-L] Blacklists manuais - MTA

Leandro Carlos Rodrigues leandro at allchemistry.com.br
Thu Jul 23 08:37:49 -03 2015


Em 23/07/2015 08:19, Davi Peres escreveu:
> Ah sim eu havia notado a uns dias atras alguem comentando que estava com um
> projeto e que faria consulta no registro.br algo assim e ja tinha visto
> essa pagina do github mas como integro isso aí com o postfix ??!!?! não
> entendi como usar. A principio parece ser um script manual onde eu faço
> somente uma checagem. Se for para eu checar manualmente, continuo
> executando o meu shell script kkkkkkkkkk
>
> Me explica melhor?

Beleza Davi. Vamos lá.

Este projeto é referente a um serviço que precisa estar rodando em um 
servidor qualquer. As consultas são feitas pelos terminais através dos 
scripts, que apontam à estes servidores.

No caso eu já tenho um servidor rodando este serviço SPFBL lá na AWS. 
Quando eu quero fazer uma consulta, eu aponto para o IP deste servidor 
lá na AWS. O serviço lá faz o cache das consultas e guarda todas as 
reclamações de SPAM também.

Então na verdade quando você olha para o script, na verdade está olhando 
para uma forma de consultar este servidor externo. O script faz nada de 
mais, quem faz é o serviço. Sacou?

A integração no postfix é simples. Basta substituir a parte onde ele faz 
a consulta ao SPF convencional, que no caso é o comando "spfquery", pelo 
script que eu forneço. A saída não é igual, mas o código de saída do 
script é idêntico ao "spfquery", apenas com um código adicional que 
representa o LISTED.

Eu tenho aqui um exemplo de um provedor que está me ajudando a testar o 
serviço:

    Pelo que entendi, preciso criar uma policy no postfix:

           /et/etc/postfix/main.cf

           smtpd_recipient_restrictions =
               blablabla,
               check_policy_service unix:private/meu-spf
               blablabla,

           /etc/postfix/master.cf

           meu-spf unix - n n - - spawn
              user=nobody argv=/usr/lib/postfix/checa-spf.sh

           /usr/lib/postfix/checa-spf.sh
           !/bin/bash

           blablabla pega os parametros IP (client_address),
               EMAIL (sender) e HELO (helo_name)

           saida=/usr/lib/postfix/spfblquery-1.sh $ip $email $helo
           retorno=$?

           blablabla trata retorno faz action=PREPEND ou REJECT

           Eh isso ai vou voce implementou de outra maneira ? 

Com certeza você deve utilizar esta variável "retorno" para determinar 
se o postfix rejeita ou aceita a mensagem. Ai você acrescenta uma regra 
a mais que, se der código de LISTED, deve rejeitar a mensagem.

Dá uma olhada neste script anexo e veja os códigos de saída e tente 
entender o que acontece lá pois está tudo documentado.

Só que você não vai conseguir utilizar ele com o IP que está lá pois 
este IP é da instância AWS que mencionei e o firewall deve ser liberado 
para consulta. Ai você me passa os blocos IPv4 dos terminais que você 
pretende fazer a consulta que eu libero lá na AWS ok?

-------------- next part --------------
#!/bin/bash
#
# Este é um script que retorna o resultado SPFBL através de uma implementação em servidor externo.
#
# Atenção! Para utilizar este serviço, solicite a liberação das consultas 
# no servidor 54.94.137.168 através do endereço leandro at allchemistry.com.br 
# ou altere o IP 54.94.137.168 deste script para seu servidor SPFBL próprio.
#
# A saída deste programa deve ser incorporada ao cabeçalho Received-SPFBL da mensagem de e-mail que gerou a consulta.
#
# Exemplo:
#
#    Received-SPFBL: PASS urNq9eFn65wKwDFGNsqCNYmywnlWmmilhZw5jdtvOr5jYk6mgkiWgQC1w696wT3ylP3r8qZnhOjwntTt5mCAuw==
#
# A informação que precede o qualificador é o ticket da consulta SPFBL.
# Com o ticket da consulta, é possível realizar uma reclamação ao serviço SPFBL, onde esta reclamação vai contabilizar a reclamação nos contadores do responsável pelo envio da mensagem.
# O ticket da consulta só é gerado nas saídas cujos qualificadores sejam: PASS, SOFTFAIL, NEUTRAL e NONE.
#
# Parâmetros de entrada:
#
#    1. IP: o IPv4 ou IPv6 do host de origem.
#    2. email: o email do remetente.
#    3. HELO: o HELO passado pelo host de origem.
#
# Saídas com qualificadores e as ações:
#
#    PASS <ticket>: permitir o recebimento da mensagem.
#    FAIL: rejeitar o recebimento da mensagem e informar à origem o descumprimento do SPF.
#    SOFTFAIL <ticket>: permitir o recebimento da mensagem mas marcar como suspeita.
#    NEUTRAL <ticket>: permitir o recebimento da mensagem.
#    NONE <ticket>: permitir o recebimento da mensagem.
#    LISTED: rejeitar o recebimento da mensagem e informar à origem a listagem em blacklist por sete dias.
#
# Códigos de saída:
#
#    0: não especificado.
#    1: qualificador NEUTRAL.
#    2: qualificador PASS.
#    3: qualificador FAIL.
#    4: qualificador SOFTFAIL.
#    5: qualificador NONE.
#    6: erro temporário.
#    7: erro permanente.
#    8: listado em lista negra.
#    9: timeout de conexão.
#

ip=$1
email=$2
helo=$3

qualifier=$(echo "$ip $email $helo" | nc -w 3 54.94.137.168 9877)

if [[ $qualifier == "" ]]; then

        qualifier="TIMEOUT"
        
fi

echo "$qualifier"

if [[ $qualifier == "TIMEOUT" ]]; then

        exit 9
        
elif [[ $qualifier == "LISTED" ]]; then

	exit 8
	
elif [[ $qualifier == "ERROR: HOST NOT FOUND" ]]; then

	exit 6
	
elif [[ $qualifier == "ERROR: "* ]]; then

	exit 7
	
elif [[ $qualifier == "NONE "* ]]; then

	exit 5
	
elif [[ $qualifier == "PASS "* ]]; then

	exit 2
	
elif [[ $qualifier == "FAIL" ]]; then

	exit 3
	
elif [[ $qualifier == "SOFTFAIL "* ]]; then

	exit 4
	
elif [[ $qualifier == "NEUTRAL "* ]]; then

	exit 1
	
else

	exit 0
	
fi


More information about the masoch-l mailing list