การส่งอีเมลด้วยการตรวจสอบสิทธิ์ 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 36700160250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-AUTH LOGIN250-8BITMIME250-BINARYMIME250 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 OKrcpt ถึง: 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



