Telnet veya OpenSSL yoluyla SMTP Kimlik Doğrulaması ile E-posta Gönderme
Yerleşik kullanabilirsiniz
telnetuzak bir SMTP sunucusuna bağlanmak ve bir test e-postası göndermek için komut satırı aracı. Bu, uzak bir SMTP sunucusunu test etmenin en kolay ve en hızlı yoludur ve tam bir SMTP istemcisinin yüklenmesini gerektirmez. Ancak çoğu durumda, SMTP sunucuları kullanıcı kimlik doğrulaması gerektirir ve kimliği doğrulanmamış gönderme yalnızca anonim SMTP sunucuları (SMTP geçişleri) aracılığıyla mümkündür.
Bu örnekte, size bir SMTP sunucusunda nasıl kimlik doğrulaması yapacağınızı ve telnet komut satırından nasıl e-posta göndereceğinizi göstereceğiz. Normal bir SMTP sunucusunun yanı sıra, yalnızca güvenli bir SST/TLS protokolü üzerinden bağlantıları kabul eden bir SMTP sunucusunun seçeneğini değerlendireceğiz.
Telnet ile SMTP Kimlik Doğrulamasını Test Etme
Telnet yoluyla uzak bir SMTP ana bilgisayarında kimlik doğrulaması yapmak için, ayarlarında Temel Kimlik Doğrulamaya izin verilmelidir. Temel Kimlik Doğrulama, şirket ağındaki Exchange sunucularında varsayılan olarak etkindir. Bu kimlik doğrulama türü, kullanıcı adının ve parolanın ağ üzerinden base64 kodlanmış biçimde gönderilmesini içerir.
Exchange Server'da, alıcı bağlayıcı ayarlarında Temel Kimlik Doğrulamayı etkinleştirebilir veya devre dışı bırakabilirsiniz.
PowerShell konsolundan Exchange bağlayıcısında Temel Kimlik Doğrulamayı etkinleştirebilirsiniz (bilgisayarınıza EMS yüklemeniz veya Exchange Server'a uzaktan bağlanmanız gerekir):
Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism Tls, Integrated, BasicAuth, ExchangeServerNot. Saldırganın iletişim kanalına erişimi varsa, Base64 ile şifrelenmiş kullanıcı kimlik bilgilerini kolayca yakalayıp şifresini çözebileceğine lütfen dikkat edin. Dolayısıyla, bu kimlik doğrulama yöntemi yalnızca özel kurumsal ağlar için önerilir.
İstemci ile Exchange ana bilgisayarı arasında güvenli olmayan iletişim kanalları kullanıyorsanız, BasicAuth'a yalnızca güvenli bir TLS oturumu oluşturduktan sonra izin vermeniz önerilir. EMC'deki bağlayıcı özelliklerinde Temel kimlik doğrulamasını yalnızca TLS'yi başlattıktan sonra sun seçeneğini etkinleştirin veya PowerShell'i kullanın:
Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism 'Tls, BasicAuth, BasicAuthRequireTLS'TLS/SSL üzerinden SMTP mesajları göndermenin ayrıntıları, makalenin bir sonraki bölümünde açıklanmaktadır.
AUTH LOGIN üzerinden SMTP sunucusunda kimlik doğrulaması yapmak için, e-postanın gönderileceği kullanıcı adı ve şifreyi Base64 formatına dönüştürmeniz gerekir. Dizeyi Base64'e dönüştürmek için PowerShell işlevini kullanabilirsiniz:
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("testuser@a-d.site"))Veya Perl MIME::Base64 modülü:
perl -MMIME::Base64 -e 'print encode_base64("username");'Veya herhangi bir çevrimiçi hizmeti kullanın, örneğin https://www.base64encode.org.
test_user@a-d.site kullanıcı adı, Base64'te dGVzdF91c2VyQHdvc2h1Yi5jb20g gibi görünüyordu
Base64'te $up3RsTr)ng şifresi JHVwM1JzVHIpbmc='e dönüştü
Bir komut istemi açın ve sunucunun 25 numaralı bağlantı noktasına (SMTP) bağlanmak için Telnet'i kullanın (girilecek komutları mavi ile vurgulayacağım):
telnet mail.a-d.site 25
Exchange Server'a sahip bir host ise şöyle bir dönüş yapacaktır;
220 mail.a-d.site Microsoft ESMTP MAIL Service ready at Thu, 25 Nov 2021 10:22:31 +0300Öncelikle kendinizi sunucuya tanıtmanız gerekir:
ehlo sender.a-d.site
Sunucu, desteklenen kimlik doğrulama yöntemleri ve seçeneklerinin listesini döndürür. Gördüğünüz gibi listede AUTH LOGIN (temel kimlik doğrulama) var.
250-mail.a-d.site Hello [192.168.1.115]250-SIZE 36700160250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-AUTH LOGIN250-8BITMIME250-BINARYMIME250 CHUNKINGAşağıdaki kimlik doğrulama protokolleri SMTP sunucularında kullanılabilir: PLAIN, GSSAPI, DIGEST-MD5, MD5, CRAM-MD5, OAUTH10A, OAUTHBEARER.
Örneğin, SMTP sunucusundan gelen böyle bir yanıt, 3 kimlik doğrulama protokolünün desteklendiğini gösterir.
250 AUTH GSSAPI DIGEST-MD5 PLAIN
Temel kimlik doğrulama yöntemleri PLAIN ve LOGIN, ad ve parola için BASE64 kodlamasını kullanır. Aralarındaki fark, PLAIN yöntemi için kullanıcı adı ve şifrenin tek satırda gönderilmesidir. Ve LOGIN kullanılırken, önce oturum açma bilgisi, ardından şifre gönderilir.
SMTP sunucunuz DÜZ kimlik doğrulama yöntemini destekliyorsa, perl işlevini veya PowerShell'i kullanarak kullanıcı adını ve parolayı kodlayabilirsiniz:
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 sunucusuna, LOGIN yöntemini kullanarak kimlik doğrulaması yapmak istediğinizi söyleyin:
YETKİLENDİRME GİRİŞİ
Sunucu yanıt verecektir:
334 VXNlcm5hbWU6PLAIN yöntemiyle kimlik doğrulaması yaparken, kullanıcının kimlik bilgilerini hemen gönderebilirsiniz:
AUTH PLAIN XDB0ZXN0X3VzZXJAd29zaHViLmNvbVwwKW5n
Şimdi daha önce şifrelediğiniz Base64 biçimindeki kullanıcı adını kopyalayıp yapıştırın:
dGVzdF91c2VyQHdvc2h1Yi5jb20g
Sunucu bir 334 koduyla yanıt verecektir:
334 UGFzc3dvcmQ6.Ardından şifreyi Base64 biçiminde kopyalayıp yapıştırın:
JHVwM1JzVHIpbmc=
Kullanıcı adı ve şifre doğruysa, sunucu şunu döndürür:
235 2.7.0 Authentication successfulDeğilse:
535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6Standart e-posta alanlarını doldurma zamanı:
posta: test_user@a-d.site
250 2.1.0 Sender OKroot@a-d.site adresine gönder
250 2.1.5 Recipient OKveri
354 Start mail input; end with .TestUser
den: TheMainAdmin < root@a-d .com >
Konu: Telnet aracılığıyla Doğrulanan BASE SMTP'yi test edin
Bu bir testtir
.
250 2.6.0 <ae80543d-cb8a-5c45-ad80-23b1985df753@mail.a-d.site> [InternalId=6334284] Queued mail for deliveryE-posta teslim edilmek üzere kuyruğa alındı.
ÇIK
221 2.0.0 Closing connection.Connection closed by foreign host.Bir süre sonra e-postanın alıcının posta kutusuna ulaşıp ulaşmadığını kontrol edin.
Get-MessageTrackingLog PowerShell cmdlet'i şirket içi Exchange'de ileti izleme günlüğünde saklanan ileti teslim bilgilerini aramak için kullanılabilir.
TLS/SSL üzerinden Kimliği Doğrulanmış SMTP Kullanma
Çoğu SMTP sağlayıcısı, düz metin SMTP oturumlarına izin vermez. Yalnızca TLS ile şifrelenmiş SMTP bağlantılarına izin verilir. Yalnızca TLS bağlantısını başlattıktan sonra LOGIN ve PLAIN yöntemlerini kullanarak SMTP sunucusunda kimlik doğrulaması yapabilirsiniz. Telnet, SSL veya TLS'yi desteklemez, bu nedenle SMTP sunucusuna TLS aracılığıyla bağlanmak için OpenSSL aracını kullanmanız gerekir.
Nasıl kullanılacağına bakalım
OpenSSLTLS aracılığıyla SMTP sunucusuna bağlanmak ve AUTH LOGIN kullanarak kimlik doğrulamak için.
OpenSSL'yi indirin ve kurun:
Windows'ta şunları kullanabilirsiniz: http://slproweb.com/products/Win32OpenSSL.html
Linux'ta OpenSSL, temel depolardan kurulur:
sudo apt-get install openssl- Ubuntu/Debian'da
sudo yum install openssl- CentOS/RedHat'ta
SSL/TLS şifrelemeli komut satırından SMTP ana bilgisayarına bağlanmak için aşağıdaki komutu kullanın:
openssl.exe s_client -starttls smtp -connect smtp.a-d.site:25SMTP sunucusu ile güvenli bir SSL bağlantısı kurduktan sonra EHLO komutunu çalıştırın.
SMTP sunucusu şunu döndürür:
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 DSNArtık AUTH LOGIN veya AUTH PLAIN ile kimlik doğrulaması yapabilir ve yukarıda açıklandığı gibi e-posta gönderebilirsiniz.
TLS ile Office 365'te SMTP Kimlik Doğrulaması
Ekim 2020'nin sonunda Microsoft, Exchange Online'daki posta kutularına bağlanmak için temel kimlik doğrulamanın kullanılmasını engelledi. Office 365'teki sunuculara SMTP Kimlik Doğrulaması (Microsoft 365/Exchange Online) hala desteklenmektedir, ancak güvenli olmadığı düşünülmektedir. Microsoft, tüm yeni kiracılar için SMTP AUTH'yi devre dışı bırakır. Bu, kullanarak Office 365'teki SMTP ana bilgisayarlarına komut satırından bağlanamayacağınız anlamına gelir.
telnetveya
opensslOffice 365 SMTP sunucuları aracılığıyla test e-postası göndermek için Send-MailMessage PowerShell cmdlet'ini kullanmanız gerekir.
$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



