postfix filtra as mensagens recebidas com base em 'mail from' e 'rcpt to'

3

Eu quero rejeitar e-mails para meu servidor postfix com base em mais de um critério, especificamente eu quero bloquear e-mails de endereços de e-mail russos (ou que contêm caracteres cirílicos, mas suspeito que sejam mais difíceis) direcionados a dois destinatários específicos (mas não se endereçado a outros).

Eu sinto que isso deve ser direto, especialmente porque os endereços 'mail from' e 'rcpt to' são fornecidos no início da negociação do smtp. Mas não consigo encontrar uma maneira de fazer isso com o postfix e não tenho certeza se preciso de algum pacote complementar (milter?).

    
por gogoud 22.09.2015 / 08:52

3 respostas

4

Adicione uma classe de restrição . Por exemplo:

/etc/postfix/main.cf:
smtpd_recipient_restrictions =
    check_recipient_access hash:/etc/postfix/recipient_access

smtpd_restriction_classes = no_russians
no_russians = check_sender_access pcre:/etc/postfix/no_russians


/etc/postfix/recipient_access:
[email protected]     no_russians
[email protected]     no_russians

/etc/postfix/no_russians:
/\.ru$/ REJECT
    
por 27.09.2015 / 23:44
2

Basicamente copiar / colar de link e Para nos adaptarmos, aqui está um script Perl simples para implementar no_ru.pl como um simples script check_policy_service . Consulte o link para saber como identificá-lo.

Untested, YMMV, etc. Você provavelmente precisará use e talvez inicializar algumas facilidades como syslog - tente isso primeiro na linha de comando.

# Unbuffer standard output.
#
select((select(STDOUT), $| = 1)[0]);

#
# Receive a bunch of attributes, evaluate the policy, send the result.
#
%attr = ();
$ru_sender = $ru_rcpt = 0;
while (<STDIN>) {
  if (/^\s*sender=.*\.ru\n/i) {
     $ru_sender = 1;
  } elsif (/^\s*recipient=.*\.ru$/i) {
     $ru_rcpt = 1;
  } elsif ($_ eq "\n") {
    if ($verbose) {
      syslog $syslog_priority, "ru_sender %i, ru_rcpt %i", $ru_sender, $ru_rcpt;
    }
    $action = ($ru_sender && $ru_rcpt) ? "reject" : "dunno";
    syslog $syslog_priority, "Action: %s", $action if $verbose;
    print STDOUT "action=$action\n\n";
    %attr = ();
  } else {
    chop;
    syslog $syslog_priority, "warning: ignoring garbage: %.100s", $_;
  }
}
    
por 28.09.2015 / 07:09
1

Veja as diretivas smtpd_recipient_restrictions e smtpd_sender_restrictions . Usando esses você pode configurar mapas de hash contendo os filtros que você deseja.

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access

/etc/postfix/sender_access:
.ru                       REJECT
[email protected]        REJECT

Veja também link e link

    
por 22.09.2015 / 09:19

Tags