Postfix - 하나를 제외한 모든 서버의 연결 시간 초과 문제 해결

Postfix - 하나를 제외한 모든 서버의 연결 시간 초과 문제 해결

저는 RedHat에서 실행되는 postfix 서버를 물려받았습니다. 문서화되지 않은 빌드이지만 비즈니스 운영에 매우 중요합니다. (우리 모두 이것을 좋아하지 않습니까?)

메일 배달이 지연되고 백로그되는 문제가 발생했습니다. 이 문제는 몇 주 전에 처음 보고되었지만 무한정 이전으로 거슬러 올라갈 수 있습니다.

내 *nix 경험은 녹슬었지만 서버에 백로그가 발생할 때 내 조직의 업스트림 SMTP 릴레이에 대한 연결 시간 초과를 보고한다는 것을 확인할 수 있을 만큼 시스템을 둘러볼 수 있었습니다.

예시 오류:

*3D27412A016
4187 4월 19일 화요일 17:04:26
[이메일 보호됨]

(배송 일시 중단: UpstreamRelayA4.doi.net[10.xx.xx.206]:25에 연결: 연결 시간 초과)

[이메일 보호됨]*

그러나 업스트림 릴레이 소유자는 이 SMTP 서버의 로그에 일치하는 오류가 없다고 보고합니다. 우리 조직에는 4개의 릴레이 서버가 포함된 단일 MX 레코드가 있습니다. 4개 모두 포트 25의 텔넷을 통해 내 SMTP 서버에서 연결할 수 있지만 4개 중 3개는 postfix 로그에서 시간 초과되었습니다.

postfix가 시간 초과라고 생각하는 이유를 추적하는 방법에 대한 팁이 있습니까?

22/4/20 추가 - postconf -n 출력

    [USERNAME@mailer ~]$ postconf -n

alias_database = hash:/etc/aliases

alias_maps = hash:/etc/aliases

broken_sasl_auth_clients = yes

command_directory = /usr/sbin

config_directory = /etc/postfix

daemon_directory = /usr/libexec/postfix

debug_peer_level = 2

debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb
 
$daemon_directory/$process_name $process_id & sleep 5

disable_vrfy_command = yes

html_directory = no

inet_interfaces = all

inet_protocols = ipv4

local_recipient_maps =

mail_owner = postfix

mail_spool_directory = /var/mail

mailbox_size_limit = 0

mailq_path = /usr/bin/mailq.postfix

manpage_directory = /usr/share/man

maximal_queue_lifetime = 1d

message_size_limit = 30720000

mydestination = $myhostname, localhost.$mydomain, localhost

myhostname = mailer.domain.org.com

mynetworks = 

127.0.0.0/8,165.83.0.0/16,10.0.0.0/8,64.241.25.0/24,172.16.0.0/12

myorigin = $mydomain

newaliases_path = /usr/bin/newaliases.postfix

queue_directory = /var/spool/postfix

readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

relayhost = relayLOCATION.parentorg.com

sample_directory = /usr/share/doc/postfix-2.10.1/samples

sendmail_path = /usr/sbin/sendmail.postfix

setgid_group = postdrop

smtp_tls_note_starttls_offer = yes

smtp_use_tls = yes

smtpd_delay_reject = yes

smtpd_helo_required = yes

smtpd_helo_restrictions = 
permit_mynetworks,reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,permit

smtpd_policy_service_max_idle = 5s

smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

smtpd_sasl_auth_enable = yes

smtpd_sasl_authenticated_header = yes

smtpd_sasl_local_domain =

smtpd_sasl_security_options = noanonymous

smtpd_sender_restrictions = permit_mynetworks,reject_non_fqdn_sender,permit

smtpd_tls_CAfile = /etc/postfix/ssl/mailer_DOMAIN_ORG_COM.pem

smtpd_tls_auth_only = no

smtpd_tls_cert_file = /etc/postfix/ssl/mailer_DOMAIN_ORG_COM.crt

smtpd_tls_key_file = /etc/postfix/ssl/mailer_DOMAIN_ORG_COM.key

smtpd_tls_loglevel = 1

smtpd_tls_security_level = may

smtpd_use_tls = yes

tls_random_source = dev:/dev/urandom

transport_maps = hash:/etc/postfix/transport

[USERNAME@mailer ~]$

22/4/20 추가 - postconf -M 출력

[USERNAME@mailer ~]$ postconf -M
smtp       inet  n       -       n       -       -       smtpd
pickup     fifo  n       -       n       60      1       pickup
cleanup    unix  n       -       n       -       0       cleanup
qmgr       fifo  n       -       n       300     1       qmgr
tlsmgr     unix  -       -       n       1000?   1       tlsmgr
rewrite    unix  -       -       n       -       -       trivial-rewrite
bounce     unix  -       -       n       -       0       bounce
defer      unix  -       -       n       -       0       bounce
trace      unix  -       -       n       -       0       bounce
verify     unix  -       -       n       -       1       verify
flush      unix  n       -       n       1000?   0       flush
proxymap   unix  -       -       n       -       -       proxymap
smtp       unix  -       -       n       -       -       smtp
relay      unix  -       -       n       -       -       smtp -o fallback_relay=
showq      unix  n       -       n       -       -       showq
error      unix  -       -       n       -       -       error
discard    unix  -       -       n       -       -       discard
local      unix  -       n       n       -       -       local
virtual    unix  -       n       n       -       -       virtual
lmtp       unix  -       -       n       -       -       lmtp
anvil      unix  -       -       n       -       1       anvil
scache     unix  -       -       n       -       1       scache
maildrop   unix  -       n       n       -       -       pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus  unix  -       n       n       -       -       pipe flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
cyrus      unix  -       n       n       -       -       pipe user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
uucp       unix  -       n       n       -       -       pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail     unix  -       n       n       -       -       pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp      unix  -       n       n       -       -       pipe flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
retry      unix  -       -       n       -       -       error
proxywrite unix  -       -       n       -       1       proxymap
[USERNAME@mailer ~]$

22/4/20 추가 - 메일 릴레이 간 장치

우리는 릴레이 사이의 네트워크나 보안 장비에 대한 가시성을 갖고 있지 않습니다. Traceroute는 3개의 홉만 표시하며, 모두 네트워크 레이아웃의 IP 주소를 기반으로 하는 표준 라우터일 가능성이 높습니다.

22/4/20 추가됨 - Postfix 버전

Postfix는 버전 2.10.1인 것으로 보이며, 이 버전은 2013년경에 설치될 것입니다. Postfix 릴리스 페이지에 따라

22/4/22 추가 - openssl 연결 테스트

[USERNAME@mailer ~]$ openssl s_client -connect UPSTREAM_RELAY.ORG.net:25 -starttls smtp -crlf
CONNECTED(00000003)
depth=1 DC = net, DC = ORG, CN = CA_Server
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
 0 s:/C=US/ST=STATE/L=CITY/O=PARENT_ORG/OU=PARENT_ORG/CN=UPSTREAM_RELAY.ORG.net
   i:/DC=net/DC=ORG/CN=CA_Server
 1 s:/DC=net/DC=ORG/CN=CA_Server
   i:/CN=ORGRootCA2
---
Server certificate
-----BEGIN CERTIFICATE-----

[Cert contents removed]

-----END CERTIFICATE-----
subject=/C=US/ST=STATEA/L=CITY/O=PARENT_ORG/OU=PARENT_ORG/CN=UPSTREAM_RELAY.ORG.net
issuer=/DC=net/DC=ORG/CN=CA_Server
---
No client certificate CA names sent
Peer signing digest: SHA1
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 5841 bytes and written 538 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-SHA384
    Session-ID: [REMOVED]
    Session-ID-ctx:
    Master-Key: [REMOVED]
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1650649689
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
250 XSHADOWREQUEST
 (Functional console after this)

22/4/22 추가됨 - 작동하지 않는 서버에 대한 Maillog grep

[USERNAME@mailer ~]$  sudo mailq | grep  UPSTREAM_RELAY_103.ORG.net

(delivery temporarily suspended: conversation with UPSTREAM_RELAY_103.ORG.net[10.x.x.125] timed out while sending end of data -- message may be sent more than once)

(conversation with UPSTREAM_RELAY_103.ORG.net[10.x.x.125] timed out while sending end of data -- message may be sent more than once)

[중복 항목을 제거했습니다. 해당 서버의 모든 항목은 정확히 두 메시지와 동일합니다.]

최종 편집일: 2022년 4월 27일

지난주 문제 해결 과정에서 /etc/resolv.conf에 더 이상 존재하지 않는 네임서버가 있다는 사실을 발견했습니다. 이를 제거하고 postfix를 다시 시작한 후에는 더 이상 로그에서 시간 초과가 발생하지 않는 것으로 나타나고 메일 흐름이 빠르게 진행됩니다.

댓글에서 @anx가 언급했듯이 이는 연결 시간 초과와 관련하여 그다지 의미가 없지만 문제가 해결되고 postfix가 다시 시작되자마자 아웃바운드 전송 속도가 급격히 증가했으며 아무런 문제도 발생하지 않았습니다. 하루에 20,000개가 넘는 아웃바운드 테스트 이메일을 추가했음에도 불구하고 지연 문제가 발생했습니다(일반 메일 양에 비해 약 30% 증가).

답변1

우리가 알아낸 바로는 이 문제는 /etc/resolv.conf 에 잘못된 DNS 항목이 있어서 발생했습니다. 잘못된 항목이 제거되면 로그에 문제가 발생하지 않게 되었고 아웃바운드 지연을 최소화하면서 메일 흐름이 제대로 돌아왔습니다.

관련 정보