שליחת דואר אלקטרוני עם אימות 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 מרחוק):

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

הסיסמה $up 3RsTr)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 הכניסה והסיסמה נשלחים בשורה אחת. ובעת שימוש בלוגין, הכניסה נשלחת תחילה, ולאחר מכן את הסיסמה.

אם שרת SMTP שלך תומך בשיטת האימות PLAIN, באפשרותך לקודד את שם המשתמש והסיסמה באמצעות הפונקציה 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 שברצונך לבצע אימות באמצעות שיטת LOGIN:

AUTH LOGIN

השרת יגיב:

334 VXNlcm5hbWU6

בעת אימות באמצעות פעולת השירות PLAIN, באפשרותך לשלוח את אישורי המשתמש באופן מיידי:

AUTH PLAIN XDB0ZXN0X3VzZXJAd29zaHViLmNvbVwwKW5n

כעת העתק והדבק את שם המשתמש בפורמט Base64 שהצפנת קודם לכן:

dGVzdF91c2VyQHdvc2h1Yi5jb20g

השרת יגיב בקוד 334:

334 UGFzc3dvcmQ6.

לאחר מכן העתק והדבק את הסיסמה בתבנית Base64:
JHVwM1JzVHIpbmc=

אם שם המשתמש והסיסמה נכונים, השרת יחזיר:

235 2.7.0 Authentication successful

אם לא:

535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

הגיע הזמן למלא את שדות הדואר האלקטרוני הרגילים:

mail from: test_user@a-d.site

250 2.1.0 Sender OK

rcpt אל: root@a-d.site

250 2.1.5 Recipient OK

data

354 Start mail input; end with .

<span style="color: #3366ff;">from: TestUser <test_user@a-d.site><<br /> <span style="color: #3366ff;"> to: TheMainAdmin < root@a-d.site ><br /> <span style="color: #3366ff;"> נושא: Test BASE SMTP מאומת באמצעות Telnet<br /> <span style="color: #3366ff;"> זהו test<br /> <span style="color: #3366ff;"> .

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

הדואר האלקטרוני עמד בתור למסירה.

QUIT

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

  • בלינוקס, OpenSSL מותקן ממאגרי הבסיס:

    sudo apt-get install openssl

    - על אובונטו/דביאן

    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 לשרתים ב- Office 365 (Microsoft 365/Exchange Online) עדיין נתמך, אך נחשב לא מאובטח. Microsoft הופכת אימות SMTP ללא זמין עבור כל הדיירים החדשים. משמעות הדבר היא שלא תוכל להתחבר למארחי 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