Vanliga orsaker till e-postloopar och hur de åtgärdas
Så här kan SMTP-e-postloopar i Exchange Online, hybridmiljöer och framförliggande e-postgatewayer systematiskt identifieras och åtgärdas med hjälp av NDR, headers, Message Trace, mottagarobjekt och anslutningar.
En e-postloop uppstår när minst två transportsystem upprepade gånger överlämnar samma meddelande till varandra. Inget av systemen identifierar sig som det slutliga målet, men båda känner till ett förmodat lämpligt nästa hopp. Loopen avslutas först när en server konstaterar att det tillåtna antalet transporthopp har överskridits och skapar en NDR.
I Exchange är två meddelanden särskilt informativa:
554 5.4.6 Hop count exceeded - possible mail loopskapas vanligtvis av den lokala Exchange-servern.554 5.4.14 Hop count exceeded - possible mail loop ATTR34skapas av Exchange Online.
Hoppgränsen är inte orsaken, utan skyddet mot en oändlig upprepning. Att höja den åtgärdar därför ingenting. Det som måste hittas är punkten där meddelandet, i strid med målarkitekturen, returneras till ett system som redan har passerats.
Identifiera loopmönstret i headern
NDR:en och de fullständiga ursprungliga meddelandehuvudena bör sparas innan några ändringar görs. Received-rader läses nedifrån och upp: den nedersta raden är det tidigast dokumenterade hoppet, den översta är det senaste.
En loop visar sig vanligtvis som en återkommande sekvens:
Internet
→ Exchange Online Protection
→ Mailgateway
→ Exchange Online Protection
→ Mailgateway
→ Exchange Online Protection
→ ...
Alla Microsoft-värdnamn som förekommer flera gånger innebär inte redan en loop. Exchange Online behandlar meddelanden internt via flera transportroller. Det som är iögonfallande är den upprepade återkomsten mellan samma administrativa gränser, exempelvis mellan Exchange Online och en lokal gateway. Tidsstämplar, sändande IP-adress, mottagande värd och Message-ID hjälper till att tydligt identifiera varvet.
För den första analysen besvaras följande frågor:
- Vilket system skapade NDR:en?
- Vilka två eller tre hopp upprepas?
- Vilket system skulle ha levererat meddelandet slutgiltigt?
- På grundval av vilket domän-, mottagar-, connector- eller regelbeslut vidarebefordrades det?
- Vilken ändring har senast påverkat e-postflödet?
Diagnostik i Exchange Online
Med Get-MessageTraceV2 kan bearbetningen under de senaste 90 dagarna undersökas; högst tio dagar är tillåtna per fråga. Ett snävt tidsfönster och den specifika mottagaradressen ger de mest användbara resultaten:
$start = (Get-Date).AddHours(-2)
$end = Get-Date
$recipient = "user01@contoso.com"
$trace = Get-MessageTraceV2 `
-RecipientAddress $recipient `
-StartDate $start `
-EndDate $end `
-ResultSize 5000
$trace |
Select-Object Received,SenderAddress,RecipientAddress,Subject,
Status,FromIP,ToIP,MessageTraceId,MessageId |
Sort-Object Received
Detaljerna för en träff visar enskilda transporthändelser:
$trace | ForEach-Object {
Get-MessageTraceDetailV2 `
-MessageTraceId $_.MessageTraceId `
-RecipientAddress $_.RecipientAddress
} | Format-Table Date,Event,Action,Detail -AutoSize
Därefter granskas domän, mottagare och connectors tillsammans:
Get-AcceptedDomain |
Format-Table Name,DomainName,DomainType,MatchSubDomains -AutoSize
Get-EXORecipient -Identity $recipient |
Format-List DisplayName,RecipientTypeDetails,PrimarySmtpAddress,
ExternalEmailAddress,EmailAddresses
Get-OutboundConnector -IncludeTestModeConnectors |
Format-List Name,Enabled,ConnectorType,RecipientDomains,SmartHosts,
UseMXRecord,RouteAllMessagesViaOnPremises,TlsSettings
Get-InboundConnector |
Format-List Name,Enabled,ConnectorType,SenderDomains,SenderIPAddresses,
TlsSenderCertificateName,RequireTls,RestrictDomainsToIPAddresses,
RestrictDomainsToCertificate
Det avgörande är inte om ett enskilt objekt ser rimligt ut. Domäntyp, faktisk mottagartyp och tillämplig connector måste tillsammans beskriva samma målplats.
Diagnostik i lokal Exchange
I en hybridmiljö kontrolleras samma mottagare även lokalt. Frågorna skiljer mellan en verklig lokal postlåda, en RemoteMailbox och en MailUser:
Get-Recipient -Identity $recipient |
Format-List DisplayName,RecipientType,RecipientTypeDetails,
PrimarySmtpAddress,EmailAddresses
Get-Mailbox -Identity $recipient -ErrorAction SilentlyContinue |
Format-List RecipientTypeDetails,ServerName,Database,PrimarySmtpAddress
Get-RemoteMailbox -Identity $recipient -ErrorAction SilentlyContinue |
Format-List RecipientTypeDetails,PrimarySmtpAddress,RemoteRoutingAddress
Get-MailUser -Identity $recipient -ErrorAction SilentlyContinue |
Format-List RecipientTypeDetails,PrimarySmtpAddress,ExternalEmailAddress
För transportvägen krävs Send- och Receive-connectors samt trackingloggar:
Get-SendConnector |
Format-List Name,Enabled,AddressSpaces,DNSRoutingEnabled,SmartHosts,
SourceTransportServers,CloudServicesMailEnabled,TlsDomain
Get-ReceiveConnector |
Format-List Identity,Enabled,Bindings,RemoteIPRanges,PermissionGroups
$servers = Get-ExchangeServer |
Where-Object { $_.IsMailboxServer -or $_.IsHubTransportServer }
$servers |
Get-MessageTrackingLog `
-Start $start `
-End $end `
-Recipients $recipient `
-ResultSize Unlimited |
Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,
ConnectorId,Sender,Recipients,MessageId,NetworkMessageId |
Sort-Object Timestamp
Ett SEND till Exchange Online, följt av ett nytt RECEIVE för samma meddelande från Exchange Online, synliggör returen. Med MessageId och NetworkMessageId undviker du att förväxla olika testmeddelanden med varandra.
De vanligaste orsakerna i korthet
| Mönster | Typisk orsak | Åtgärd |
|---|---|---|
| Okända mottagare pendlar mellan två system | Accepted Domain är inställd på InternalRelay, men båda sidor vidarebefordrar okända mottagare | Definiera ett tydligt ansvar; använd Authoritative för fullständig EXO-leverans eller fastställ ett enda avslutande hopp för split domain |
| EXO skickar till lokal Exchange, som genast skickar tillbaka till EXO | Hybrid-connector eller Centralized Mail Transport stämmer inte längre överens med postlådeplatsen | Kontrollera HCW-konfigurationen och RouteAllMessagesViaOnPremises; inaktivera föråldrad central routing eller korrigera lokal mottagarupplösning |
| Meddelandet pendlar mellan EXO och en gateway för säkerhet, signatur eller kryptering | Returnerade meddelanden uppfyller utgående regel igen | Använd en header som gatewayen har angett eller en dokumenterad loopprevention-mekanism som undantag; autentisera in- och utgående connectors entydigt |
| Endast en mottagare påverkas | Föråldrat eller felaktigt targetAddress, fel RemoteMailbox-typ eller motstridiga proxyadresser | Fastställ Source of Authority, korrigera mottagarobjektet där och synkronisera |
| Endast vidarebefordrade meddelanden loopar | Transportregel, postlådevidarebefordran eller Inbox-regel adresserar den ursprungliga vägen på nytt | Inaktivera regeln, korrigera målet och definiera ett robust undantag |
| Endast en underdomän eller applikation påverkas | Överordnad domän täcker inte underdomänen korrekt i den förväntade connectorvägen | Konfigurera underdomänen uttryckligen som Accepted Domain och i lämplig Send Connector |
| Alla meddelanden loopar efter en gateway- eller DNS-ändring | Smart Host eller MX pekar mot ingången på det sändande systemet | Korrigera nästa hopp och kontrollera DNS-, NAT- och lastbalanseringsmål separat |
Orsak 1: Fel typ för Accepted Domain
En authoritative domain innebär: Alla giltiga mottagare för denna domän är kända i Exchange-organisationen; okända mottagare avvisas. En Internal Relay-domän innebär: En del av mottagarna finns i ett annat system och måste vidarebefordras via en Send- eller Outbound-connector.
Den problematiska konfigurationen uppstår när Exchange Online skickar okända mottagare till ett lokalt system och detta system inte heller behandlar samma domän slutgiltigt, utan skickar tillbaka den till Exchange Online via MX eller Smart Host.
Get-AcceptedDomain -Identity contoso.com |
Format-List DomainName,DomainType,MatchSubDomains
Om alla mottagare finns i Exchange Online efter en slutförd migrering är Authoritative vanligtvis önskat slutläge:
# Kör först efter fullständig kontroll av mottagare och routing.
Set-AcceptedDomain -Identity contoso.com -DomainType Authoritative
För en verklig split domain kan InternalRelay vara korrekt. Då krävs dock en tydlig connector till systemet som känner till de återstående mottagarna. Detta mål får inte skicka tillbaka okända adresser till utgångspunkten.
Orsak 2: Överlappande hybrid-connectors och Centralized Mail Transport
Centralized Mail Transport dirigerar medvetet utgående Exchange Online-meddelanden via den lokala Exchange-miljön. Det är meningsfullt för vissa compliancekrav, men skapar ytterligare transportvägar. Om alternativet förblir aktivt efter en migrering, trots att det lokala systemet skickar meddelanden tillbaka till Exchange Online via sin egen MX, kan en cirkel uppstå.
Get-OutboundConnector -IncludeTestModeConnectors |
Format-Table Name,Enabled,ConnectorType,RouteAllMessagesViaOnPremises,
RecipientDomains,SmartHosts,UseMXRecord -AutoSize
Flera connectors med överlappande omfattning bör också kontrolleras. Microsoft rekommenderar en dedikerad lokal connector för hybrid-e-postflöde; en reparation med Hybrid Configuration Wizard är ofta säkrare än enskilda, isolerade ändringar.
Om Centralized Mail Transport bevisligen inte längre behövs kan inställningen inaktiveras specifikt:
# Endast efter kontroll av compliance- och gatewaykrav.
Set-OutboundConnector `
-Identity "Outbound to On-Premises" `
-RouteAllMessagesViaOnPremises:$false
Orsak 3: En gateway behandlar sina returer på nytt
I ett in-and-out-scenario skickar Exchange Online ett meddelande till en tilläggstjänst för signering, kryptering eller arkivering. Tjänsten skickar sedan tillbaka det till Exchange Online. Den utgående regeln måste känna igen returen, annars skickas den åter till tjänsten.
Kontrollen börjar med alla regler som väljer connectors, omdirigerar mottagare eller utvärderar headers:
Get-TransportRule |
Sort-Object Priority |
Format-List Name,State,Mode,Priority,FromScope,SentToScope,
RedirectMessageTo,RouteMessageOutboundConnector,
SetHeaderName,SetHeaderValue,ExceptIfHeaderContainsMessageHeader,
ExceptIfHeaderContainsWords
Det specifika undantaget måste följa gatewaytillverkarens dokumentation. Vanligt är en header som anges av tjänsten och som inte kan förfalskas på ett tillförlitligt sätt från internet. Dessutom bör inbound-connectors identifiera tjänsten med certifikat eller fast avsändar-IP. Ett generellt undantag för alla meddelanden som verkar vara ”interna” är för brett.
Orsak 4: Mottagarobjektet och den faktiska postlådan finns inte på samma plats
Ett objekt kan visas i Exchange Online som MailUser, trots att den aktiva postlådan finns lokalt. I en synkroniserad hybridmiljö är detta inte automatiskt ett dubblettobjekt. Inte heller en ExternalEmailAddress, som motsvarar den primära SMTP-adressen, bevisar i sig en felkonfiguration.
Avgörande är kombinationen av alla frågor:
Get-Mailboxlokalt ger ett resultat: Den aktiva postlådan finns lokalt.Get-RemoteMailboxlokalt ger ett resultat: Det hanterade målet finns i Exchange Online.Get-EXOMailboxger ett resultat: Det finns en verklig postlåda i molnet.Get-EXORecipientger endast en MailUser: Objektet är ett routingmål, inte en molnpostlåda.
Problematiska är föråldrade objekt efter en migrering, felaktiga fjärrroutingdomäner eller manuellt angivna targetAddress-värden vars domän leder tillbaka via samma transportväg. Ändringar görs vid Source of Authority: i synkroniserade miljöer alltså med Exchange-hanteringsverktyg lokalt och inte genom direkt redigering av enskilda attribut i Exchange Online.
Orsak 5: Vidarebefordringar och transportregler bildar en cirkel
En regel kan omdirigera från adress A till B, medan B skickar tillbaka till A via en andra regel, en postlådevidarebefordran eller ett externt system. Sådana loopar påverkar ofta bara enskilda mottagare eller meddelandetyper.
Get-TransportRule |
Sort-Object Priority |
Select-Object Name,State,Mode,Priority,RedirectMessageTo,
BlindCopyTo,AddToRecipients,RouteMessageOutboundConnector
Get-Mailbox -ResultSize Unlimited |
Select-Object DisplayName,PrimarySmtpAddress,
ForwardingAddress,ForwardingSmtpAddress,DeliverToMailboxAndForward
Get-InboxRule -Mailbox user01@contoso.com |
Select-Object Name,Enabled,Priority,ForwardTo,RedirectTo,ForwardAsAttachmentTo
Åtgärden består inte bara i att tillfälligt stänga av en regel. Hela kedjan måste lösas upp, och regler för externa tjänster behöver ett undantag som säkert känner igen redan behandlade meddelanden.
Orsak 6: MX, Smart Host eller underdomän pekar tillbaka
En gateway kan behöva ett annat nästa hopp internt än externa avsändare. Om den helt enkelt använder den offentliga MX-posten för vidarebefordran kan denna i vissa fall peka tillbaka på gatewayen själv. Samma problem uppstår om en Smart Host via NAT eller lastbalansering leder tillbaka till sin egen listener.
Resolve-DnsName -Type MX contoso.com
Resolve-DnsName -Type MX app.contoso.com
Get-SendConnector |
Format-List Name,AddressSpaces,DNSRoutingEnabled,SmartHosts
Underdomäner förtjänar en egen kontroll. Microsoft dokumenterar fall där en applikationsunderdomän uttryckligen måste skapas som Internal Relay-domän och synkroniseras till Edge-systemen:
New-AcceptedDomain `
-Name "app.contoso.com" `
-DomainName app.contoso.com `
-DomainType InternalRelay
Start-EdgeSynchronization
Dessa kommandon är ingen universell lösning. De passar bara om app.contoso.com faktiskt levereras utanför Exchange-organisationen och Send Connector har ett entydigt nästa hopp.
Säkert tillvägagångssätt vid en aktiv loop
Under störningen bör först mångfaldigandet stoppas. Beroende på arkitekturen inaktiveras den utlösande transportregeln eller den specifika connectorn på ett kontrollerat sätt, eller så håller gatewayen tillbaka den berörda kön. Konfiguration och meddelandeexempel exporteras först.
Därefter följer ett test med exakt en avsändare, en mottagare och en tydligt igenkännbar ämnesrad. Meddelandet följs utan avbrott via headers, Message Trace och lokala trackingloggar. Först när det avslutas vid det avsedda målet öppnas e-postflödet stegvis igen.
Följande rekommenderas inte:
- höja hoppgränser
- ändra flera connectors samtidigt
- växla Accepted Domains på måfå mellan
AuthoritativeochInternalRelay - mata in en problematisk kö upprepade gånger utan kontroll
- korrigera synkroniserade Exchange-attribut direkt i AD eller Exchange Online
- stänga av TLS-, IP- eller certifikatkontroller som en förment snabb lösning
Slutkontroll
Efter korrigeringen bör dokumentationen innehålla exakt ett påstående för varje relevant domän: Vilket system känner till mottagaren, vilken connector är tillämplig och vilken värd är det slutliga nästa hoppet?
Den tekniska acceptansen omfattar minst:
- extern och intern testmeddelande
- okänd mottagare i samma domän
- mottagare på vardera sidan av en verklig split domain
- utgående meddelande med aktiverad gateway eller Centralized Mail Transport
- headers utan återkommande hoppsekvens
- Message Trace med
Deliveredrespektive förväntad överlämning - lokal tracking utan nytt
RECEIVEefter ettSENDtill samma mål - connectorvalidering för alla connectors som fortfarande behövs
En åtgärdad e-postloop är först avslutad när inte bara testmeddelandet kommer fram, utan även okända mottagare och alternativa e-postflödesvägar avslutas på definierat sätt. Det är just där de flesta återfallen sker.
Kommentarer
Kommentarerna hämtas från GitHub / Giscus.