[MASOCH-L] Blacklists manuais - MTA

Leandro Carlos Rodrigues leandro at allchemistry.com.br
Tue Jul 28 07:05:54 BRT 2015


Em 27/07/2015 21:15, casfre at gmail.com escreveu:
>>> Agora a  questão é a seguinte: quando o script termina o processamento,
>>> >>ele deve mandar a mesma lista, adicionando os novos atributos ou alterando
>>> >>os valores para STDOUT e o Postfix pegar? É isso mesmo?
>>> >>
>> >
>> >Achei aqui como passar de volta a resposta para o Postfix:
>> >
>> >    http://www.postfix.org/access.5.html
>> >
>> >Com isso o problema foi resolvido. Valeu pelas informações!
> Que bom que funcionou. Já achou a informação que precisava, mas me lembro
> de ter visto no código em Perl vários "return" com ações que o Postfix
> acataria (se bem entendi).:-)

É tipo isso mesmo Cássio. Só que invés de return, teria que jogar isso 
no STDOUT. Olha em anexo o script que eu escrevi e funcionou 
perfeitamente para meus colegas.

Porém um destes colegas está tendo problemas para passar o helo_name, 
que sempre vem vazio. Achei estranho pois eu não me lembro de ter 
recebido mensagens de e-mail sem HELO. Eu estou vendo junto com ele o 
que pode ser isso. Eu tenho uma teoria que a regra na qual ele faz a 
consulta através deste script vem antes do HELO do SMTP dele. Posso 
estar falando uma baita besteira, porque não conheço o Postfix, então se 
tiver uma teoria melhor do porque isso acontece me avisa ai beleza?

>
> Obrigado.
>
> Cássio.

-------------- next part --------------
#!/usr/bin/perl -w
#
# Este é um script que processa o SPFBL dentro do Postfix.
#
# 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.
#
# Se a mensagem não estiver listada, o cabeçalho Received-SPFBL
# será adicionado com o resultado do SPFBL.
#
# Para implementar este script no Postfix, 
# adicione as seguintes linhas no arquivo master.cf:
#
#    policy-spfbl  unix  -       n       n       -       -       spawn
#        user=nobody argv=/usr/bin/spfblquery.pl
#

use IO::Socket::INET;

# Captura os atributos do Postfix passados pelo STDIN.
my %attributes;
foreach $line ( <STDIN> ) {
    chomp( $line );
    my ($key, $value) = split(/=/, $line, 2);
    $attributes{$key} = $value;
}

# Associa os parâmetros SPFBL através dos atributos do Postfix.
my $client_address = $attributes{"client_address"};
my $sender = $attributes{"sender"};
my $helo_name = $attributes{"helo_name"};

# auto-flush on socket
$| = 1;

# Create a connecting socket.
my $socket = new IO::Socket::INET (
    PeerHost => '54.94.137.168',
    PeerPort => '9877',
    Proto => 'tcp',
    Timeout => 3
);
die "Can't connect to SPFBL server!\n" unless $socket;

# Data to send to a server.
my $query = "$client_address $sender $helo_name\n";
my $size = $socket->send($query);

# Notify server that request has been sent.
shutdown($socket, 1);
 
# Receive a response of up to 4096 characters from server.
my $result = "";
$socket->recv($result, 4096);
$socket->close();
$result =~ s/\s+$//;

# Saída de acordo com documentação do Postfix.
if ($result =~ /^LISTED/) {
    print "action=REJECT [RBL] You are blocked in this server for seven days.\n"
} elsif ($result =~ /^ERROR: HOST NOT FOUND/) {
    print "action=DEFER [SPF] A transient error occurred when checking SPF record from $sender, preventing a result from being reached. Try again later.\n"
} elsif ($result =~ /^ERROR: QUERY/) {
    print "action=DEFER [SPF] A transient error occurred when checking SPF record from $sender, preventing a result from being reached. Try again later.\n"
} elsif ($result =~ /^ERROR: /) {
    print "action=REJECT [SPF] One or more SPF records from $sender could not be interpreted. Please see http://www.openspf.org/SPF_Record_Syntax for details.\n"
} elsif ($result =~ /^NONE /) {
    print "action=PREPEND Received-SPFBL: $result\n"
} elsif ($result =~ /^PASS /) {
    print "action=PREPEND Received-SPFBL: $result\n"
} elsif ($result =~ /^FAIL/) {
    print "action=REJECT [SPF] $sender is not allowed to send mail from $client_address. Please see http://www.openspf.org/why.html?sender=$sender&ip=$client_address for details.\n"
} elsif ($result =~ /^SOFTFAIL /) {
    print "action=PREPEND Received-SPFBL: $result\n"
} elsif ($result =~ /^NEUTRAL /) {
    print "action=PREPEND Received-SPFBL: $result\n"
} else {
    print "action=DEFER [SPF] A transient error occurred when checking SPF record from $sender, preventing a result from being reached. Try again later.\n"
}


More information about the masoch-l mailing list