שליחת דואר אלקטרוני עם אימות 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 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 הכניסה והסיסמה נשלחים בשורה אחת. ובעת שימוש בלוגין, הכניסה נשלחת תחילה, ולאחר מכן את הסיסמה.
אם שרת 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 OKrcpt אל: root@a-d.site
250 2.1.5 Recipient OKdata
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



