SPF kaydı nasıl oluşturulur?

Merhaba,

SPF (Sender Policy Framework) kaydı nasıl oluşturulur yazımızdan önce eğer SPF kaydının ne olduğunu bilmiyorsanız SPF kaydı nedir? yazımızı okumanızı öneririz.

SPF konusunu iyice anlamak için önce nasıl çalıştığından bahsedelim.

DNS üzerine girilen TXT türünde bir kayıt ile, bu kaydı oluşturduğunuz alan adından gönderilen elektronik postaların, hangi sunuculardan gönderilebileceğini belirtir ve elektronik postayı alan tarafın SPF kontrolü sonrasında, bu elektronik postayı nasıl değerlendirmesini istediğinizi tanımlarsınız.

SPF kaydı iki bölümden oluşur. İlk bölüm versiyon bilgisini barındırır, sonrasında ise mekanizmalar olarak adlandırılan değerleri barındıran ikinci bölüm yer alır. Bir SPF kaydında değişmez iki değer vardır, v=spf1 şeklinde versiyon bilgisi ile başlar ve SPF nin tek versiyonu olduğu için sabittir, all mekanizması ile biter. Bu iki değerin SPF kaydı içerisinde ve mutlaka doğru yerlerde bulunması gerekir.

Mekanizmalara geçmeden önce, Qualifiers olarak da adlandırılan niteleyicilerden bahsetmek gerekir. mekanizmalarla birlikte kullanılan 4 niteleyici bulunur. Bir mekanizmanın hemen öncesinde ve bitişik şekilde kullanılır. Eğer bir mekanizmanın solunda bir niteleyici yoksa, sistem varsayılan değer olarak + (Pass) niteleyicisi varmış gibi davranır.

Niteleyiciler şunlardır

+ (Pass) : Pass sonucu içindir. Hiç birşey kullanılmazsa varsayılan niteleyici olarak işleme alınır. Örneğin +mx ile mx aynı sonucu verir.
– (Fail) : Fail sonucu içindir. Mail reject edilmelidir.
~ (SoftFail) : Neutral ile Fail arasında bir sonuç olarak düşünülebilir. Mesajlar genellikle kabul edilir, fakat etiketlenir.
? (Neutral) : Hiçbiri gibi düşünülebilir. Bir politika olmadığını belirtir.

SPF kaydı oluşturulurken, genellikle yetkilendirdiğimiz mekanizmalar öncesinde + (Pass) kullanırız, ancak bunu zaten varsayılan değer olduğu için yazmamıza gerek yoktur. Yine “genellikle” oluşturduğumuz SPF kaydı içerisinde denetlenmesini istediğimiz mekanizmaları sırayla kullanır, son olarak -all ile bitiririz. Bu da, mekanizmaların hiç birisi ile eşleşmiyorsa, geri kalan herşeyi Fail et anlamına gelir.

Bunları birazdan mekanizmalarla birlikte örneklendirdiğimizde daha rahat anlaşılacağını düşünüyorum.

Şu ana kadar gördüğümüz versiyon bilgisi, all mekanizması ve – (Fail) niteleyicisini bir örnekte kullanalım.

v=spf1 -all

Yukarıdaki örnek, bu alan adının hiçbir şekilde mail göndermediğini gösterir. Versiyon bilgisinden sonra kontrol edilebilecek bir mekanizma yer almaz ve burada yer almayan tüm herşeyi belirten all mekanizması için – (Fail) niteleyicisi kullanılmıştır. Yani burada yer almayan hiç bir sunucudan mail gönderilemez.

Eğer aynı örneği şu şekilde yazsaydık

v=spf1 +all

Bu durumda bu alan adı için mail gönderme yetkisi tanımlanmamıştır, ancak burada yer almayan tüm herşey için + (Pass) niteleyicisi kullanıldığından dünya üzerindeki tüm sunuculardan bu domain adına mail gönderilebilir.

Şimdi biraz mekanizmalardan bahsedelim.

SPF içerisinde kullanılmak üzere 8 mekanizma tanımlanmıştır.

all : İlki, biraz önce yukarıda bahsettiğimiz ve tüm SPF kayıtlarının sonunda yer alan all mekanizmasıdır. Kayıt içerisinde yer alan mekanizmaların dışında kalan tüm herşeyi ifade eder ve kendisinden önce kullanılan niteleyici ile birlikte ne yapılacağını belirtir. Buna ilişkin örneği yukarıda vermiştik.

A : Etki alanı için tüm A kayıtları test edilir. İstemci IP’si aralarında bulunursa, bu mekanizma eşleşir. Bağlantı IPv6 üzerinden yapılırsa, bunun yerine bir AAAA araması gerçekleştirilir. Yani, eğer maili gönderen domainin DNS kayıtlarında maili gönderen sunucunun IP si ile eşleşen bir host kaydı mevcutsa bu mekanizma eşleşir.

IP4 : IPv4 aralığı ile eşleşir. Yani maili gönderen sunucunun IP adresi, burada belirtilen IP aralığındaysa eşleşir. Eğer network belirtilmemişse değer varsayılan olarak /32 yani sadece IP adresinin kendisidir.

IP6 : IP6 mekanizmasının argümanı bir IPv6 ağ aralığıdır.

MX : Eğer maili gönderen alan adı bir MX kaydına sahipse, bu MX kaydı çözülür ve gönderen IP ile eşleşmesi beklenir.

PTR : Bu mekanizma IP için Reverse DNS kaydının var olup olmadığını arar. PTR bir hostname’i çözümlemenin tersidir. PTR sorgusunda bir IP adresinin hostname i çözümlenir: Örneğin 1.2.3.4 IP adresi Reverse DNS kaydı çözümlendiğinde sunucu.sistemyoneticisi.com döndüğünü varsayalım. Sonra sistemyoneticisi.com içerisinde bu IP ile eşleşen bir hostname olup olmadığı sırayla tüm kayıtlar ve subdomain kayıtları ile birlikte aranır. IP adresi bulunursa bu mekanizma eşleşir. Çok yavaş çalışır ve DDoS atak ile benzer bir davranış sergiler. Bu nedenle kullanılması zorunlu değilse kullanımı önerilmez

EXIST : Maili gönderen etki alanında bir A kaydı arar ve eğer sonuç dönerse, dönen değer ne olursa olsun eşleştirir. Yani bir anlamda domainin var olması ve içerisinde herhangi bir host kaydı bulunması eşleşme için yeterlidir.

INCLUDE : Bu mekanizma, maili gönderen IP adresinin include ile belirtilen domaine ait spf kayırları ile match edip etmediğini kontrol eder. Eğer match ederse Pass döner, eğer belirtilen domain için geçerli bir spf eşleşmesi bulunmazsa PermError döner. Çoğu mail sistemi PermError döndüğünde maili reject eder.
Bunu biraz daha açalım. Exchange online kullanan bir domainin mailleri Microsoft’un spf.protection.outlook.com subdomanininde yer alan spf kaydındaki IP lerden herhangi birisinden gönderiliyor olabilir. Böyle bir domainin spf kaydında “v=spf1 include:spf.protection.outlook.com -all” değeri yer alır. Bu tam olarak spf.protection.outlook.com un spf kayıtlarında yer alan tüm IP lerden mail gönderiminde eşleşen, mail farklı bir IP den gönderilirse PermError dönen bir mekanizmadır.

Bir SPF sorgusu sonucunda aşağıdaki sonuçlardan birisi elde edilir.

SonuçAçıklamaAmaçlanan Eylem
PassSPF kaydı, sunucunun mail gönderme yetkisi olduğunu belirtir.Maili kabul et
FailSPF kaydı, sunucunun mail gönderme yetkisi olmadığını belirtir.Maili reddet
SoftFailSPF kaydı, sunucunun mail gönderme yetkisi olmadığını belirtir, ancak geçişine izin verilmesini önerirMaili kabul et, fakat işaretle
NeutralSPF kaydı, sunucunun mail gönderme yetkisi olup olmadığını kesin olarak söylemezMaili kabul et
NoneAlan adının bir SPF kaydı bulunmuyor veya mevcut kayıt değerlendirilebilecek bir sonuç içermiyorMaili kabul et
PermErrorKalıcı bir hata oluştu (Yanlış biçimlendirilmiş bir SPF kaydı)Belirtilmemiş
TempErrorGeçici bir hata oluştuMaili kabul et veya maili reddet

Şimdi birkaç örnek daha inceleyelim.

v=spf1 a mx include:sistemyoneticisi.com ~all
v=spf1 +a +mx +include:sistemyoneticisi.com ~all

Yukarıdaki her iki örnek aynı sonucu verir. Öncelikle kayıt v=spf1 ile başlar. Sonrasındaki a mekanizması maili gönderen sunucunun domainindeki A kayıtlarını tarayarak IP adresinin herhangi bir A kaydı ile eşleşip eşleşmediğine bakar. Eğer herhangi bir host maili gönderen IP adresi ile eşleşirse mekanizma Pass verir.

mx mekanizması, bir etki alanının çok sayıda mx kaydına sahip olması durumunda bunların teker teker listelenmesine gerek kalmaması için kullanılır. maili gönderen etki alanının MX kayıtları kontrol edilir ve maili gönderen IP bu kayıtlardan birisi ile eşleşiyorsa mekanizma Pass verir.

include:sistemyoneticisi.com ile sistemyoneticisi.com domaininin spf kayıtları kontrol edilir ve maili gönderen IP adresi bu kayıtlarla match ediyorsa mekanizma Pass verir. Bu kullanım, sistemyoneticisi.com alan adının SPF kayıtlarında yer alan sunucuların sizin domanininiz adına mail göndermesine izin vermek içindir.

son mekanizmamız ~ (tilde) niteleyicisi ile kullanılan all dur. Bu mekanizma tilde ile kullanıldığı için kendisinden önceki mekanizmalar eşleşmezse diğer herşey için SoftFail verir. Yani gönderdiğiniz maili gönderen sunucu IP si alan adının herhangi bir A kaydında bulunmasa, MX kayıtları ile eşleşmese ve sistemyoneticisi.com spf kayıtları ile uyuşmasa dahi SoftFail verecek ve “genellikle” maili alan sistem tarafından etiketlenerek kabul edilecektir.

Burada ufak bir not ekleyelim. SPF kaydında versiyon bilgisi ve her mekanizma arasında bir boşluk bırakılarak yazılır. Mekanizmalar soldan sağa doğru kontrol edilir ve herhangi bir mekanizma Pass sonucunu verirse geri kalanlara bakmaya gerek yoktur. Eğer en sonuna kadar Pass sonucu elde edilmemişse, son değer olan all mekanizması devreye girer ve burada bulunmayan değerler için ne yapılması gerektiğini belirtir. all mekanizması, daha önce de belirttiğim gibi ~ (tilde) karakteri veya – ile kullanıldığında anlamlıdır. Genellikle de – (False) ile birlikte kullanılır. Diğer iki değer olan + ile kullanılması, diğer herşey için Pass sonucu vereceğinden, ya da ? ile kullanılması, ortada bir SPF kaydı yokmuş gibi davranılmasına neden olacağından teorik olarak kullanımı mümkün olsa da amaca uygun değildir.

Örneklerle devam edelim

v=spf1 mx ~all

Alan adının MX kayıdında yer alan adreslerden mail gönderimine izin verir ve diğerleri için SoftFail döner.

v=spf1 ~all

Bu domain hiç bir IP adresini mail göndermek için yetkilendirmemiştir, ancak herşey için SoftFail sonucunu verir.

v=spf1 +all

Internetteki tüm IP adreslerinden mail gönderebilir. (Bu geçerli bir SPF kaydı bile olsa kesinlikle kullanmayın)

v=spf1 ip4:192.0.1.0/24 ~all

192.168.1.0 ile 192.168.1.255 aralığındaki tüm IP adreslerinden mail gönderebilir. Bunların dışındakilerden SoftFail verir. Bu örnekte eğer sadece IP yazılırsa, tek bir IP adresi yetkili olacaktır. (Varsayılan değer /32 geçerli olur)

v=spf1 ip6:1080::8:800:200C:417A/96 ~all

1080::8:800:0000:0000 ile 1080::8:800:FFFF:FFFF arasndaki Ip adresleri gönderime yetkilidir. Bu aralık dışındaysa SoftFail verir.

Buraya kadar yazdığımız örneklerin konuyu anlamamıza yardımcı olduğunu düşünüyorum.

şimdi örnek birkaç senaryo için SPF kaydı oluşturalım.

Örnek 1 :
ornek1.com domaininden gönderilen maillerin alan adına ait mx kayıtları dışında bir Ip adresinden gönderilmeyeceğini düşünelim. Bu, yoğun şekilde özellikle de toplu mail gönderimi yapan çok büyük organizasyonlar dışındaki yapılar için aslında en yaygın senaryodur. Eğer kendi sunucularımızdan mail gönderiyorsak, mail gönderdiğimiz IP adresleri için birer A kaydı oluşturur, sonrasında bu A kayıtlarını MX kayıtlarına ekleriz. Kaç sunucumuz olursa olsun eğer tümünden hem mail gönderimi yapıyor hem de mail alıyorsak “v=spf1 mx -all” son derece doğru bir kayıttır. Alan adı için geçerli MX kayıtlarından gönderilen mailler Pass sonucunu verir, diğer herşey Fail verir.

Örnek 2 :
Yapımızda mail alan ve mx kayıtları bulunan 4 adet sunucu olduğunu ancak bu sunucular dışında, müşterilerimize otomatik bilgilendirme mailleri gönderen 2 farklı sunucumuz daha olduğunu varsayalım. Bu durumda SPF kaydı içerisinde ip4 mekanızması ile MX kayıtları dışında kalan IP adreslerini belirtmemiz gerekecek. Aşağıdaki örnek bu durum için doğru kayıttır.

v=spf1 ip4:1.2.3.4 ip4:1.2.3.5 mx -all

Yukarıdaki örnekte gördüğünüz gibi IP adresi 1.2.3.4 ve 1.2.3.5 olan sunucular, MX kaydında yer alan sunucularla birlikte yetkilendirilmiştir. Bunların dışındaki IP adreslerinin mail gönderimine ise izin verilmez.

Örnek 3 :
Bir örnek ise global bir banka için verelim. Bir bankanın mail gönderimi yapan sunucu sayısı yüzlerle ifade edilebilir ve sürekli değişen sunucu IP adresleri olabilir. Banka gibi organizasyonlarda, genellikle maillerin gönderildiği sunucular ile alındığı sunucular aynı değildir. bu nedenle mx kayıtları sadece mail alan sunucular için kullanılır ve mail gönderimi yapılan sunucular için, daha önceden belirlenmiş IP blokları atanır. Böyle bir yapıda SPF kaydı aşağıdaki örnekte olduğu gibi olabilir.

v=spf1 ip4:212.12.100.0/24 ip4:78.120.180.16/28 ip4:194.26.138.0/24 ip4:196.80.101.0/24 -all

Yukarıda, 4 farklı IP bloğu verilmiş ve bu blokların içerisinde kalan tüm IP adreslerinden mail gönderimine yetki tanımlanmıştır. Dizilimin sonunda -all verilerek, bu aralıkta olmayan adreslerden gönderim yapılırsa Fail dönmesi sağlanmıştır.

Örnek 4 :
Son olarak şirketimizin Exchange Online kullandığını ancak bunun yanında içerideki bir sunucumuzu da örneğin toplu mail göndermek için kullandığımızı düşünelim. Bu durumda SPF kaydımız aşağıdaki gibi olacaktır.

v=spf1 ip4:1.2.3.4 include:spf.protection.outlook.com -all

Kullanıcılarımızın mail trafiği Exchange online üzerinden geçerken, 1.2.3.4 IP li sunucu üzerinden de toplu maillerimizi yukarıdaki kayıt sayesinde gönderebiliriz.

SPF kaydı oluştururken nelere dikkat etmeliyiz?

SPF kaydı, mail gönderdiğimiz sunucuların tanıtılması içindir. Bu nedenle, mail gönderimi yaptığımız tüm sunucuları SPF kaydında bulundurmamız gerektiğini, bunu yaparken de olabildiğince az mekanizma kullanmamız gerektiğini unutmayalım. Bir çok MX kaydımız varsa örneğin bunları tek tek yazmak yerine mx mekanizmasını yapılandırmak en doğru yöntemdir.

PTR kaydı, önerilmez. Zorunlu olmadıkça kullanmayalım.

Mekanizmalarda, özellikle all mekanizmasında ~ (tilde) veya ? veya + kullanmak kaydın işlevini azaltacak ve istenilen sonucu vermeyecektir. bu nedenle – niteleyicisini kullanmak istediğimiz sonucu almamız için daha doğru olacaktır.

DNS üzerinde SPF kaydını oluşturmak

Kendi yapımıza uygun şekilde oluşturduğumuz SPF kaydını artık kullanmaya başlayalım. Bunun için DNS üzerinde bir TXT kaydı girmemiz gerekiyor.

Bunun için DNS bölgesine geçip yeni kayıt oluştur diyerek türünü TXT seçmelisiniz ve değer kısmına SPF kaydınızı girmelisiniz.

DNS kayıtlarındaki TTL değeri Time To Live anlamına gelir ve kaydın DNS cache inde ne kadar süreyle tutulacağını saniye cinsinden belirtir. Bu değeri değiştirmenize gerek yoktur.

SPF konfigürasyonunuzu test etmek için

Yaptığınız SPF kaydını test etmek için https://mxtoolbox.com/spf.aspx adresine giderek domain name bölümüne alan adınızı girin. Öncelikle sadece bu kısmı doldurarak SPF Record Lookup butonuna tıklayın. SPF konfigürasyonunuzu test edip hatalı olan bir bölüm varsa size gösterecektir. Ardından aynı işlemi alan adınızla birlikte mail gönderdiğiniz sunucunun IP adresini de girerek yineleyin. Bu şekilde girdiğiniz IP adresinden gönderilen maillerin SPF sonucunu görebilirsiniz.

Was this article helpful?

Related Articles

Leave A Comment?

You must be logged in to post a comment.