Como instalar o MIMEDefang no Debian?

0

Estou tentando instalar o MIMEDefang no meu Debian Stretch, mas ele não funciona e não consigo encontrar guias que funcionem.

Depois de apt install mimedefang , adicionei o seguinte a /etc/postfix/main.cf :

smtpd_milters = unix:/var/spool/MIMEDefang/mimedefang.sock
milter_default_action = accept

Postfix recarregado, e service mimedefang status diz que está ativo e executando .

Até tentamos copiar /etc/mimedefang-filter para /etc/mail/mimedefang-filter e torná-lo executável ...

Mas ainda assim recebo isso em /var/log/mail.log :

postfix/smtpd[29832]: warning: connect to Milter service unix:/var/spool/MIMEDefang/mimedefang.sock: No such file or directory

O arquivo /var/spool/MIMEDefang/mimedefang.sock existe no entanto.

sendmail já está instalado antes.

Como faço para instalar e ativar essa coisa?

    
por TheStoryCoder 25.10.2018 / 03:08

1 resposta

0

Com a gentil ajuda de Benoît Panizzon na lista de discussão MIMEDefang, descobri que preciso usar inet em vez de unix como o soquete de escuta, para que ele esteja escutando na porta TCP no local ou remoto especificado hospedeiro. Então o procedimento de configuração para o MIMEDefang no Debian / Ubuntu é:

  1. Instalar o MIMEDefang: apt install mimedefang
  2. Em /etc/default/mimedefang set (use outra porta se você quiser): SOCKET=inet:33333
  3. Adicionar a /etc/postfic/main.cf : %código%
  4. Copie smtpd_milters = inet:localhost:33333 milter_default_action = accept para /etc/mimedefang-filter e modifique-o de acordo com suas necessidades (não é necessário torná-lo executável).
  5. Recarregue os serviços Postfix e MIMEDefang: /etc/mail/mimedefang-filter

O MIMEDefang deve ser recarregado toda vez que você alterar sudo systemctl reload postfix mimedefang .

A propósito, esta apresentação oferece uma boa compreensão do MIMEDefang: link

O script Perl real que está sendo executado está localizado em mimedefang-filter , que então inclui /usr/bin/mimedefang.pl .

Eu também queria poder escrever minha lógica de filtragem em PHP em vez de Perl, então eu criei a seguinte solução. Adicione isto ao final de, por exemplo. a função mimedefang-filter em filter_begin :

%passToPhp = ("Sender", $Sender, "Recipients", \@Recipients, "Subject", $Subject, "RelayAddr", $RelayAddr, "RelayHostname", $RelayHostname, "Helo", $Helo, "QueueID", $QueueID, "MessageID", $MessageID);

my $cmd = "/path/to/your/email-filter.php";
$cmd .= " " . encode_base64(encode_json(\%passToPhp), '');
my $phpOutput = '$cmd';

md_syslog('info', "PHP filter output: $phpOutput");  #causes entry in /var/log/mail.log
if ($phpOutput eq "bounce") {
    action_bounce("We dont want this particular message.");
} elsif ($phpOutput eq "discard") {
    action_discard();
}

Em seguida, use o seguinte código em mimedefang-filter para você começar:

#!/usr/bin/php
<?php
// runs as user "defang". This file must have execute permissions.

// Get variables from mimedefang that we passed along, headers, raw message, and extra information from mimedefang
$arguments = ($argv[1] ? base64_decode($argv[1]) : null);
if ($arguments) $arguments = json_decode($arguments, true);
$headers = file_get_contents('HEADERS');
$raw_message = file_get_contents('INPUTMSG');
$commands = file_get_contents('COMMANDS');

// Get all the MIME parts into an array
$mimeparts = [];
chdir('./Work');
foreach (glob('*') as $mimepart_file) {
    if (is_dir($file)) continue;
    $mimeparts[$mimepart_file] = file_get_contents($mimepart_file);
}

// Do all your logic here...

if ($someLogic == 'spam') {
    echo 'discard';
    // echo 'bounce';  //use this line if you want to have a bounce message sent back to sender (but you probably don't want that for spam)
}

Monitore email-filter.php para garantir que tudo funcione como deveria.

    
por 06.11.2018 / 17:15