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 / 867377
Accepted
Mikhail T.
Mikhail T.
Asked: 2017-08-08 12:45:49 +0800 CST2017-08-08 12:45:49 +0800 CST 2017-08-08 12:45:49 +0800 CST

O sendmail pode encaminhar e-mails imediatamente em vez de enfileirar?

  • 772

Alguns dos e-mails que passam pelo meu servidor são encaminhados para contas externas.

Infelizmente, meu servidor SMTP upstream é muito exigente com spam - e rejeita algumas das mensagens legítimas como tal. Quando isso acontece com o correio encaminhado, recebo as devoluções (como o postmaster) - não os originadores.

Entendo que isso ocorre porque o sendmail enfileira as mensagens localmente, desconecta-se da retransmissão e só então prossegue para encaminhá-las. Se o encaminhamento adicional for interrompido por qualquer motivo - como porque o próximo relé identifica erroneamente a mensagem como spam - meu sendmail é deixado para reter os pedaços.

As coisas podem ser configuradas para que o encaminhamento comece imediatamente (assim que o destino do encaminhamento for determinado)? O status - sucesso ou falha - pode então ser comunicado diretamente ao relé anterior ainda na linha ...

Se o sendmail não puder fazer isso, algum outro MTA pode? Obrigado!

postfix
  • 2 2 respostas
  • 1107 Views

2 respostas

  • Voted
  1. Best Answer
    Esa Jokinen
    2017-08-08T13:03:43+08:002017-08-08T13:03:43+08:00

    Não, não é possível, pois não é implementado com nenhum software SMTP amplamente difundido; você teria que programar seu próprio servidor SMTP que suportasse esse tipo de comportamento, o que estaria fora do escopo do Serverfault . Nesta resposta explico porque todos os MTAs implementaram o protocolo SMTP de forma muito semelhante, usando queue, e como essa é a melhor maneira de cumprir todos os requisitos do protocolo.

    Um agente de transporte de correio MTA sempre nega uma mensagem ou a aceita e a enfileira, com base em suas próprias configurações. Em seguida, é retransmitido ou entregue da fila.

    Isso é porque

    • pode haver erros permanentes e temporários. Se o MTA não conseguir conectar o nexthop imediato, ele tentará novamente mais tarde e retornará apenas se o atraso atingir o limite definido. Também não pode esperar que outro MTA responda antes de fechar a conexão, pois pode ter outras mensagens para entregar primeiro.

    • pode haver vários destinatários. Enquanto um cliente pode simplesmente listar todos os destinatários de uma vez com RCPT TOcomandos, a mensagem pode finalmente ser entregue a vários outros servidores, dos quais alguns podem estar disponíveis agora e outros mais tarde. Além disso, o MTA não pode abrir todas essas conexões de uma vez durante a conexão inicial e aguardar suas respostas. Não há nenhuma razão prática para ter um fluxo de trabalho totalmente diferente para mensagens com um único destinatário.

    • deve sempre ficar claro qual MTA atualmente tem a responsabilidade de entregar a mensagem. (Isso foi explicado por exemplos na resposta do MadHatter.)

    É assim que o SMTP foi projetado. Em vez de requisitos sintáticos para os comandos de conexão, isso leva a arquiteturas muito semelhantes ; Sendmail , Postfix e até mesmo o MS Exchange possuem componentes separados para enviar e receber e-mails.

    1. O componente do servidor SMTP recebe o correio e o adiciona à fila.
    2. Então, um cliente SMTP separado tenta enviá-la para outros MTAs, ou se um destinatário for local, a mensagem pode ser salva em um arquivo ou passada para um agente de entrega de correio MDA, por exemplo, Procmail.

    O requisito ainda vem da especificação SMTP; RFC 5321 2.1 na estrutura básica do modelo SMTP:

    Espera-se que implementações de SMTP totalmente capazes, incluindo os relés usados ​​por esses menos capazes e seus destinos, ofereçam suporte a todas as funções de enfileiramento, repetição e endereço alternativo discutidas nesta especificação. Em muitas situações e configurações, os clientes menos capazes discutidos acima DEVEM estar usando o protocolo de envio de mensagens ( RFC 4409 ) em vez de SMTP.

    E um pouco mais:

    Em outras palavras, a transferência de mensagens pode ocorrer em uma única conexão entre o remetente SMTP original e o destinatário SMTP final, ou pode ocorrer em uma série de saltos por meio de sistemas intermediários. Em ambos os casos, uma vez que o servidor tenha emitido uma resposta de sucesso no final dos dados de correio, ocorre uma transferência formal de responsabilidade pela mensagem: o protocolo exige que um servidor DEVE aceitar a responsabilidade por entregar a mensagem ou relatar adequadamente a falha ao fazê-lo (consulte as Seções 6.1, 6.2 e 7.8).

    • 4
  2. MadHatter
    2017-08-09T00:28:27+08:002017-08-09T00:28:27+08:00

    Acho a resposta da Esa excelente, mas vou discordar de algumas. Acho que o que você quer é possível, mas é uma má ideia, e não vai te ajudar. Como ele diz, RFC5321 s2.1 observa que

    uma vez que o servidor tenha emitido uma resposta de sucesso no final dos dados de correio, ocorre uma transferência formal de responsabilidade pela mensagem: o protocolo exige que um servidor DEVE aceitar a responsabilidade por entregar a mensagem ou relatar adequadamente a falha em fazê-lo

    No caso em que o servidor B recebe uma mensagem do servidor A e a entrega ao servidor C, não vejo que isso impeça B de esperar para confirmar o recebimento de A até que tenha confirmação de recebimento de C - que é o que você está pedindo. Mas o problema é que entre dois servidores 250 OKé atômico (ou o receptor aceitou, e então é responsável pela entrega, ou não, e então o remetente continua responsável), enquanto entre três não é.

    Considere o caso em que o cliente A é desconectado involuntariamente depois de ter enviado o e-mail, mas antes de receber o 250 OK, enquanto B o está entregando para C. C confirma o recebimento de B com seu 250 OK, então B sabe que C o tem. Mas A não, então A ainda deve ser responsável e deve continuar a entregar para B. Se houver algum problema de comunicação sistemático entre A e B (por exemplo, um daqueles firewalls adoráveis ​​que pensam que é seu trabalho mexer com o conteúdo de conversas SMTP), isso pode resultar na entrega de um número muito grande de cópias da mesma mensagem.

    Além disso, o sendmail já faz o que você acha que não faz: no caso de falha na entrega para C, ele tentará passar a responsabilidade de volta para A. Isso geralmente só falha onde A é malicioso, e também está no envelope-From (a quem essa notificação deve ser feita) ou não executa nenhum servidor de correio. Nesses casos, a correspondência deve ser entregue ao postmaster de B, pois B é responsável pela entrega (tendo dito 250 OKa A, mas não a recebeu de C), não pode entregar a C (está tentado e obteve uma falha permanente 5xx) e não pode devolver para A (porque A tornou isso impossível), então não tem mais ninguém para dar. Aqui está um exemplo que recebi esta manhã:

    Date: Tue, 8 Aug 2017 02:53:55 +0100
    From: Mail Delivery Subsystem <[email protected]>
    To: [email protected]
    Subject: Returned mail: see transcript for details
    Parts/Attachments:
       1   Shown     17 lines  Text
       2   Shown    407 bytes  Message, "Delivery Status"
       3   Shown     15 KB     Message
       3.1           10 KB     Application
    ----------------------------------------
    
    The original message was received at Tue, 8 Aug 2017 02:53:53 +0100
    from localhost [IPv6:::1]
    
       ----- The following addresses had permanent fatal errors -----
    <[email protected]>
        (reason: 550-5.7.1 Unauthenticated email from aol.com is not accepted due to domain's)
    
       ----- Transcript of session follows -----
    ... while talking to gmail-smtp-in.l.google.com.:
    >>> DATA
    <<< 550-5.7.1 Unauthenticated email from aol.com is not accepted due to domain's
    <<< 550-5.7.1 DMARC policy. Please contact the administrator of aol.com domain if
    <<< 550-5.7.1 this was a legitimate mail. Please visit
    <<< 550-5.7.1  https://support.google.com/mail/answer/2451690 to learn about the
    <<< 550 5.7.1 DMARC initiative. 53si155585wrc.260 - gsmtp
    554 5.0.0 Service unavailable
    
        [ Part 2: "Delivery Status" ]
    
    Reporting-MTA: dns; lory.teaparty.net
    Received-From-MTA: DNS; localhost
    Arrival-Date: Tue, 8 Aug 2017 02:53:53 +0100
    
    Final-Recipient: RFC822; [email protected]
    Action: failed
    Status: 5.7.1
    Remote-MTA: DNS; gmail-smtp-in.l.google.com
    Diagnostic-Code: SMTP; 550-5.7.1 Unauthenticated email from aol.com is not accepted due to domain's
    Last-Attempt-Date: Tue, 8 Aug 2017 02:53:55 +0100
    
        [ Part 3: "Included Message" ]
    
    Date: Tue, 08 Aug 2017 01:53:46 -0000
    From: [email protected]
    To: [email protected]
    [...]
    

    Observe como o e-mail original pretende vir de um endereço aol.com. Como, então, não estou tentando entregar o relatório de falha de volta para eles? Porque eles mentiram em sua transação SMTP original:

    Aug  8 02:53:51 lory sendmail[9457]: v781rmjA009457: from=<[email protected]>, size=14095, class=0, nrcpts=1, msgid=<[email protected]>, proto=SMTP, daemon=MTA-v6, relay=[37.114.157.178]
    

    É minha culpa que eu ainda não configurei o SPF para esse meu domínio específico ( stphilipschurch.org.uk), mas como não o fiz, nada me impede de aceitar essa mentira - e então fico preso com uma mensagem não entregue que não pode ser retornada ao remetente, pois o remetente é malicioso e desinteressado (estar conectado através de um ISP no Azerbaijão).

    tl; dr : o sendmail já faz o que você está pedindo, quando pode. O que você quer fazer não ajudará quando não puder, e criará problemas. Não faça isso.

    • 3

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