Exchange Server

Relay Nedir? Exchange Server Üzerinde Relay Yapılandırması

Merhaba, bu yazımız da Exchange Server’ın Relay yapısından bahsedeceğiz.

E-Mail servisleri günümüzde her kurum ve her kişi tarafından kullanılmaktadır. Bir E-Posta göndermek kullanıcı için kolay bir işlemdir, göndermek istediğimiz metni hazırlarız son olarakta alıcı kişinin e-mail adresini yazıp GÖNDER butonunu kullanırız. Ancak E-Mail servislerinin arka planında MTA, MUA ve RELAY gibi anlaşılması gereken ayrıntılı metrikler bulunmaktadır.

Öncelikle kısa bir şekilde relay’in tanımını yapacağız. Relay tanımını yaparken MTA ve MUA kavramlarına da kısaca değineceğiz.

Relay Nedir?

Relay, sizin iletinizi hedeflenen alıcıya teslim etmek ile görevli ileti aktarım aracısıdır. 

Outlook, Thunderbird gibi Mail Sunucularımıza bağlantı kuran yazılımları MUA olarak adlandırıyoruz, Mail Sunucularımızı ise MTA olarak adlandırıyoruz. Bir MUA belirtilen hedefe mail gönderirken, bu isteği MTA’ya iletmekte, MTA gelen isteği kontrol eder, gelen bilgileri doğrular ve Relay (Mail Teslim) işlemi gerçekleşir.

E-Mail Relay işlemini postane örneklendirmesi ile anlatabiliriz; Bir mektup veya paket göndermek istediğimizde, göndereceğimiz ürünün üzerine, alıcı ve iade adresi yazar sonra bunu bölgemizde bulunan postaneye bırakırız. Bölgemizde bulunan postane, paketin son varış noktasını belirler ve alıcı adresinin bölgesinde ki postaneye gönderir. Alıcı postane ise ürünün üzerinde ki adrese göre ilgili ürünü teslim edilir. Adres yanlış çıkar ve ürün teslim edilemez ise iade adresine ürün geri döner.  (Burada dikkat edilmesi gereken faktör, gönderen ve alıcı aynı bölgede yaşıyorsa teslim olayına başka bir postane dahil olmamaktadır.)

E-Mail Relay işlemi de hemen hemen yukarıdaki örneklendirme gibi çalışmaktadır. MUA isteği MTA’ya iletiyor ve sonra ileti alıcının MTA’sına teslim ediliyor. MTA bunu alıcı kısmında yazılı olan e-mail adresi ile tanımlama yapıyor ve MUA’ya iletiyor. Açık adres ve daire numaraları yerine, benzersiz e-posta adresleri ile tanımlama yapılmaktadır. (Burada da postane örneğinde olduğu gibi hem gönderen hem de alıcı aynı domain içerisindeyse başka bir mail sunucusu Relay işlemine dahil olmamaktadır.)

Relay kavramını günlük yaşantımızda birçok servis üzerinde kullanmaktayız, Backup, SIEM, ERP yazılımlarımız günlük raporları/alarmları bize mail olarak teslim eder, bu sırada Mail sunucumuz üzerinden Relay yapılmakta. Bu tür servislerde Relay işlemi iki farklı gerçekleşebilir, mail sunucumuz üzerinde oluşturmuş olduğumuz bir mail hesabı ile authentication sağladıktan sonra relay yapabiliyoruz ya da Exchange Server üzerinde IP bazlı çalışan bir connector oluştururuz, connector içerisine servislerimizin IP adresini ekleriz bu IP adresi üzerinden kimlik doğrulama olmadan Relay işlemi de yapabiliriz.

Relay kavramının kısa bir tanımını yaptıktan sonra Exchange Server üzerinde Relay işlemlerinden bahsedebiliriz.

Internal ve External Relay Senaryolarını Yapılandırma

Internal Relay: Sadece Exchange Server ortamınızda bulunan dahili alıcılara e-posta göndermesi gereken istemciler ve uygulamalar için kullanılmaktadır.

External Relay: Harici alıcılara e-posta göndermesi gereken istemci ve uygulamalar için kullanılır.

Exchange Server 2019 ile Internal Relay İşlemi

Exchange Server 2016/2019 ilk kez ortamınıza dahil edildiğinde, kurulum yordamı otomatik olarak anonymous gönderenlerden, dahili alıcılara e-posta teslim etmek için önceden yapılandırılmış bir connector oluşturmaktadır. Bu, gelen e-postanın sunucu tarafından alınmasına izin verir ve ayrıca dahili mail relay işlemleri içinde kullanılır.

Exchange Server ilk kurulduğunda varsayılan olarak 5 connector olarak gelmektedir. Varsayılan kurulumla oluşturulan Connector benim örneğimde “EXCSERVER\Default Frontend EXCSERVER” olarak adlandırılmaktadır. İlgili connectorleri ECP üzerinden görüntüleyebildiğiniz gibi EMS üzerinden de görüntüleyebilirsiniz.

Get-ReceiveConnector
[PS] C:\Windows\system32>Get-ReceiveConnector

Identity                                    Bindings                  Enabled

EXCSERVER\Default EXCSERVER                 {0.0.0.0:2525, [::]:2525} True

EXCSERVER\Client Proxy EXCSERVER            {[::]:465, 0.0.0.0:465}   True

EXCSERVER\Default Frontend EXCSERVER        {[::]:25, 0.0.0.0:25}     True

EXCSERVER\Outbound Proxy Frontend EXCSERVER {[::]:717, 0.0.0.0:717}   True

EXCSERVER\Client Frontend EXCSERVER         {[::]:587, 0.0.0.0:587}   True

İlgili Connectoru Telnet kullanarak test edebilirsiniz.

C:\>telnet EXCSERVER 25

220 EXCSERVER.akkaya.local Microsoft ESMTP MAIL Service ready at Tue, 25 Apr 2022 22:14:29 +0300

helo

250 EXCSERVER.akkaya.local Hello [192.168.1.30]

mail from: [email protected]

250 2.1.0 Sender OK

rcpt to: [email protected]

250 2.1.5 Recipient OK

Data

354 Start mail input; end with .

Subject: Test email

Testing

.

250 2.6.0 <[email protected] > [

InternalId=854698491929, Hostname=EXCSERVER.akkaya.local ] Queued mail for

 delivery

Yukarıda ki gibi bir senaryo için ek bir connector ihtiyacınız bulunmamaktadır, ama sunucu adı yerine bir DNS adı kullanmanızı daha faydalı olacaktır.

Exchange Server 2019 ile External Relay İşlemi

Internal bir adresten, External bir e-posta adresine ileti göndermek için Telnet kullanacağım ve Telnet’in bize ne cevap vereceğini kontrol edeceğim.

220 EXCSERVER.akkaya.local Microsoft ESMTP MAIL Service ready at Tue, 25 Apr 2022 22:30:29 +0300

helo

250 EXCSERVER.akkaya.local Hello [192.168.1.30]

mail from: [email protected]

250 2.1.0 Sender OK

rcpt to: [email protected].

550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain

External E-posta adresini girdiğim zaman “550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain” hata kodu dönmektedir.

550 5.7.54 hata kodunu çözmemiz için kullanabileceğimiz iki yöntem bulunmaktadır.

  • Kullanıcı Authentication yapılandırması
  • Connector üzerinde Anonymous yetkilendirmesi

Kullanıcı Authentication kullanarak, External Relay Yapılandırması

Her zaman ilk yöntem kimliği doğrulanmış SMTP bağlantıları kullanmaktır. Exchange Server 2019 ortamınız da default olarak gelen “Client Frontend” connectoru bulunmaktadır, ilgili connectorun görevini şu şekilde açıklayabiliriz; “TLS (Transport Layer Security) kullanan güvenli bağlantıları kabul eder, TCP Port 587 kullanır.”

İlgili connectorun çalışması için minimum bir yapılandırma yeterli olacaktır. Ortamınız da kullanmış olduğunuz Exchange Server 2019 üzerinde SSL Sertifikasını yapılandırdığınızı, cihazlarınızın ve uygulamalarınızın erişebilmesi için DNS yapılandırmalarını yapmanız gerekmektedir. (Örnek: mail.cozumpark.com, relay.cozumpark.com vb.) Biz şimdi connector üzerinde TlsCertificateName değerini ayarlayarak işlemlerimize devam edeceğiz.

Öncelikle SSL sertifikamızın imzasını bulmamız gerekmektedir. Bunun için EMS üzerinden aşağıda ki kodu çalıştırmamız yeterli.

Get-ExchangeCertificate

Thumbprint                                Services   Subject
----------                                --------   -------
AAS3C0528657EF22BB817CA9B63FD220A9DE63  ...WS..    CN=mail.cozumpark.com, OU=IT, O=cozumpark Portal,...
FE6528BE1548D823494AE9A00D144FF3D16E0CD2  ....S..    CN=Microsoft Exchange Server Auth Certificate
DAB089E53CA660DEF7B8EE434533C31C0E3D3499  IP.WS..    CN=EXCSERVER
17839AF62AA3A1CBBD5F7EC81E92A546566D8AD9  .......    CN=WMSvc-EXCSERVER

TlsCertificateName dizesi, SSL Sertifikasının iki farklı özniteliğinden oluşmaktadır, bu nedenle yapılandırma sağlarken aşağıdaki komutları kullanabiliriz.

[PS] C:\>$cert = Get-ExchangeCertificate -Thumbprint AAS3C0528657EF22BB817CA9B63FD220A9DE63 [PS] C:\>$tlscertificatename = “<i>$($cert.Issuer)<s>$($cert.Subject)” [PS] C:\>Set-ReceiveConnector “EXCSERVER\Client Frontend EXCSERVER” -Fqdn mail.cozumpark.com -TlsCertificateName $tlscertificatename

Yapılandırmış olduğumuz Connectoru test etmek için PowerShell’in Send-MailMessage cmdlet’ini kullanacağım.

PS C:\>$credential = Get-Credential

İlgili komuttan sonra, sunucumuzu, adresleri ve konu belirteceğimiz cmdlet’i yazacağım.

PS C:>Send-MailMessage -SmtpServer mail.cozumpark.com -Credential $credential -From '[email protected]' -To '[email protected]' -Subject 'Test email' -Port 587 -UseSsl

Yapmış olduğumuz connector yapılandırmasından sonra, ilk test işlemim başarılı şekilde sonuçlandı. Böylece, kimliği doğrulanmış SMTP kullanabilen herhangi bir cihaz veya uygulama Exchange Server 2019 sunucumuzda ki 587 portu dinleyen connectoru kullanacak şekilde yapılandırma sağladık.

Connector Üzerinde Anonymous Yapılandırması

Her senaryoda kimlik doğrulaması kullanamayabilirsiniz, bu tarz durumlarda Exchange Server 2019 sunucusu üzerinde belirli bir IP adresine veya IP aralığına anonim bir şekilde Relay yapacak bir connector oluşturmamız gerekebilir.

ECP üzerinden mail flowreceive connectors sayfasına geliyoruz ve (+) butonuna tıklıyoruz.

Oluşturacağımız connectore bir isim veriyoruz, ben örneğimde “IP_Relay” olarak kullandım. Role seçeneğini “Frontend Transport” olarak belirtiyoruz ve Type seçeneğini “Custom” olarak belirtiyoruz.

Network adapter bindings bölümünde, oluşturduğumuz connectorun dinleyeceği IP ve Port numaralarını görebiliyoruz, varsayılan olarak “25” geliyor ve varsayılan olarak bırakıyoruz.

Remote Network Settings bölümünde, varsayılan olarak gelen IP aralığını kaldırıyoruz ve ardından anonim SMTP Relaya izin vermek istediğiniz IP adreslerini veya IP aralıklarını ekliyoruz. Ortamınız da başka Exchange Sunucuları varsa onların IP adreslerini eklemenizi önermiyorum, çünkü bu yapılandırma sunucudan sunucuya iletişim sorunları çıkartabilir.

Ben örneğimde 192.168.1.55 IP adresini ekledim ve connector yapılandırmasını tamamladım.

Ek yapılandırmayı yapmak için EMS penceresini tekrar açıyoruz ve aşağıda ki iki komutu kendi sunucu bilgilerimize göre düzenledikten sonra çalıştırıyoruz.

[PS] C:>Set-ReceiveConnector “EXCSERVER\IP_Relay” -PermissionGroups AnonymousUsers

[PS] C:>Get-ReceiveConnector “EXCSERVER\IP_Relay” | Add-ADPermission -User ‘NT AUTHORITY\Anonymous Logon’ -ExtendedRights MS-Exch-SMTP-Accept-Any-Recipient

Artık oluşturmuş olduğumuz connector’u kullanabiliriz. Bu connector ile belirttiğimiz IP adresinden artık herhangi bir e-posta adresinden (geçerli bir adres olsun yada olmasın) herhangi bir harici adrese e-posta gönderebiliriz.

EK Bilgiler;

Şifreleme

Makale içerisinde, bir connector için TLS Sertifikası yapılandırması gerçekleştirdik ve Send-MailMessage ile yaptığım test için TLS/SSL kullandım. Bu şekilde hem kimlik doğrulaması gerçekleştirirken, ilgili trafiğimiz de TLS/SSL yöntemi ile şifrelemiş olduk.

Güvenlik

Birçok kuruluş, anonim teslim seçeneğini kullanmaktadır ve bir çok IP adresi üzerinden e-posta iletmek için connector oluşturmaktadır. İlgili senaryoyu siz kendi ortamınıza göre şekillendirebilirsiniz, çünkü Relay işlemi basit gibi gözüksede perde arkasında bir çok güvenlik açığı barındırabilir. (İzin vermiş olduğunuz IP adreslerinin güvenilir olduğundan emin olmalısınız.) IP adresleri bir DHCP poolu üzerinde dağıtılıyorsa, Load Balancing ile ilişkili bir durumda çalışıyorsa, ilgili IP adresi bir RDS sunucusu olarakta kullanılıyorsa bir kere daha düşünmeniz gerekebilir. IP veya sunucu üzerinden zararlı bir yazılım için kullanılmaya başlanırsa, ilgili kaynağı takip etmeniz zorlaşabilir.

Authentication, yöntemi işinizi biraz karmaşıklaştırsa da güvenlik için bu karmaşıklığa katlanılabilir. Sadece cihazlarınızı ve servisleriniz üzerinde kullanmış olduğunuz hesap bilgilerini kontrol etmeniz yeterli olacaktır.

Load Balancing

Yüksek oranda kullanılabilir bir SMTP servisi kullanmak istiyorsanız eğer, Load Balancing kullanmanız gereken en iyi çözümdür. Load Balancing planlaması yapıyorsanız eğer, pool içerisinde ki tüm sunucularınızın aynı connector içerisinde olduğundan emin olmanız gerekmektedir.

Load Balancing, bir NAT kaynağı olduğu için Exchange sunucusuna görünecek olan tek IP adresi kaynak veya servisin değil Load Balancing’e ait IP adresi olacaktır. Bu olay connector yapılandırmasını basitleştirsede bir dizi probleme yol açabilir.

  • Erişim denetimin Load Balancing üzerine uygulanması gerekmektedir, aksi takdirde ağınızda geniş kapsamlı bir anonim Relay hizmetine sahip olabilirsiniz.
  • Load Balancing aracılığıyla yapılan bağlantılar anonimdir ve bazı durumlarda kaynak IP’ye kadar izleyemeyebilirsiniz.

İlgili Makaleler

4 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu