$ man spf-dkim-dmarc

SPF, DKIM ve DMARC

SPF, DKIM ve DMARC, bir alan adı adına gönderilen e-postaların gerçekten yetkili kaynaklardan geldiğini doğrulamak için DNS'te TXT kaydı olarak yayınlanan üç tamamlayıcı mekanizmadır. SPF gönderen sunucuyu, DKIM mesajın bütünlüğünü doğrular; DMARC ise bu ikisini kullanıcının gördüğü "From" adresine bağlar ve başarısız mesajlar için bir politika belirler.

Neden gerekli?

SMTP protokolü, gönderenin kimliğini doğrulamadan tasarlanmıştır; herhangi bir sunucu herhangi bir alan adı adına e-posta göndermeye çalışabilir. Bu üç mekanizma, alıcı sunucuların sahte (spoofed) mesajları ayırt etmesini sağlar. Bugün büyük e-posta sağlayıcılarının önemli bir kısmı, yoğun gönderim yapan alan adlarından bu kayıtları beklemektedir; eksik veya hatalı yapılandırma, meşru e-postaların spam klasörüne düşmesine ya da reddedilmesine yol açabilir.

SPF (Sender Policy Framework)

SPF (RFC 7208), bir alan adı adına hangi IP adreslerinin e-posta gönderebileceğini listeler. Alıcı sunucu, SMTP oturumundaki zarf göndereni (MAIL FROM, mesajda genellikle Return-Path olarak görünür) alan adının SPF kaydını sorgular ve bağlanan IP'nin listede olup olmadığını kontrol eder.

example.com.  3600  IN  TXT  "v=spf1 ip4:192.0.2.0/24 ip6:2001:db8::/32 mx include:_spf.example.net -all"

$ dig +short example.com TXT

Kayıt soldan sağa değerlendirilir ve ilk eşleşen mekanizma sonucu belirler:

Mekanizmaların önündeki niteleyiciler sonucu belirler: + (pass, varsayılan), - (fail), ~ (softfail), ? (neutral). -all listede olmayan her şeyin reddedilmesini, ~all şüpheli kabul edilmesini ister.

10 DNS sorgusu sınırı

RFC 7208, bir SPF değerlendirmesi sırasında DNS sorgusu gerektiren mekanizma ve değiştiricilerin toplamda 10'u aşamayacağını belirtir. include, a, mx, ptr, exists ve redirect bu sayıma dahildir; iç içe include'lardakiler de sayılır. ip4, ip6 ve all sorgu gerektirmez. Sınır aşıldığında sonuç permerror olur ve SPF fiilen çalışmaz. Ayrıca boş sonuç dönen sorgular (void lookup) için de 2 ile sınırlandırma önerilir.

Sık yapılan diğer hatalar:

DKIM (DomainKeys Identified Mail)

DKIM (RFC 6376), gönderen sunucunun mesajın belirli başlıklarını ve gövdesini özel anahtarla imzalamasını sağlar. İmza, mesaja DKIM-Signature başlığı olarak eklenir. Alıcı, başlıktaki d= (imzalayan alan adı) ve s= (selector) değerlerinden açık anahtarın DNS'teki yerini bulur ve imzayı doğrular.

; mesaj başlığında
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mail2026; ...

; DNS'te: <selector>._domainkey.<alan adı>
mail2026._domainkey.example.com.  3600  IN  TXT  ( "v=DKIM1; k=rsa; "
        "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )

$ dig +short mail2026._domainkey.example.com TXT

Selector yapısı, aynı alan adında birden çok anahtar kullanılmasına izin verir. Örneğin her e-posta hizmeti kendi selector'ını kullanabilir; anahtar rotasyonunda yeni selector yayınlanır, imzalama ona geçirilir ve eski anahtar bir süre sonra kaldırılır.

DKIM, SPF'in aksine yönlendirmeden genellikle etkilenmez; çünkü imza mesajın kendisiyle birlikte taşınır. Ancak aradaki bir sistem imzalanmış başlıkları veya gövdeyi değiştirirse (ör. posta listesi altbilgi eklerse) imza geçersiz olur.

Sık hatalar: 255 bayttan uzun anahtarı tek bir dize olarak girmeye çalışmak; anahtar kopyalanırken boşluk veya satır sonu eklenmesi; hizmet sağlayıcısının verdiği CNAME tabanlı DKIM kayıtlarını TXT olarak girmek.

DMARC

DMARC (RFC 7489), SPF ve DKIM sonuçlarını mesajın From: başlığındaki alan adına bağlar, başarısız mesajlar için alıcıya bir politika bildirir ve raporlama sağlar. Kayıt _dmarc alt alan adında yayınlanır:

_dmarc.example.com.  3600  IN  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]; adkim=r; aspf=r"

$ dig +short _dmarc.example.com TXT

Temel etiketler:

Hizalama (alignment)

DMARC'ın kilit kavramı hizalamadır. Bir mesajın DMARC'tan geçmesi için SPF veya DKIM'den en az birinin hem geçmesi hem de hizalı olması gerekir:

Relaxed modda aynı organizasyonel alan adı yeterlidir (mail.example.com ile example.com hizalı sayılır); strict modda tam eşleşme gerekir. Üçüncü taraf bir hizmet kendi alan adıyla imzalıyor ve kendi bounce adresini kullanıyorsa SPF ve DKIM geçse bile DMARC başarısız olur. Bu yüzden hizmetlerde özel alan adı ile DKIM imzalamayı etkinleştirmek önemlidir.

p=none'dan p=reject'e kademeli geçiş

  1. p=none ile başlayın ve rua adresi tanımlayın. Bu aşamada hiçbir mesaj etkilenmez; yalnızca rapor toplanır.
  2. Raporları inceleyin. Alan adınız adına e-posta gönderen tüm meşru kaynakları (CRM, fatura sistemi, bülten aracı vb.) belirleyin ve her biri için SPF ve hizalı DKIM yapılandırın.
  3. p=quarantine'e geçin, gerekirse pct ile düşük bir oranla başlayıp kademeli artırın. Başarısız mesajlar spam klasörüne yönlendirilir.
  4. p=reject'e geçin. Hizalı doğrulamadan geçemeyen mesajlar reddedilir.

Raporlar incelenmeden doğrudan p=reject'e geçmek, unutulmuş bir gönderim kaynağının tüm e-postalarının kaybolmasına neden olabilir.

Özet

Bir alan adının WHOIS/RDAP kaydını ve durum kodlarını gör.

whois sorgula →