Ana içeriğe geç
Kategoriye Dön

SPF, DKIM ve DMARC Yapılandırması

E-posta gönderim güvenliğini artırmak için SPF kaydı oluşturma, DKIM imzalama, DMARC politikası belirleme, DNS kayıtları yapılandırma ve test araçları rehberi.

Okuma süresi: 15 dk E-posta
spfdkimdmarce-postadnsgüvenlikmail

İçindekiler

Giriş

E-posta gönderiminde güvenilirlik ve teslim edilebilirlik, doğru DNS yapılandırmasına bağlıdır. SPF (Sender Policy Framework), DKIM (DomainKeys Identified Mail) ve DMARC (Domain-based Message Authentication, Reporting & Conformance) protokolleri, e-postalarınızın spam klasörüne düşmesini önler ve domain sahteciliğine (spoofing) karşı koruma sağlar.

Bu rehberde, REXE sunucunuzda e-posta gönderim altyapınızı güvenli hale getirmek için SPF, DKIM ve DMARC kayıtlarını adım adım yapılandıracağız.

SPF (Sender Policy Framework) Nedir?

SPF, domain adınız adına e-posta göndermeye yetkili sunucuları tanımlayan bir DNS kaydıdır. Alıcı mail sunucusu, gelen e-postanın SPF kaydında belirtilen IP adreslerinden gelip gelmediğini kontrol eder.

SPF Kaydı Oluşturma

DNS yönetim panelinizde TXT kaydı olarak ekleyin:

hljs dns
@ IN TXT "v=spf1 ip4:SUNUCU_IP_ADRESI -all"

Birden fazla sunucu kullanıyorsanız:

hljs dns
@ IN TXT "v=spf1 ip4:IP_ADRESI_1 ip4:IP_ADRESI_2 include:_spf.google.com -all"

SPF Mekanizmaları

MekanizmaAçıklama
ip4:Belirli IPv4 adresi veya CIDR bloğu
ip6:Belirli IPv6 adresi veya CIDR bloğu
include:Başka bir domain'in SPF kaydını dahil et
aDomain'in A kaydındaki IP'ye izin ver
mxDomain'in MX kaydındaki sunuculara izin ver
allTüm diğer kaynaklar için politika

SPF Niteleyicileri

+all  → Pass (tümüne izin ver — ÖNERİLMEZ)
~all  → SoftFail (izin verilmeyenleri işaretle ama reddetme)
-all  → Fail (izin verilmeyenleri reddet — ÖNERİLİR)
?all  → Neutral (nötr — kontrol yapma)

SPF kaydında mutlaka -all veya en az ~all kullanın. +all kullanmak domain'inizi spoofing'e açık bırakır.

SPF Kaydını Test Etme

hljs bash
# dig ile SPF kaydını sorgulama
dig TXT ornekdomain.com +short

# nslookup ile sorgulama
nslookup -type=TXT ornekdomain.com

Online araçlar:

DKIM (DomainKeys Identified Mail) Nedir?

DKIM, gönderilen e-postalara dijital imza ekleyerek mesajın iletim sırasında değiştirilmediğini doğrulayan bir protokoldür. Gönderen sunucu özel anahtar (private key) ile imzalar, alıcı sunucu DNS'teki genel anahtar (public key) ile doğrular.

DKIM Anahtar Çifti Oluşturma

OpenSSL ile 2048-bit RSA anahtar çifti oluşturun:

hljs bash
# Özel anahtar oluşturma
openssl genrsa -out dkim_private.pem 2048

# Genel anahtarı çıkarma
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

# Genel anahtarı DNS formatına dönüştürme
cat dkim_public.pem | grep -v '^-' | tr -d '\n'

Postfix ile DKIM Yapılandırması (OpenDKIM)

OpenDKIM kurulumu:

hljs bash
sudo apt update
sudo apt install opendkim opendkim-tools -y

Anahtar oluşturma:

hljs bash
sudo mkdir -p /etc/opendkim/keys/ornekdomain.com
sudo opendkim-genkey -b 2048 -d ornekdomain.com -D /etc/opendkim/keys/ornekdomain.com -s default -v
sudo chown -R opendkim:opendkim /etc/opendkim

OpenDKIM yapılandırma dosyası (/etc/opendkim.conf):

hljs conf
AutoRestart             Yes
AutoRestartRate         10/1h
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no

OversignHeaders         From

KeyTable                refile:/etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table
ExternalIgnoreList      /etc/opendkim/trusted.hosts
InternalHosts           /etc/opendkim/trusted.hosts

Socket                  inet:8891@localhost

Key table dosyası (/etc/opendkim/key.table):

default._domainkey.ornekdomain.com ornekdomain.com:default:/etc/opendkim/keys/ornekdomain.com/default.private

Signing table dosyası (/etc/opendkim/signing.table):

*@ornekdomain.com default._domainkey.ornekdomain.com

Trusted hosts dosyası (/etc/opendkim/trusted.hosts):

127.0.0.1
localhost
ornekdomain.com

DKIM DNS Kaydı Ekleme

Oluşturulan genel anahtarı DNS'e TXT kaydı olarak ekleyin:

hljs dns
default._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhki...(GENEL_ANAHTAR)..."

DKIM anahtarı 2048-bit olmalıdır. 1024-bit anahtarlar artık güvenli kabul edilmemektedir.

Postfix Entegrasyonu

Postfix yapılandırmasına (/etc/postfix/main.cf) ekleyin:

hljs conf
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters

Servisleri yeniden başlatın:

hljs bash
sudo systemctl restart opendkim
sudo systemctl restart postfix

DKIM Kaydını Test Etme

hljs bash
# DNS'ten DKIM kaydını sorgulama
dig TXT default._domainkey.ornekdomain.com +short

# OpenDKIM test aracı
opendkim-testkey -d ornekdomain.com -s default -vvv

DMARC (Domain-based Message Authentication) Nedir?

DMARC, SPF ve DKIM sonuçlarını birleştirerek domain sahibine e-posta doğrulama politikası belirleme ve raporlama imkanı sunar. Alıcı sunucu, SPF veya DKIM doğrulaması başarısız olan e-postalar için DMARC politikasına göre hareket eder.

DMARC Kaydı Oluşturma

DNS'e TXT kaydı olarak ekleyin:

hljs dns
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@ornekdomain.com; ruf=mailto:dmarc-forensic@ornekdomain.com; fo=1; adkim=r; aspf=r; pct=100"

DMARC Politika Seviyeleri

PolitikaAçıklamaKullanım
p=noneSadece raporla, müdahale etmeİlk aşama — izleme
p=quarantineSpam klasörüne yönlendirOrta seviye koruma
p=rejectE-postayı tamamen reddetTam koruma

DMARC Tag'leri

TagAçıklamaÖrnek
vVersiyon (zorunlu)v=DMARC1
pPolitika (zorunlu)p=reject
ruaToplu rapor adresirua=mailto:rapor@domain.com
rufForensic rapor adresiruf=mailto:forensic@domain.com
foHata raporlama seçeneğifo=1 (her hatada)
adkimDKIM hizalama modur (relaxed) veya s (strict)
aspfSPF hizalama modur (relaxed) veya s (strict)
pctPolitika uygulama yüzdesipct=100
spAlt domain politikasısp=reject

Kademeli DMARC Uygulama Stratejisi

DMARC'ı aşamalı olarak uygulamak en güvenli yaklaşımdır:

# 1. Aşama: İzleme (2-4 hafta)
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@ornekdomain.com; fo=1"

# 2. Aşama: Karantina (2-4 hafta)
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@ornekdomain.com"

# 3. Aşama: Karantina artırma
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@ornekdomain.com"

# 4. Aşama: Tam koruma
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@ornekdomain.com; ruf=mailto:dmarc-forensic@ornekdomain.com"

DMARC raporlarını analiz etmek için dmarcian.com, postmarkapp.com/dmarc veya easydmarc.com gibi ücretsiz araçları kullanabilirsiniz.

Tüm Kayıtları Doğrulama

Tüm e-posta güvenlik kayıtlarını tek seferde kontrol edin:

hljs bash
# SPF kontrolü
dig TXT ornekdomain.com +short | grep spf

# DKIM kontrolü
dig TXT default._domainkey.ornekdomain.com +short

# DMARC kontrolü
dig TXT _dmarc.ornekdomain.com +short

# MX kaydı kontrolü
dig MX ornekdomain.com +short

E-posta Gönderim Testi

Komut satırından test e-postası gönderin:

hljs bash
# swaks ile detaylı test
sudo apt install swaks -y
swaks --to test@gmail.com --from info@ornekdomain.com --server localhost --tls

Gönderilen e-postanın başlıklarını kontrol edin:

Authentication-Results: mx.google.com;
       dkim=pass header.d=ornekdomain.com;
       spf=pass (google.com: domain of info@ornekdomain.com designates SUNUCU_IP as permitted sender);
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=ornekdomain.com

Yaygın Hatalar ve Çözümleri

HataNedenÇözüm
SPF PermError10'dan fazla DNS lookupinclude sayısını azaltın, IP bloklarını birleştirin
DKIM failAnahtar uyumsuzluğuDNS'teki public key ile sunucudaki private key eşleşmeli
DMARC failSPF ve DKIM alignment hatasıFrom header domain'i ile SPF/DKIM domain'i eşleşmeli
SoftfailSPF kaydında ~all kullanımı-all ile değiştirin
Body hash mismatchE-posta iletimde değiştirilmişCanonicalization ayarını relaxed/relaxed yapın

Sonuç

SPF, DKIM ve DMARC üçlüsü, e-posta güvenliğinin temel taşlarıdır. Bu üç protokolü doğru yapılandırmak, e-postalarınızın teslim edilebilirliğini artırır, domain sahteciliğini önler ve markanızın itibarını korur. DMARC'ı kademeli olarak uygulayarak raporları analiz edin ve tam korumaya geçmeden önce tüm meşru gönderim kaynaklarınızın SPF ve DKIM ile uyumlu olduğundan emin olun.