Am descoperit că configurația mea sendmail nu încearcă întotdeauna a
gazdă MX secundară dacă MX-ul principal nu răspunde. Uneori se întâmplă,
de cele mai multe ori nu.
Cred că întrebările mele sunt: 1) cum decide sendmail când să renunțe la un anumit MX și să încerce următorul? Și
2) cum să depanați ceea ce (nu) se întâmplă?
Pentru a lucra la asta, am configurat numele mytest.freefriends.org (propriul meu domeniu)
cu un MX primar 10.x neroutable și un secundar bun:
mytest IN MX 1 nonesuch.freefriends.org.
mytest IN MX 10 goodmx.freefriends.org.
nonesuch IN A 10.10.10.10
În cazurile reale, MX-ul primar este o gazdă obișnuită, accesibilă dar
nu răspund intenționat pe portul 25. Se pare că unii administratori de sistem fac
asta pentru a opri niște spammeri care nu încearcă niciodată al doilea MX. (Eu ezit
publică numele domeniilor care fac acest lucru, dar ar putea furniza
privat.) Obțin aceleași rezultate cu configurația mea de testare ca și cu cea reală
cazuri -- uneori sendmail-ul meu renunță la primarul rău și corect
cade la secundar, dar de cele mai multe ori nu.
Folosesc binarul sendmail 8.14.7 care este distribuit cu CentOS 7,
pe x86_64. Am personalizat sendmail.cf în diferite moduri, dar nimic din asta
pare la distanță relevant, cu excepția eventualelor valori de timeout, pe care le voi face
anexați mai jos.
Trimit e-mailul meu de testare la, de ex., [email protected]
. Intrarea /var/log/maillog arată că nu a fost încercat în mod repetat până când se termină cele 5 zile și revine:
Mar 15 18:26:45 tug sendmail[26132]: 22FHPiET026128: to=<[email protected]>, delay=00:01:00, xdelay=00:01:00, mailer=esmtp, pri=293911 , releu=nonesuch.freefriends.org. [10.10.10.10], dsn=4.0.0, stat=Amânat: Conexiunea a expirat cu nonesuch.freefriends.org.
Încerc să discern ce se întâmplă cu adevărat cu:
rm /tmp/f; sendmail -D/tmp/f -d0-99.99 [email protected]
dar ieșirea voluminoasă de depanare /tmp/f arată doar MX-ul rău
fiind incercat iar si iar, desi se gaseste goodmx. Iată un mic fragment care arată încercarea finală pentru o anumită rulare în coadă:
hostsignature(mytest.freefriends.org.) = nonesuch.freefriends.org.:goodmx.freefriends.org.
...
dropenvelope 0x55db2c276ba0: id=<null>, flags=4405046<INQUEUE,NO_BODY_RETN,DELE\
TE_BCC,GLOBALERRS,METOO,IS_MIME,SPLIT>
sendq=0x55db2e364ab0=<[email protected]>:
mailer 4 (esmtp), gazdă `mytest.freefriends.org.'
utilizator `[email protected]', ruser `<null>'
stare=QUEUEUP, următorul=0x0, alias 0x0, uid 0, gid 0
flags=80000182<QPRIMARY,QPINGONFAILURE,QPINGONDELAY,QRCPTOK>
proprietar=(niciunul), home="(niciunul)", nume complet="(niciunul)"
orcpt="(niciunul)", statmta=nonesuch.freefriends.org., status=4.4.1
finalrcpt="RFC822; [email protected]"
rstatus="(niciunul)"
statdate=Tue Mar 15 18:28:59 2022
====termină: stat 75 e_id=NOQUEUE e_flags=4405046<INQUEUE,NO_BODY_RETN,DELETE_BCC,GLOBALERRS,METOO,IS_MIME,SPLIT>
Nu am reușit să prind un buștean cu a
mesaj de succes, când revine la secundar. Vreo modalitate de a te conecta la asta?
Presupun că aș putea rezolva asta cu intrări mailertable (sau poate bestmx), dar nu știu toate gazdele care ar avea nevoie de el. În plus, trecerea la mx secundar pare a fi o operațiune destul de fundamentală (în zilele noastre) care nu funcționează.
Am căutat online, în cartea liliecilor, în sursele sendmail (de ex.,
domain.c), etc., dar nu am găsit încă mânerul. Dacă cineva ar dori
e-mail-mi despre asta în loc de/precum să răspund aici, adresa mea este
karl (la) prieteni liberi (punct) org.
Scuze pentru mesajul lung. Mulțumesc anticipat pentru orice indicii.
# timeout-uri (multe dintre acestea)
#O Timeout.initial=5m
O Timeout.connect=30s
O Timeout.aconnect=30s
O Timeout.iconnect=30s
O Timeout.helo=4m
O Timeout.mail=5m
O Timeout.rcpt=10m
O Timeout.datainit=2m
O Timeout.datablock=6m
O Timeout.datafinal=30m
O Timeout.rset=1m
O Timeout.quit=1m
O Timeout.misc=1m
O Timeout.command=5m
O Timeout.ident=0s
#O Timeout.fileopen=60s
#O Timeout.control=2m
O Timeout.queuereturn=5d
#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d
#O Timeout.queuereturn.dsn=5d
O Timeout.queuewarn=2d
#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h
#O Timeout.queuewarn.dsn=4h
#O Timeout.hoststatus=30m
#O Timeout.resolver.retrans=5s
#O Timeout.resolver.retrans.first=5s
#O Timeout.resolver.retrans.normal=5s
#O Timeout.resolver.retry=4
#O Timeout.resolver.retry.first=4
#O Timeout.resolver.retry.normal=4
O Timeout.lhlo=1m
#O Timeout.auth=10m
O Timeout.starttls=2m