AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1077995
Accepted
user3450564
user3450564
Asked: 2021-09-19 22:48:50 +0800 CST2021-09-19 22:48:50 +0800 CST 2021-09-19 22:48:50 +0800 CST

Arquivo Postfix preservando Bcc com X-Envelope-To - limpeza confidencial X-Envelope-To com Lmtp

  • 772

Colocando como Bcc o usuário [email protected], não queremos que as pessoas recebam essa lista Bcc, além do "usuário" [email protected].

Meta

  1. Queremos arquivar todos os e-mails que passam pelo postfix, enviados e recebidos. A configuração usa:
  • postfix,
  • autenticação dovecot com usuários Pam (puxando do LDAP),
  • e entrega nas caixas de correio via LMTP da Dovecot .
  1. Queremos incluir os destinatários Cco no arquivo de mensagens.

  2. Não queremos que as pessoas recebam essa lista Cco, além do "usuário" [email protected].

Tentativas

  1. Usando sempre_bcc = [email protected] Funciona. Mas os recibos Bcc (que por direitos estão no envelope como RCPT TO e não em um cabeçalho) se perdem.

  2. Usando: (de acordo com quais opções existem para arquivar e-mail Postfix e preservar qualquer informação BCC no cabeçalho )

main.cf
smtpd_recipient_restrictions =
  check_recipient_access pcre:/etc/postfix/prepend.pcre

enquanto a expressão pcre é:

prepend.pcre
/(.+)/          PREPEND X-Envelope-To: $1

que funciona como um encanto : minha mensagem armazenada tem os cabeçalhos Para:; CC; X-Envelope-Para. Se algum dia precisarmos investigar, podemos saber quem recebeu a mensagem mesmo em Cco. (Nota: o X-Envelope-To inclui as pessoas To e Cc, pas bem como os destinatários de domínios externos).

  1. Para eliminar o X-Envelope-To: Para enviar:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks.pcre

Com o conteúdo:

smtp_header_checks.pcre
/^X-Envelope-To:/               IGNORE

Tudo certo até lá.

Problema

Para eliminar o X-Envelope-To para e-mails que não saem do servidor. Eu fiz:

lmtp_header_checks = pcre:/etc/postfix/lmtp_header_checks.pcre

lmtp_header_checks.pcre
/^X-Envelope-To:/               IGNORE

Mas isso não é seletivo, mesmo [email protected] perde o cabeçalho que foi "salvo" da lista Bcc.

Não consigo encontrar uma forma de fazer essa seleção de cabeçalho, pois ela avalia apenas a própria linha e não pode usar o destinatário para fazer uma condição (mesmo usando o "if" do pcre). ( http://www.postfix.org/pcre_table.5.html )

Existe alguma variável que pode ser usada? Uma ideia foi: incluir "[email protected]" no cabeçalho X-Envelope-To anexado, no lmtp_header_checks.pcre, incluir algo como: [email protected] diferente de $LMTP_DELIVERY_RECIPIENT Delivered-To ou X-Delivered -Para permanecer um cabeçalho separado que o pcre não pode avaliar como uma variável.

Caso contrário, existe uma maneira de fazer com que o lmtp acione algum milter? E um filtro lmtp_milter simples que posso usar para isso?

Estou perseguindo há dias em todos os documentos possíveis, obrigado antecipadamente

postfix archive
  • 2 2 respostas
  • 183 Views

2 respostas

  • Voted
  1. Best Answer
    user3450564
    2021-09-21T11:20:43+08:002021-09-21T11:20:43+08:00

    Ai sim ! Muito obrigado.

    A linguagem sieve não permitirá iteração em vários X-Envelope-Tocabeçalhos. Então é preciso passá-lo para um programa externo.

    Aqui está o que eu inventei:

    require "fileinto";
    require "imap4flags";
    require ["editheader", "envelope"];
    require "vnd.dovecot.filter";
    if header :contains "X-Spam-Flag" "YES"
    {
       fileinto "Junk";
       stop;
    }
    if envelope :is "to" "[email protected]" {
       filter "EnvelopeToBcc.sh";
    } else {
       deleteheader "X-Envelope-To";
    }
    
    #!/bin/bash
    # Store mail in a variable
    # input stream
    mail=`cat /dev/stdin`
    # Extract headers
    envelope=$(echo "$mail" | formail -x X-Envelope-To | tr -d '\015')
    tos=$(echo "$mail" | formail -x To  | tr -d '\015')
    copies=$(echo "$mail" | formail -x Cc  | tr -d '\015')
    
    # Loop excluding the To: fields and concatenate in variable
    bcc=""
    for i in $envelope; do
            if [[ ${tos} != *"${i}"* && ${copies} != *"${i}"* ]];then
                    bcc="${bcc} ${i},"
            fi
    done
    # Eliminate trailing comma
    bcc=$(echo $bcc | sed s/,$//)
    # Add Bcc header to mail 
    echo "${mail}" | formail -a "Bcc: $bcc"
    
    

    Se você abrir o arquivo com qualquer MUA, poderá ver o bcc reconstruído. NB: script um pouco mais longo, mas evita a duplicação das pessoas Para na lista Cco.

    • 1
  2. anx
    2021-09-20T05:54:37+08:002021-09-20T05:54:37+08:00

    Use a linguagem Sieve.

    Como seu e-mail é entregue via LMTP para o Dovecot, você terá todos os recursos de endereçamento e edição de cabeçalho lá, com um monte de recursos lógicos mais complexos do que aqueles oferecidos por simples verificações de cabeçalho Postfix.

    Se você ainda não estiver usando o Pigeonhole sieve, talvez seja necessário habilitá-lo como um plug-in Dovecot, habilitar as extensões necessárias em seu script e configurar um script adequado.

    # step1 enable sieve (append to $mail_plugins to *add*)
    protocol lmtp {
      mail_plugins = $mail_plugins sieve
    }
    # step2 enable sieve extensions, as required (prefix with + to *add*)
    plugin {
        sieve_extensions = +editheader
    }
    # step3 configure the path a of a script to be executed
    

    Em seguida, em um script executado globalmente, ou especificamente para usuários que não devem ver o endereço do envelope, exclua o cabeçalho - a menos que entregue na caixa de correio de arquivo:

    require ["editheader", "envelope"];
    if not envelope :is "to" "[email protected]" {
        deleteheader "X-Envelope-To";
    }
    
    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve