Telnet veya OpenSSL yoluyla SMTP Kimlik Doğrulaması ile E-posta Gönderme


Yerleşik kullanabilirsiniz

telnet

uzak 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, ExchangeServer

Not. 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 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING

Aş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 VXNlcm5hbWU6

PLAIN 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 successful

Değilse:

535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

Standart e-posta alanlarını doldurma zamanı:

posta: test_user@a-d.site

250 2.1.0 Sender OK

root@a-d.site adresine gönder

250 2.1.5 Recipient OK

veri

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 delivery

E-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

OpenSSL

TLS 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:25

SMTP 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 DSN

Artı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.

telnet

veya

openssl

Office 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

İlgili makaleler