Tüm yazılar

SPF, DKIM, DMARC: tek seferde doğru kurulum rehberi

E-posta kimlik doğrulamasının üç temeli için adım adım kurulum. DNS örnekleri, alignment kontrolü, monitoring'den enforcement'a kademeli geçiş.

E-posta kimlik doğrulamasının üç temel yapı taşı — SPF, DKIM ve DMARC — kurumsal gönderim için artık opsiyonel değil. Şubat 2024’ten beri 5.000+ mail/gün gönderen senderlardan büyük tüketici mailbox sağlayıcıları üçünün de doğrulanmış olmasını şart koşuyor. Bu rehberde her birini sıfırdan, DNS örnekleriyle kuralım.

1. SPF — gönderici sunucu doğrulama

SPF (Sender Policy Framework, RFC 7208), domain’inin adına hangi sunucuların mail gönderebileceğini DNS’te bir TXT kaydında listeler. Alıcı sunucu, gelen mail’in IP’sinin bu listede olup olmadığını kontrol eder.

DNS kaydı

example.com.  TXT  "v=spf1 include:_spf.your-esp.com ~all"

Önemli noktalar:

  • include: — ESP’nin (Sendnomi dahil) önerdiği include’u kullanın. Birden fazla varsa zincirleyebilirsiniz, ama 10 DNS lookup sınırına dikkat.
  • ~all (softfail) — ilk başta. Tamamen güvendikten sonra -all (hardfail) yapın.
  • Subdomain’ler için ayrı SPF gerekebilir; özellikle mail.example.com üzerinden farklı bir ESP kullanıyorsanız.

Yaygın hatalar

  • DNS lookup sınırı: SPF’in maksimum 10 mekanizma çözümlemesine izin verir. Birden fazla include: çağrısı bu limiti aşabilir. dig +short example.com TXT ile mevcut SPF’i kontrol edin, gerekirse flatten edin.
  • Birden fazla SPF kaydı: Aynı domain üzerinde iki SPF TXT kaydı varsa, RFC’ye göre tümü permerror sayılır. Tek satıra birleştirin.

2. DKIM — mesaj imzalama

DKIM (DomainKeys Identified Mail, RFC 6376), gönderdiğin her mailin başlığına özel anahtarınla bir dijital imza ekler. Alıcı sunucu, DNS’teki açık anahtarınla bu imzayı doğrular.

Anahtar üretimi (ESP yapıyorsa atla)

# Kendi sunucundan gönderiyorsan
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -outform DER | openssl base64 -A > public.txt

DNS kaydı

selector1._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."

Selector seçimi:

  • selector1, mail, s1 gibi kısa ve okunabilir bir selector kullanın.
  • Rotation için ikinci bir selector (selector2._domainkey) hazırda tutun; key rotation 6-12 ayda bir önerilir.

Modern hardening — dual-sign

RSA + Ed25519 çifte imza, eski uyum + yeni güvenlik dengesi sağlar:

selector1._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=..."        # RSA 2048
selector2._domainkey.example.com.  TXT  "v=DKIM1; k=ed25519; p=..."    # Ed25519

Mail’in iki ayrı DKIM-Signature header’ı taşır; alıcı en güçlüsünü tercih eder.

3. DMARC — alignment + politika

DMARC (RFC 7489), SPF ve DKIM sonuçlarını birleştirir, alignment kontrolü yapar ve başarısız olursa alıcının ne yapacağını belirler (none, quarantine, reject).

Alignment nedir?

SPF/DKIM teknik olarak geçmiş olabilir, ama From: header’daki domain ile uyumsuzsa DMARC fail olur. Bu, e-posta forgery’nin en büyük kapısını kapatır.

DNS kaydı — kademeli yaklaşım

Adım 1 — Monitoring (p=none):

_dmarc.example.com.  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]; pct=100"

2-4 hafta rua raporlarını izleyin. Hangi 3rd-party servisler domain’inizden mail gönderiyor? Hangileri SPF/DKIM doğrulamasından geçemiyor?

Adım 2 — Quarantine (p=quarantine):

_dmarc.example.com.  TXT  "v=DMARC1; p=quarantine; pct=10; rua=mailto:[email protected]"

Önce pct=10 ile başlayın — yalnızca %10 başarısız mail spam’a düşer. Hafta hafta artırın (25 → 50 → 100).

Adım 3 — Reject (p=reject):

_dmarc.example.com.  TXT  "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; adkim=s; aspf=s"

adkim=s; aspf=s strict alignment — From: ile DKIM/SPF domain’i tam eşleşmeli (subdomain’i ekstra koruma). ruf= forensic raporları (gerçek mail örnekleri) için; her receiver yollamaz.

DMARC rapor analizi

rua= adresine gelen XML raporları manuel okumak zordur. Sendnomi panelinde otomatik parse + görselleştirme var (Pazarlama → DMARC Reports). Açık kaynak alternatifler: dmarc-analyzer, parsedmarc.

Sık yapılan hatalar

  1. DMARC’ı doğrudan p=reject ile başlatmak — meşru 3rd-party servisleriniz (CRM, ATS, fatura yazılımı) bir gün durur. Önce monitoring, sonra kademeli geçiş.
  2. SPF’i 10 lookup limitini aşacak şekilde include zincirlemek — permerror sonucu vermesin diye flatten kullanın.
  3. DKIM selector’ı rotate etmemek — 6-12 aylık rotation iyi pratiktir. Old selector’ı 30 gün daha aktif bırakın, sonra DNS’ten kaldırın.
  4. subdomain’ler için ayrı DMARC olmamasısp= (subdomain policy) ile ana domain’in farklı bir politikası olabilir. Boş ise p= kullanılır.

Kontrol listesi

  • SPF kaydı: tek satır, ~10 mekanizma altında
  • DKIM: en az bir 2048-bit RSA selector aktif
  • DKIM dual-sign (RSA + Ed25519) — opsiyonel ama önerilir
  • DMARC monitoring (p=none) en az 2 hafta
  • DMARC raporlarını okuyan parse aracı (panel veya 3rd-party)
  • Kademeli geçiş: none → quarantine pct=10 → 100 → reject
  • Subdomain için sp= veya ayrı _dmarc.sub.example.com

Mail-skoru testimizden geçen 26 kontrolün ilk 3’ü tam olarak bu üç standardı ölçer. Test edin →

— Yazılım Koçu