Blog

Tips, guides, and privacy advice

← Back to Blog
Rehber

SPF, DKIM ve DMARC Sade Bir Dille (Örneklerle)

Yazan: Khaja Hussain·15 Ekim 2026·7 min read

E-postanın bunlara neden ihtiyacı var

E-postayla ilgili rahatsız edici gerçek şu: 1980'lerin başında, birbirine güvenen küçük bir insan ağı için tasarlandı. Varsayılan hâliyle herkes [email protected] adresinden geliyormuş gibi görünen bir e-posta gönderebilir. Temel protokolde bunu engelleyen hiçbir şey yok.

SPF, DKIM ve DMARC bunu düzeltmek için sonradan eklendi. Birlikte, alıcı tarafın (Gmail, Outlook ya da Yahoo gibi) tek bir soruyu yanıtlamasını sağlarlar: bu e-posta gerçekten iddia ettiği alan adından mı geliyor? Cevap hayırsa e-posta spam klasörüne gider ya da reddedilir. Kendi alan adında bunlar kurulu değilse, gerçek e-postaların da sahteymiş gibi muamele görebilir.

Kısa bir benzetme işe yarar:

  • SPF davetli listesidir: alan adın adına hangi sunucuların e-posta göndermesine izin verildiğini söyler.
  • DKIM mühür mumudur: e-postanın yolda değiştirilmediğini kanıtlayan bir imza.
  • DMARC kapıdaki görevliye verilen talimatlardır: bir e-posta kontrollerden geçemezse ne yapılacağı ve bunun kime bildirileceği.

SPF: davetli listesi

SPF (Sender Policy Framework), alan adının DNS'inde yayınladığın tek satırlık bir metindir. Senin adına e-posta göndermesine izin verilen sunucuları ve servisleri listeler. Gmail alan adından bir e-posta aldığında bu listeye bakar ve e-postayı gönderen sunucunun listede olup olmadığını kontrol eder.

Tipik bir SPF kaydı şöyle görünür:

v=spf1 include:_spf.google.com include:sendgrid.net ~all

Soldan sağa okuyalım:

  • v=spf1: “bu bir SPF kaydıdır”.
  • include:_spf.google.com: Google Workspace benim adıma gönderebilir.
  • include:sendgrid.net: SendGrid de gönderebilir (diyelim ki uygulamamın e-postaları için).
  • ~all: geri kalan her şey muhtemelen ben değilim, yani şüpheyle yaklaş. (-all ise “kesinlikle ben değilim, reddet” demektir.)
En yaygın iki SPF hatası: aynı alan adında iki SPF kaydı olması (bunları tek satırda birleştirmen gerekir) ve bir servisi unutmak. Bülten aracın ya da destek sistemin senin alan adınla e-posta gönderiyorsa, onun da listede olması gerekir.

Bir de tek bir SPF kaydı içinde en fazla 10 DNS sorgusu sınırı var. Her include: sayılır, onların içindeki include'lar da. Çok sayıda servis kullanıyorsan fark etmeden bu sınıra takılabilirsin ve o zaman SPF herkes için başarısız olur.

DKIM: mühür mumu

SPF bir e-postanın nereden geldiğini kontrol eder. DKIM (DomainKeys Identified Mail) ise e-postanın kendisiyle oynanmadığını kontrol eder. E-posta servisin giden her mesajı yalnızca kendisinin bildiği özel bir anahtarla imzalar. Eşleşen açık anahtarı sen DNS'inde yayınlarsın. Alıcı sunucu da imzayı bu açık anahtarla kontrol eder.

Biri e-postayı yolda değiştirirse, gövdedeki tek bir kelimeyi bile, imza artık tutmaz. Eski bir mektubun mühür mumu gibi düşün: mühür kırılmışsa, birinin mektubu açtığını anlarsın.

DKIM kaydı özel bir adda yayınlanır, örneğin google._domainkey.yourdomain.com, ve değeri kabaca şöyle görünür:

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1...

İyi haber: bunu asla kendin yazmıyorsun. E-posta sağlayıcın oluşturur, sen sadece DNS'ine kopyalarsın. ._domainkey öncesindeki kelimeye (burada google) seçici (selector) denir. Bu sadece her servis için bir tane olmak üzere birden fazla anahtar kullanabilmeni sağlar.

DMARC: kapıdaki görevliye talimatlar

SPF ve DKIM alıcı sunucuya gerçekleri verir. DMARC (Domain-based Message Authentication, Reporting and Conformance) ise o gerçeklerle ne yapılacağını söyler. Ayrıca hizalama (alignment) adında önemli bir kural ekler: SPF ya da DKIM'den geçen alan adı, okuyucunun “Kimden” satırında gördüğü alan adıyla aynı olmalıdır. Bu kural olmasaydı, bir dolandırıcı kendi alan adıyla SPF'ten geçip ekranda seninkini gösterebilirdi.

DMARC kaydı _dmarc.yourdomain.com adresinde bulunur ve şöyle görünür:

v=DMARC1; p=none; rua=mailto:[email protected]
  • p=none: sadece izle, henüz hiçbir şeyi engelleme. Başlangıç için ideal.
  • p=quarantine: kontrolden geçemeyen e-postaları spam klasörüne gönder.
  • p=reject: kontrolden geçemeyen e-postaları tamamen reddet. En güçlü koruma.
  • rua=mailto:...: alıcıların günlük özet raporlarını sana nereye göndereceği.

O raporlar gizli hazinedir. Alan adını kullanarak e-posta gönderen her sunucuyu gösterirler: unuttuğun servisleri de, senin kılığına girmeye çalışan herkesi de.

Adım adım kurulum

Diyelim ki myshop.com alan adı senin, posta kutun için Google Workspace, sipariş onayları için de SendGrid ya da Mailgun gibi bir servis kullanıyorsun. Ben şu sırayla yapardım:

  1. Alan adın adına e-posta gönderen her şeyi listele: posta sağlayıcın, web siten ya da uygulaman, bülten aracın, destek sistemin, faturalama yazılımın. İnsanların atladığı adım bu ve sonradan en çok soruna yol açan da bu.
  2. Tek bir SPF kaydı oluştur: DNS'inde (myshop.com üzerinde bir TXT kaydı) hepsini içeren ve ~all ile biten bir kayıt.
  3. Her serviste DKIM'i aç. Her biri sana DNS'e kopyalaman için bir kayıt verir. Sonra o serviste “doğrula” ya da “kimlik doğrulamayı başlat” butonuna bas.
  4. p=none ile bir DMARC kaydı ekle: bir rapor adresiyle birlikte, _dmarc.myshop.com üzerinde.
  5. Bir iki hafta bekle ve raporları oku. Başarısız olan meşru her şeyi düzelt.
  6. Politikayı sıkılaştır: tüm gerçek e-postalarının geçtiğinden emin olunca önce p=quarantine, sonra p=reject yap.
DNS değişikliklerinin her yere yayılması birkaç dakikadan birkaç saate kadar sürebilir. Bir kaydı ekledikten hemen sonra kontrol başarısız olursa, bir şeyi değiştirmeden önce biraz zaman tanı.

Gelen herhangi bir e-postada nasıl kontrol edilir

Hiçbir araca ihtiyacın yok. E-posta uygulaman sonuçları zaten gösteriyor:

  • Gmail: e-postayı aç, üç noktaya tıkla, sonra Orijinali göster'e tıkla. En üstte SPF: PASS, DKIM: PASS ve DMARC: PASS gibi satırlar göreceksin.
  • Outlook: iletiyi aç, sonra View ve View message details (ya da Message source) seçeneğine git ve Authentication-Results başlığını ara.
  • Apple Mail: View, sonra Message, sonra All Headers.

Gerçek bir başlık aşağı yukarı şöyle görünür:

Authentication-Results: mx.google.com;
  dkim=pass header.d=myshop.com;
  spf=pass smtp.mailfrom=myshop.com;
  dmarc=pass (p=QUARANTINE) header.from=myshop.com

Üç “pass” ve eşleşen alan adları: bu e-posta gerçek. fail görürsen ya da alan adları gördüğün gönderenle uyuşmuyorsa dikkatli ol. Bu, phishing e-postasını nasıl anlarsın yazısında anlattığım uyarı işaretlerinden biri.

Kendi alan adını kuruyorsan, hızlı bir test yolu şu: bir geçici gelen kutusuna ve bir Gmail adresine e-posta gönder, sonra Gmail'deki kopyanın başlıklarına bak. İki dakika sürer ve dış dünyanın tam olarak ne gördüğünü gösterir.

Sık görülen sorunlar ve hızlı çözümler

  • “SPF: softfail” ya da “neutral”: e-postayı gönderen sunucu SPF kaydında yok. Servisi, sana verdiği include: ile ekle.
  • “SPF permerror”: genelde iki SPF kaydı ya da 10'dan fazla sorgu demektir. Tek kayıtta birleştir ve artık kullanmadığın servisleri çıkar.
  • Bir şablonu düzenledikten sonra “DKIM: fail”: bir şey e-postayı imzalandıktan sonra yeniden yazmış (bazı yönlendirme servisleri ve e-posta altbilgileri bunu yapar). Doğrudan gönder ve tekrar test et.
  • SPF geçtiği hâlde DMARC başarısız: sorun hizalama. SPF senin alan adın için değil, gönderim servisinin alan adı için geçmiş. O serviste kendi alan adınla DKIM'i aç ya da özel bir return-path alan adı ayarla.
  • Her şey geçtiği hâlde e-postalar hâlâ spam'e düşüyor: kimlik doğrulama kim olduğunu kanıtlar, insanların e-postanı istediğini değil. İçerik, gönderim itibarı ve şikâyet oranları da önemlidir. Bunu uygulama e-postaları neden spam'e düşer yazısında daha ayrıntılı anlattım.

Gerçekten üçüne de ihtiyacın var mı?

Evet. 2024'ten beri Gmail ve Yahoo, yüksek hacimde e-posta gönderen herkesten SPF, DKIM ve bir DMARC kaydı istiyor. Küçük göndericiler bile üçü yerindeyken çok daha iyi teslim oranı alıyor. Daha da önemlisi, dolandırıcıların senin adına kendi müşterilerine sahte e-posta göndermesini durduran şey p=reject ayarlı DMARC'tır.

Kurulum bir öğleden sonranı alır. Ondan sonra alan adını her gün sessizce korur. Bir alan adın varsa ve bunu erteleyip duruyorsan, işte işaretin bu. Bugün p=none ile başla. Sıkılaştırmaya sonra da vakit var.