ค้นหาเว็บไซต์

การส่งอีเมลด้วยการตรวจสอบสิทธิ์ SMTP ผ่าน Telnet หรือ OpenSSL


คุณสามารถใช้ในตัว

telnet

เครื่องมือบรรทัดคำสั่งเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ระยะไกลและส่งอีเมลทดสอบ นี่เป็นวิธีที่ง่ายที่สุดและเร็วที่สุดในการทดสอบเซิร์ฟเวอร์ SMTP ระยะไกล และไม่จำเป็นต้องติดตั้งไคลเอนต์ SMTP แบบเต็ม แต่ในกรณีส่วนใหญ่ เซิร์ฟเวอร์ SMTP จำเป็นต้องมีการรับรองความถูกต้องของผู้ใช้ และการส่งแบบไม่ตรวจสอบความถูกต้องสามารถทำได้ผ่านเซิร์ฟเวอร์ SMTP ที่ไม่ระบุตัวตนเท่านั้น (การส่งต่อ SMTP)

ในตัวอย่างนี้ เราจะแสดงวิธีการรับรองความถูกต้องกับเซิร์ฟเวอร์ SMTP และส่งอีเมลจากบรรทัดคำสั่ง telnet เราจะพิจารณาตัวเลือกนี้กับเซิร์ฟเวอร์ SMTP ปกติ เช่นเดียวกับเซิร์ฟเวอร์ SMTP ที่ยอมรับการเชื่อมต่อผ่านโปรโตคอล SST/TLS ที่ปลอดภัยเท่านั้น

ทดสอบการพิสูจน์ตัวตน SMTP ด้วย Telnet

ในการตรวจสอบสิทธิ์กับโฮสต์ SMTP ระยะไกลผ่าน telnet จะต้องอนุญาต การตรวจสอบสิทธิ์พื้นฐาน ในการตั้งค่า การรับรองความถูกต้องพื้นฐานเปิดใช้งานตามค่าเริ่มต้นบนเซิร์ฟเวอร์ Exchange บนเครือข่ายองค์กร การตรวจสอบสิทธิ์ประเภทนี้เกี่ยวข้องกับการส่งชื่อผู้ใช้และรหัสผ่านผ่านเครือข่ายในรูปแบบการเข้ารหัส base64

ใน Exchange Server คุณสามารถเปิดหรือปิดใช้งานการรับรองความถูกต้องพื้นฐานในการตั้งค่าตัวเชื่อมต่อการรับ

คุณสามารถเปิดใช้งานการรับรองความถูกต้องพื้นฐานบนตัวเชื่อมต่อ Exchange จากคอนโซล PowerShell (คุณต้องติดตั้ง EMS บนคอมพิวเตอร์ของคุณหรือเชื่อมต่อกับ Exchange Server จากระยะไกล):

Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism Tls, Integrated, BasicAuth, ExchangeServer

หมายเหตุ โปรดระวังว่าหากผู้โจมตีสามารถเข้าถึงช่องทางการสื่อสารได้ เขาสามารถจับภาพและถอดรหัสข้อมูลประจำตัวของผู้ใช้ที่เข้ารหัสด้วย Base64 ได้อย่างง่ายดาย ดังนั้น วิธีการรับรองความถูกต้องนี้จึงแนะนำสำหรับเครือข่ายองค์กรส่วนตัวเท่านั้น

หากคุณใช้ช่องทางการสื่อสารที่ไม่ปลอดภัยระหว่างไคลเอ็นต์และโฮสต์ Exchange ขอแนะนำให้อนุญาต BasicAuth หลังจากสร้างเซสชัน TLS ที่ปลอดภัยแล้วเท่านั้น เปิดใช้งานตัวเลือก เสนอการรับรองความถูกต้องพื้นฐานเฉพาะหลังจากเริ่มต้น TLS ในคุณสมบัติของตัวเชื่อมต่อใน EMC หรือใช้ PowerShell:

Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism 'Tls, BasicAuth, BasicAuthRequireTLS'

รายละเอียดเฉพาะของการส่งข้อความ SMTP ผ่าน TLS/SSL ได้อธิบายไว้ในส่วนถัดไปของบทความ

ในการรับรองความถูกต้องบนเซิร์ฟเวอร์ SMTP ผ่าน AUTH LOGIN คุณต้องแปลงชื่อผู้ใช้และรหัสผ่านที่จะส่งอีเมลเป็นรูปแบบ Base64 ในการแปลงสตริงเป็น Base64 คุณสามารถใช้ฟังก์ชัน PowerShell:

[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("testuser@a-d.site"))

หรือโมดูล Perl MIME::Base64:

perl -MMIME::Base64 -e 'print encode_base64("username");'

หรือใช้บริการออนไลน์ใดๆ เช่น https://www.base64encode.org

ชื่อผู้ใช้ test_user@a-d.site ดูเหมือน dGVzdF91c2VyQHdvc2h1Yi5jb20g ใน Base64

รหัสผ่าน $up3RsTr)ng เปลี่ยนเป็น JHVwM1JzVHIpbmc= ใน Base64

เปิดพรอมต์คำสั่งและใช้ Telnet เพื่อเชื่อมต่อกับพอร์ต 25 (SMTP) ของเซิร์ฟเวอร์ (ฉันจะเน้นคำสั่งที่จะป้อนเป็นสีน้ำเงิน):

telnet mail.a-d.site 25

หากเป็นโฮสต์ที่มี Exchange Server จะส่งกลับเช่น;

220 mail.a-d.site Microsoft ESMTP MAIL Service ready at Thu, 25 Nov 2021 10:22:31 +0300

ก่อนอื่นคุณต้องแนะนำตัวเองกับเซิร์ฟเวอร์:

ehlo sender.a-d.site

เซิร์ฟเวอร์จะส่งคืนรายการวิธีการรับรองความถูกต้องและตัวเลือกที่สนับสนุน อย่างที่คุณเห็น มี AUTH LOGIN (การรับรองความถูกต้องพื้นฐาน) อยู่ในรายการ

250-mail.a-d.site Hello [192.168.1.115]
250-SIZE 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING

สามารถใช้โปรโตคอลการตรวจสอบสิทธิ์ต่อไปนี้บนเซิร์ฟเวอร์ SMTP ได้: PLAIN, GSSAPI, DIGEST-MD5, MD5, CRAM-MD5, OAUTH10A, OAUTHBEARER

ตัวอย่างเช่น การตอบสนองดังกล่าวจากเซิร์ฟเวอร์ SMTP บ่งชี้ว่ารองรับโปรโตคอลการตรวจสอบสิทธิ์ 3 รายการ

250 AUTH GSSAPI DIGEST-MD5 PLAIN

วิธีการรับรองความถูกต้องพื้นฐาน PLAIN และ LOGIN ใช้การเข้ารหัส BASE64 ของชื่อและรหัสผ่าน ความแตกต่างระหว่างวิธีเหล่านี้คือสำหรับวิธี PLAIN การเข้าสู่ระบบและรหัสผ่านจะถูกส่งในบรรทัดเดียว และเมื่อใช้ LOGIN ระบบจะส่งการเข้าสู่ระบบก่อน แล้วจึงส่งรหัสผ่าน

หากเซิร์ฟเวอร์ SMTP ของคุณรองรับวิธีการตรวจสอบสิทธิ์ธรรมดา คุณสามารถเข้ารหัสชื่อผู้ใช้และรหัสผ่านโดยใช้ฟังก์ชัน Perl หรือ PowerShell:

perl -MMIME::Base64 -e 'print encode_base64("\000testuser@a-d.site\000$up3RsTr)ng")'
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("\0username\0password"))

แจ้งเซิร์ฟเวอร์ SMTP ที่คุณต้องการรับรองความถูกต้องโดยใช้วิธีการเข้าสู่ระบบ:

เข้าสู่ระบบอัตโนมัติ

เซิร์ฟเวอร์จะตอบกลับ:

334 VXNlcm5hbWU6

เมื่อตรวจสอบด้วยวิธีธรรมดา คุณสามารถส่งข้อมูลประจำตัวของผู้ใช้ได้ทันที:

AUTH ธรรมดา XDB0ZXN0X3VzZXJAd29zaHViLmNvbVwwKW5n

ตอนนี้คัดลอกและวางชื่อผู้ใช้ในรูปแบบ Base64 ที่คุณเข้ารหัสไว้ก่อนหน้านี้:

dGVzdF91c2VyQHdvc2h1Yi5jb20g

เซิร์ฟเวอร์จะตอบกลับด้วยรหัส 334:

334 UGFzc3dvcmQ6.

จากนั้นคัดลอกและวางรหัสผ่านในรูปแบบ Base64:
JHVwM1JzVHIpbmc=

หากชื่อผู้ใช้และรหัสผ่านถูกต้อง เซิร์ฟเวอร์จะส่งกลับ:

235 2.7.0 Authentication successful

ถ้าไม่:

535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

ได้เวลากรอกข้อมูลในฟิลด์อีเมลมาตรฐาน:

อีเมลจาก: test_user@a-d.site

250 2.1.0 Sender OK

rcpt ถึง: root@a-d.site

250 2.1.5 Recipient OK

ข้อมูล

354 Start mail input; end with .

จาก: TestUser <
ถึง: TheMainAdmin < root@a-d .com >
เรื่อง: ทดสอบ BASE SMTP ที่รับรองความถูกต้องผ่าน Telnet
นี่คือการทดสอบ
.

250 2.6.0 <ae80543d-cb8a-5c45-ad80-23b1985df753@mail.a-d.site> [InternalId=6334284] Queued mail for delivery

อีเมลอยู่ในคิวสำหรับการจัดส่ง

ออกจาก

221 2.0.0 Closing connection.
Connection closed by foreign host.

หลังจากนั้นสักครู่ ให้ตรวจสอบว่าอีเมลถูกส่งไปยังกล่องจดหมายของผู้รับหรือไม่

สามารถใช้ cmdlet Get-MessageTrackingLog PowerShell เพื่อค้นหาข้อมูลการส่งข้อความที่จัดเก็บไว้ในบันทึกการติดตามข้อความใน Exchange ในสถานที่

การใช้ SMTP ที่รับรองความถูกต้องผ่าน TLS/SSL

ผู้ให้บริการ SMTP ส่วนใหญ่ไม่อนุญาตให้มีเซสชัน SMTP แบบข้อความล้วน อนุญาตการเชื่อมต่อ SMTP ที่เข้ารหัสด้วย TLS เท่านั้น คุณสามารถรับรองความถูกต้องกับเซิร์ฟเวอร์ SMTP โดยใช้วิธี LOGIN และ PLAIN หลังจากเริ่มต้นการเชื่อมต่อ TLS แล้วเท่านั้น Telnet ไม่รองรับ SSL หรือ TLS ดังนั้นคุณต้องใช้เครื่องมือ OpenSSL เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ผ่าน TLS

มาดูวิธีใช้กัน

OpenSSL

เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ผ่าน TLS และรับรองความถูกต้องโดยใช้ AUTH LOGIN

ดาวน์โหลดและติดตั้ง OpenSSL:

  • ใน Windows คุณสามารถใช้: http://slproweb.com/products/Win32OpenSSL.html

  • บน Linux มีการติดตั้ง OpenSSL จากที่เก็บฐาน:

    sudo apt-get install openssl

    - บน Ubuntu/Debian

    sudo yum install openssl

    - บน CentOS/RedHat

ในการเชื่อมต่อกับโฮสต์ SMTP จากบรรทัดคำสั่งด้วยการเข้ารหัส SSL/TLS ให้ใช้คำสั่งต่อไปนี้:

openssl.exe s_client -starttls smtp -connect smtp.a-d.site:25

เรียกใช้คำสั่ง EHLO หลังจากสร้างการเชื่อมต่อ SSL ที่ปลอดภัยกับเซิร์ฟเวอร์ SMTP

เซิร์ฟเวอร์ SMTP จะส่งคืน:

EHLO sender.a-d.site

250- smtp.a-d.site
250-PIPELINING
250-SIZE 52428800
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

ตอนนี้คุณสามารถตรวจสอบสิทธิ์ด้วย AUTH LOGIN หรือ AUTH PLAIN แล้วส่งอีเมลตามที่อธิบายไว้ข้างต้น

การตรวจสอบสิทธิ์ SMTP บน Office 365 ด้วย TLS

ณ สิ้นเดือนตุลาคม 2020 Microsoft ได้บล็อกการใช้การรับรองความถูกต้องพื้นฐานเพื่อเชื่อมต่อกับกล่องจดหมายใน Exchange Online SMTP Auth ไปยังเซิร์ฟเวอร์ใน Office 365 (Microsoft 365/Exchange Online) ยังคงรองรับ แต่ถือว่าไม่ปลอดภัย Microsoft ปิดใช้งาน SMTP AUTH สำหรับผู้เช่ารายใหม่ทั้งหมด ซึ่งหมายความว่าคุณจะไม่สามารถเชื่อมต่อกับโฮสต์ SMTP บน Office 365 จากบรรทัดคำสั่งได้

telnet

หรือ

openssl

ในการส่งอีเมลทดสอบผ่านเซิร์ฟเวอร์ SMTP ของ Office 365 คุณต้องใช้ cmdlet Send-MailMessage PowerShell

$emailto='emailto@a-d.site'
$emailfrom='emailfrom@a-d.site'
$smtpserver='smtp.office365.com'
$MailMessage = @{
To = $emailto
From = $emailfrom
Subject = "Testing SMTP TLS on O365"
Body = "This is a test measles "
Smtpserver = $smtpserver
#ErrorAction = "SilentlyContinue"
Port="587"
}
Send-MailMessage @MailMessage -UseSsl -Credential $cred

บทความที่เกี่ยวข้อง