ฉันได้สืบทอดเซิร์ฟเวอร์ postfix ที่ทำงานบน RedHat มันเป็นงานสร้างที่ไม่มีเอกสาร แต่มีความสำคัญต่อการดำเนินธุรกิจ (เราทุกคนไม่ชอบสิ่งเหล่านี้เหรอ?)
ได้พัฒนาปัญหาเกี่ยวกับการจัดส่งจดหมายล่าช้าและค้าง ปัญหาได้รับการรายงานครั้งแรกเมื่อไม่กี่สัปดาห์ก่อน แต่สามารถย้อนกลับไปได้ไม่จำกัดเวลา
ประสบการณ์ *nix ของฉันคือสนิม แต่ฉันสามารถสะกิดระบบมากพอที่จะระบุได้ว่าเมื่อเซิร์ฟเวอร์ประสบปัญหางานค้าง ระบบจะรายงานการหมดเวลาการเชื่อมต่อไปยังรีเลย์ SMTP อัพสตรีมที่องค์กรของฉัน
ตัวอย่างข้อผิดพลาด:
*3D27412A016
4187
อ. 19 เม.ย. 17:04:26 น
[email protected]
(หยุดส่งชั่วคราว: เชื่อมต่อกับ UpstreamRelayA4.doi.net[10.xx.xx.206]:25: หมดเวลาการเชื่อมต่อ)
[email protected]*
อย่างไรก็ตาม เจ้าของการถ่ายทอดอัปสตรีมรายงานว่าไม่มีข้อผิดพลาดที่ตรงกันในบันทึกจากเซิร์ฟเวอร์ SMTP นี้ สำหรับองค์กรของฉัน มีระเบียน MX เดียวที่มีเซิร์ฟเวอร์รีเลย์ 4 เครื่องรวมอยู่ด้วย สามารถเข้าถึงได้ทั้ง 4 รายการจากเซิร์ฟเวอร์ SMTP ของฉันผ่านทาง telnet บนพอร์ต 25 อย่างไรก็ตาม 3 ใน 4 รายการหมดเวลาในบันทึกของโปรแกรมแก้ไขภายหลัง
มีคำแนะนำเกี่ยวกับวิธีติดตามว่าทำไม postfix ถึงคิดว่าหมดเวลา
เพิ่ม 4/20/22 - เอาต์พุต postconf -n
[USERNAME@mailer ~]$ postconf -n
alias_database = แฮช:/etc/aliases
alias_maps = แฮช:/etc/aliases
Broken_sasl_auth_clients = ใช่
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 & สลีป 5
ปิดการใช้งาน_vrfy_command = ใช่
html_directory = ไม่
inet_interfaces = ทั้งหมด
inet_protocols = ipv4
local_recipient_maps =
mail_owner = โปรแกรมแก้ไขภายหลัง
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
ชื่อโฮสต์ของฉัน = mailer.domain.org.com
เครือข่ายของฉัน =
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 = $โดเมนของฉัน
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 = เลื่อนลง
smtp_tls_note_starttls_offer = ใช่
smtp_use_tls = ใช่
smtpd_delay_reject = ใช่
smtpd_helo_required = ใช่
smtpd_helo_restrictions =
permit_mynetworks,reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,อนุญาต
smtpd_policy_service_max_idle = 5 วินาที
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_auth_enable = ใช่
smtpd_sasl_authenticated_header = ใช่
smtpd_sasl_local_domain =
smtpd_sasl_security_options = ไม่ระบุตัวตน
smtpd_sender_restrictions = permit_mynetworks,reject_non_fqdn_sender,อนุญาต
smtpd_tls_CAfile = /etc/postfix/ssl/mailer_DOMAIN_ORG_COM.pem
smtpd_tls_auth_only = ไม่
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 = พฤษภาคม
smtpd_use_tls = ใช่
tls_random_source = dev:/dev/urandom
transport_maps = แฮช:/etc/postfix/transport
[USERNAME@mailer ~]$
เพิ่ม 4/20/22 - เอาต์พุต postconf -M
[USERNAME@mailer ~]$ postconf -M
smtp inet n - n - - smtpd
รถกระบะ fifo n - n 60 1 รถกระบะ
การล้างข้อมูลยูนิกซ์ n - n - 0 การล้างข้อมูล
qmgr fifo n - n 300 1 qmgr
tlsmgr ยูนิกซ์ - - n 1,000? 1 tlsmgr
เขียนซ้ำยูนิกซ์ - - n - - เขียนใหม่เล็กน้อย
เด้งยูนิกซ์ - - n - 0 เด้ง
เลื่อนยูนิกซ์ - - n - 0 เด้ง
ติดตามยูนิกซ์ - - n - 0 ตีกลับ
ตรวจสอบยูนิกซ์ - - n - 1 ตรวจสอบ
ล้างยูนิกซ์ n - n 1,000? 0 ล้าง
พร็อกซีแมปยูนิกซ์ - - n - - พร็อกซีแมป
smtp ยูนิกซ์ - - n - - smtp
รีเลย์ยูนิกซ์ - - n - - smtp -o fallback_relay=
showq ยูนิกซ์ n - n - - showq
ข้อผิดพลาดยูนิกซ์ - - n - - ข้อผิดพลาด
ทิ้งยูนิกซ์ - - n - - ทิ้ง
ยูนิกซ์ท้องถิ่น - n n - - ท้องถิ่น
ยูนิกซ์เสมือน - n n - - เสมือน
lmtp ยูนิกซ์ - - n - - lmtp
ทั่งยูนิกซ์ - - n - 1 ทั่ง
Scache ยูนิกซ์ - - n - 1 Scache
maildrop unix - n n - - ไปป์แฟล็ก=ผู้ใช้ DRhu=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix - n n - - ไปป์แฟล็ก=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
cyrus unix - n n - - ผู้ใช้ไพพ์=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - ไปป์แฟล็ก = Fqhu ผู้ใช้ = uucp argv = uux -r -n -z -a$sender - $nexthop!rmail (ผู้รับ $)
ifmail unix - n n - - ไปป์แฟล็ก=F ผู้ใช้=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop (ผู้รับ $)
bsmtp ยูนิกซ์ - n n - - ไปป์แฟล็ก=Fq ผู้ใช้=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
ลองใหม่ยูนิกซ์ - - n - - ข้อผิดพลาด
proxywrite unix - - n - 1 พร็อกซีแมป
[USERNAME@mailer ~]$
เพิ่ม 4/20/22 - อุปกรณ์ระหว่างเมลรีเลย์
เราไม่สามารถมองเห็นเครือข่ายหรืออุปกรณ์รักษาความปลอดภัยระหว่างรีเลย์ Traceroute ระบุเพียง 3 hops ซึ่งทั้งหมดน่าจะเป็นเราเตอร์มาตรฐานตามที่อยู่ IP ในรูปแบบเครือข่ายของเรา
เพิ่ม 4/20/22 - เวอร์ชัน Postfix
Postfix ดูเหมือนจะเป็นเวอร์ชัน 2.10.1 ซึ่งจะทำการติดตั้งประมาณปี 2013 ตามหน้า Postfix Releases
เพิ่ม 4/22/22 - การทดสอบการเชื่อมต่อ openssl
[USERNAME@mailer ~]$ openssl s_client -เชื่อมต่อ UPSTREAM_RELAY.ORG.net:25 -starttls smtp -crlf
เชื่อมต่อแล้ว(00000003)
ความลึก=1 DC = สุทธิ, DC = ORG, CN = CA_Server
ตรวจสอบข้อผิดพลาด: num=20: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น
---
ห่วงโซ่ใบรับรอง
0 วินาที:/C=US/ST=STATE/L=CITY/O=PARENT_ORG/OU=PARENT_ORG/CN=UPSTREAM_RELAY.ORG.net
ผม:/DC=net/DC=ORG/CN=CA_Server
1 วินาที:/DC=net/DC=ORG/CN=CA_Server
ผม:/CN=ORGRootCA2
---
ใบรับรองเซิร์ฟเวอร์
-----เริ่มต้นใบรับรอง-----
[ลบเนื้อหาใบรับรอง]
-----จบใบรับรอง-----
เรื่อง=/C=US/ST=STATEA/L=CITY/O=PARENT_ORG/OU=PARENT_ORG/CN=UPSTREAM_RELAY.ORG.net
ผู้ออก=/DC=net/DC=ORG/CN=CA_Server
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
สรุปการลงนามเพียร์: SHA1
คีย์อุณหภูมิเซิร์ฟเวอร์: ECDH, P-384, 384 บิต
---
SSL handshake อ่าน 5841 ไบต์และเขียน 538 ไบต์
---
ใหม่, TLSv1/SSLv3, การเข้ารหัสคือ ECDHE-RSA-AES256-SHA384
รหัสสาธารณะของเซิร์ฟเวอร์คือ 2048 บิต
รองรับการเจรจาต่อรองใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
เซสชัน SSL:
โปรโตคอล : TLSv1.2
รหัส : ECDHE-RSA-AES256-SHA384
รหัสเซสชัน: [ถูกลบ]
เซสชัน-ID-ctx:
มาสเตอร์คีย์: [ลบ]
Key-Arg : ไม่มี
Krb5 อาจารย์ใหญ่: ไม่มี
ตัวตน PSK: ไม่มี
คำใบ้ประจำตัว PSK: ไม่มี
เวลาเริ่มต้น: 1650649689
หมดเวลา : 300 (วินาที)
ตรวจสอบรหัสส่งคืน: 20 (ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น)
---
250 XSHADOWREQUEST
(คอนโซลการทำงานหลังจากนี้)
เพิ่ม 4/22/22 - Maillog grep สำหรับเซิร์ฟเวอร์ที่ไม่ทำงาน
[USERNAME@mailer ~]$ sudo mailq | grep UPSTREAM_RELAY_103.ORG.net
(ระงับการส่งชั่วคราว: การสนทนากับ UPSTREAM_RELAY_103.ORG.net[10.x.x.125] หมดเวลาขณะส่งข้อมูล -- ข้อความอาจถูกส่งมากกว่าหนึ่งครั้ง)
(การสนทนากับ UPSTREAM_RELAY_103.ORG.net[10.x.x.125] หมดเวลาขณะส่งข้อมูล -- ข้อความอาจถูกส่งมากกว่าหนึ่งครั้ง)
[ลบรายการที่ซ้ำกัน รายการทั้งหมดสำหรับเซิร์ฟเวอร์นั้นมีสองข้อความเหมือนกันทุกประการ]
แก้ไขครั้งสุดท้าย 4/27/2022
ในการแก้ไขปัญหาเมื่อสัปดาห์ที่แล้ว เราพบว่า /etc/resolv.conf มีเนมเซิร์ฟเวอร์ที่ไม่มีอยู่อีกต่อไป หลังจากลบสิ่งนี้และรีสตาร์ท postfix ดูเหมือนว่าเราจะไม่ได้รับการหมดเวลาในบันทึกอีกต่อไป และจดหมายจะไหลอย่างรวดเร็ว
ตามที่ @anx กล่าวถึงในความคิดเห็น สิ่งนี้ไม่สมเหตุสมผลเลยเมื่อเทียบกับการหมดเวลาการเชื่อมต่อ แต่ทันทีที่ได้รับการแก้ไขและรีสตาร์ท postfix การส่งขาออกของเรามีความเร็วเพิ่มขึ้นอย่างมาก และเรายังไม่มีเลย ปัญหาความล่าช้าตั้งแต่นั้นมา แม้ว่าจะเพิ่มอีเมลทดสอบขาออกมากกว่า 20,000 ฉบับต่อวัน (เพิ่มขึ้นประมาณ 30% จากปริมาณจดหมายปกติ)