· 6 dk okuma

SPF DKIM DMARC PTR Ayarları: Mail Spam'e Düşmesin

Kendi sunucunuzdan gönderdiğiniz e-postaların spam'e düşmemesi için dört şey birlikte doğru olmalıdır: IP adresinin PTR (reverse DNS) kaydı, alan adının SPF kaydı, giden iletilerin DKIM imzası ve bunları birbirine bağlayan DMARC politikası. Bu yazı sıfırdan kurulum anlatmak yerine, "mail gönderiyorum ama spam'e düşüyor" sorununu teşhis etmeye ve her kaydı komutla doğrulamaya odaklanır.

Örneklerde example.com alan adı, mail.example.com sunucu adı, 192.0.2.25 IPv4 ve 2001:db8::25 IPv6 adresi kullanılmıştır. Kendi değerlerinizle değiştirin.

Önce teşhis: Spam'e düşmenin nedeni nerede?

Alıcı tarafın karar verirken baktığı başlıca sinyaller şunlardır:

  1. Bağlantı kimliği: IP'nin PTR kaydı var mı, ileri ve geri çözümleme tutarlı mı, HELO adı mantıklı mı?
  2. Kimlik doğrulama: SPF, DKIM ve DMARC geçiyor mu, alan adları hizalı mı (alignment)?
  3. IP ve alan adı itibarı: IP bir kara listede mi, IP yeni mi, geçmişte kötüye kullanılmış mı?
  4. İçerik ve davranış: Şikâyet oranı, ani hacim artışı, bozuk HTML, kısaltılmış bağlantılar.

Gmail ve Yahoo, 2024'ten itibaren toplu gönderen için SPF, DKIM ve DMARC'ı zorunlu tutuyor; tek tıkla abonelikten çıkma ve düşük spam şikâyet oranı da bekleniyor. Küçük hacimli gönderiyor olsanız bile aynı kurallara uymak teslimatı belirgin biçimde iyileştirir.

En hızlı teşhis, spam'e düşen bir iletinin ham başlığına bakmaktır. Gmail'de "Orijinali göster" deyin ve şu satırı arayın:

Authentication-Results: mx.google.com;
       dkim=pass header.i=@example.com header.s=s2025;
       spf=pass smtp.mailfrom=example.com;
       dmarc=pass (p=NONE) header.from=example.com

Üçünden biri fail, softfail ya da none ise sorun büyük olasılıkla kimlik doğrulamadadır.

1. PTR (reverse DNS) ve FCrDNS

PTR kaydı, IP adresinden alan adına giden çözümlemedir. Doğru kurgu FCrDNS (forward-confirmed reverse DNS) olarak adlandırılır:

PTR kaydını IP bloğunun sahibi yönetir. Hizmet sağlayıcınızın IP'sini kullanıyorsanız PTR'yi onlardan tanımlatırsınız. Kendi IP bloğunuz varsa reverse DNS bölgesinin (2.0.192.in-addr.arpa gibi) size delege edilmesi gerekir. Kontrol:

dig +short -x 192.0.2.25
dig +short A mail.example.com
dig +short -x 2001:db8::25
dig +short AAAA mail.example.com

IPv6 kullanıyorsanız mutlaka IPv6 için de PTR tanımlayın. Aksi hâlde Postfix IPv6 üzerinden bağlandığında PTR eksikliği yüzünden reddedilirsiniz. IPv6 için PTR hazır değilse geçici olarak inet_protocols = ipv4 kullanabilirsiniz.

Postfix tarafında HELO adını sabitleyin:

postconf -e 'myhostname = mail.example.com'
postconf -e 'smtp_helo_name = $myhostname'
systemctl reload postfix

2. SPF kaydı

SPF, hangi IP'lerin alan adınız adına mail göndermeye yetkili olduğunu söyler. Basit bir kayıt:

example.com.  IN TXT "v=spf1 ip4:192.0.2.25 ip6:2001:db8::25 mx -all"

Dikkat edilecek noktalar:

Kontrol:

dig +short TXT example.com | grep spf1

3. DKIM imzası (OpenDKIM ile)

DKIM, giden iletiyi özel anahtarla imzalar; alıcı da DNS'teki açık anahtarla doğrular. Debian/Ubuntu'da:

apt update
apt install opendkim opendkim-tools
mkdir -p /etc/opendkim/keys/example.com
opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s s2025
chown -R opendkim:opendkim /etc/opendkim/keys
chmod 600 /etc/opendkim/keys/example.com/s2025.private

/etc/opendkim.conf içine şunları ekleyin:

Syslog              yes
Canonicalization    relaxed/simple
Mode                sv
Domain              example.com
Selector            s2025
KeyFile             /etc/opendkim/keys/example.com/s2025.private
Socket              inet:8891@localhost

Postfix'e milter olarak bağlayın:

postconf -e 'milter_default_action = accept'
postconf -e 'milter_protocol = 6'
postconf -e 'smtpd_milters = inet:localhost:8891'
postconf -e 'non_smtpd_milters = $smtpd_milters'
systemctl restart opendkim postfix

s2025.txt dosyasındaki açık anahtarı DNS'e s2025._domainkey.example.com adıyla TXT olarak ekleyin. 2048 bit anahtar 255 karakteri aştığı için DNS panelinin değeri birden fazla tırnaklı parçaya bölmesi normaldir. Kaydı doğrulayın:

dig +short TXT s2025._domainkey.example.com
opendkim-testkey -d example.com -s s2025 -vvv

key OK çıktısı, DNS ile özel anahtarın eşleştiğini gösterir. Anahtar yenilerken yeni bir selector (ör. s2026) üretip geçişi buna göre yapmak güvenlidir.

4. DMARC politikası

DMARC, SPF veya DKIM'den en az birinin geçmesini ve From başlığındaki alan adıyla hizalı olmasını ister. Kademeli ilerleyin:

_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=r; aspf=r"
  1. p=none: Hiçbir şey engellenmez, raporlar toplanır. 2-4 hafta izleyin.
  2. p=quarantine; pct=25: Başarısızlar spam'e yönlendirilir, oran kademeli artırılır.
  3. p=reject: Tüm meşru kaynaklar doğrulandıktan sonra hedef.

rua ile gelen XML raporlarını elle okumak zordur. Bir DMARC rapor çözümleyici kullanmak hangi IP'lerin adınıza mail gönderdiğini görmenizi sağlar. Raporu başka bir alan adına gönderiyorsanız, o alan adında yetkilendirme kaydı (example.com._report._dmarc...) gerekebilir.

5. Uçtan uca test

Kayıtları kurduktan sonra gerçek bir SMTP oturumuyla test edin:

# Kurulu değilse: apt install swaks
swaks --to test@gmail.com --from info@example.com \
      --server mail.example.com --port 587 --tls \
      --auth LOGIN --auth-user info@example.com

STARTTLS sertifikasını kontrol etmek için:

openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com

Yararlı test araçları:

Araç Ne için?
mail-tester.com Tek iletilik genel puan: SPF, DKIM, DMARC, içerik, kara liste
MXToolbox MX, SPF, DKIM, DMARC, PTR ve kara liste sorguları
Google Postmaster Tools Gmail için alan adı/IP itibarı, spam oranı, kimlik doğrulama grafikleri
Gmail "Orijinali göster" Gerçek Authentication-Results çıktısı
dig, host DNS kayıtlarını doğrudan doğrulama

Kara liste kontrolünü komut satırından da yapabilirsiniz. IP'nin oktetlerini ters çevirip DNSBL'e sorarsınız:

dig +short 25.2.0.192.zen.spamhaus.org

Yanıt yoksa listede değilsiniz. Genel (public) DNS çözücüler üzerinden yapılan sorgularda bazı listeler 127.255.255.x gibi özel bir hata kodu döndürür; bu "listelendiniz" anlamına gelmez, sorguyu kendi çözücünüzden yapmanız gerekir.

Sık yapılan hatalar ve çözümleri

Belirti Olası neden Çözüm
spf=permerror İki SPF kaydı veya 10 sorgu limiti aşımı Kayıtları birleştirin, include sayısını azaltın
dkim=fail (body hash did not verify) İleti imzadan sonra değiştirilmiş (footer ekleyen filtre) İmzalamayı en son adımda yapın
dkim=neutral (no key) Selector adı veya DNS kaydı yanlış dig TXT selector._domainkey.alan ile kontrol edin
dmarc=fail ama SPF pass Return-Path alan adı From ile hizalı değil Gönderen servisin özel domain/DKIM ayarını yapın
550 5.7.25 PTR record IPv6 veya IPv4 için PTR yok/uyumsuz FCrDNS'i iki IP ailesi için de tamamlayın
Yeni IP'den toplu gönderimde reddedilme IP geçmişi yok, hacim ani yüksek Günlük hacmi birkaç hafta içinde kademeli artırın (warm-up)

Teslimat için ek öneriler

Altyapı tarafı: IP ve PTR üzerinde kontrol

Teslimat itibarı büyük ölçüde IP'ye bağlıdır; bu yüzden PTR'yi serbestçe ayarlayabildiğiniz ve IP geçmişini bildiğiniz bir altyapı işinizi kolaylaştırır. Kendi ASN'iniz ve IP bloğunuz varsa mail IP'lerinizi bağımsız yönetmek için BGP destekli VDS sunucular üzerinden bloğunuzu anons edebilir, reverse DNS ve itibar yönetimini kendi kontrolünüzde tutabilirsiniz. Yüksek hacimli gönderim için ayrılmış donanım gerekiyorsa fiziksel sunucu kiralama seçeneği de değerlendirilebilir.

Son olarak, DNS değişikliklerinin yayılması TTL'e bağlıdır. Test etmeden önce kayıtların yetkili ad sunucusunda göründüğünden emin olun: dig +short TXT example.com @ns1.example.com.

Sık sorulan sorular

PTR kaydı olmadan mail gönderebilir miyim?

Teknik olarak gönderebilirsiniz ama Gmail, Outlook ve birçok alıcı sunucu PTR'si olmayan ya da ileri çözümlemeyle uyuşmayan IP'lerden gelen iletileri reddeder veya spam'e atar. Kendi mail sunucunuzda PTR ve FCrDNS pratikte zorunludur.

SPF ve DKIM geçiyor ama DMARC neden başarısız oluyor?

DMARC yalnızca geçmeyi değil hizalamayı da ister. SPF'de Return-Path alan adı, DKIM'de d= alan adı, From başlığındaki alan adıyla eşleşmelidir. Üçüncü taraf servis kullanıyorsanız kendi alan adınız için DKIM imzalamasını açmanız gerekir.

DMARC'ı doğrudan p=reject ile başlatmalı mıyım?

Hayır. Önce p=none ile rapor toplayın, tüm meşru gönderim kaynaklarını belirleyin, sonra quarantine ve pct değeriyle kademeli ilerleyip en son reject'e geçin. Aksi hâlde meşru iletileriniz de engellenebilir.

Yeni bir IP'den mail göndermeye nasıl başlamalıyım?

Düşük hacimle ve etkileşimi yüksek alıcılara göndererek başlayın, hacmi birkaç hafta boyunca kademeli artırın. Google Postmaster Tools ile itibarı izleyin, bounce ve şikâyetleri düzenli temizleyin.

Kendi mail sunucunuz için BGP destekli VDS seçeneklerini inceleyin.İncele