Reverse DNS Sorunu: PTR Kaydı Yapılandırması ve Hata Ayıklama
Mail sunucusu kurduğunuzda ya da mevcut bir sunucuyu yönetirken en sık karşılaşılan ve çözülmesi bazen saatler süren sorunların başında reverse DNS yapılandırması gelir. Gönderdiğiniz mailler spam kutusuna düşüyor, bazı alıcılar maillerinizi hiç almıyor ya da mail loglarında sürekli “PTR kaydı bulunamadı” gibi hatalar görüyorsunuz. Bu yazıda PTR kayıtlarının ne olduğunu, neden bu kadar önemli olduğunu ve adım adım nasıl düzelteceğinizi gerçek dünya senaryolarıyla açıklayacağım.
PTR Kaydı Nedir ve Neden Bu Kadar Önemli?
DNS sisteminde A kaydı bir hostname’i IP adresine çevirirken PTR kaydı tam tersini yapar: IP adresini hostname’e çevirir. İşte bu yüzden “reverse DNS” deniyor. Mail sunucuları söz konusu olduğunda bu kayıt hayati önem taşır çünkü alıcı mail sunucuları bağlantı kurulmadan önce gönderen sunucunun PTR kaydını kontrol eder.
Senaryo şu şekilde gelişir: Sunucunuz 203.0.113.45 IP’sinden bağlantı kuruyor ve “Merhaba, ben mail.sirketim.com” diyor. Alıcı sunucu hemen bu IP için PTR sorgusu yapıyor ve eğer gelen cevap “mail.sirketim.com” değilse ya da hiç cevap gelmiyorsa, büyük ihtimalle bağlantıyı reddediyor veya mesajı spam olarak işaretliyor.
Birçok büyük mail sağlayıcısı PTR kaydı olmayan IP’lerden gelen mailleri doğrudan reddeder. Microsoft (Outlook/Hotmail), Gmail, Yahoo ve kurumsal mail sunucularının büyük çoğunluğu bu kontrolü yapar.
PTR Kaydının Kimde Olduğunu Anlamak
Bu noktada çok önemli bir kavramı açıklamamız gerekiyor: PTR kayıtlarını siz değil, IP adresini size tahsis eden kuruluş yönetir. Bu genellikle VPS/dedicated sunucu sağlayıcınız ya da ISP’nizdir.
Şöyle düşünün: Domain kayıtlarınız sizin kontrolünüzdeyken (Cloudflare, GoDaddy vb.), IP adresiniz için PTR kaydı o IP’nin sahibi olan kuruluşun DNS sunucularında tutulur. Bu nedenle:
- VPS/Cloud sunucu kullanıyorsanız: Hetzner, DigitalOcean, Vultr, AWS gibi sağlayıcıların kontrol panelinden PTR kaydı belirleyebilirsiniz.
- Dedicated sunucu kullanıyorsanız: Hosting firmanızın destek birimiyle iletişime geçmeniz gerekebilir.
- Ofis/ev bağlantısı kullanıyorsanız: ISP’niz genellikle bu değişikliği yapar.
Mevcut Durumu Kontrol Etmek
Önce neyle karşı karşıya olduğunuzu anlayalım. Aşağıdaki komutları kullanarak PTR kaydınızı ve genel mail sağlığınızı kontrol edebilirsiniz.
Temel PTR Sorgusu
# IP adresinizin PTR kaydını kontrol edin
dig -x 203.0.113.45
# Alternatif olarak host komutuyla
host 203.0.113.45
# nslookup ile
nslookup 203.0.113.45
Sağlıklı bir çıktı şöyle görünmeli:
$ dig -x 203.0.113.45
;; ANSWER SECTION:
45.113.0.203.in-addr.arpa. 3600 IN PTR mail.sirketim.com.
Eğer ANSWER SECTION boşsa ya da NXDOMAIN alıyorsanız PTR kaydınız yok demektir.
Forward DNS Eşleşmesini Kontrol Etmek
PTR kaydı tek başına yeterli değil. PTR kaydının gösterdiği hostname, A kaydıyla da aynı IP’ye işaret etmeli. Buna forward-confirmed reverse DNS (FCrDNS) deniyor.
# Önce PTR kaydına bak
host 203.0.113.45
# Çıktı: 45.113.0.203.in-addr.arpa domain name pointer mail.sirketim.com.
# Sonra o hostname'in A kaydına bak
host mail.sirketim.com
# Çıktı: mail.sirketim.com has address 203.0.113.45
İkisi de aynı IP’ye işaret ediyorsa bu iyi bir yapılandırmadır. Eğer farklı bir IP çıkıyorsa ya da hostname bulunamıyorsa, sorun daha derin.
Mail Log’larında PTR Hatalarını Bulmak
# Postfix loglarında PTR ile ilgili hataları bul
grep -i "does not resolve" /var/log/mail.log | tail -20
# Ya da daha kapsamlı arama
grep -iE "PTR|reverse|rdns|hostname" /var/log/mail.log | grep -i "fail|error|reject" | tail -30
# Journald kullanıyorsanız
journalctl -u postfix --since "1 hour ago" | grep -iE "PTR|reverse|rdns"
Sağlayıcıya Göre PTR Kaydı Ayarlama
Hetzner Cloud
Hetzner Cloud panelinde bu işlem oldukça basit:
# Önce sunucunuzun IP adresini öğrenin
ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1
Sonra Hetzner Cloud Console’a gidin, sunucunuzu seçin, “Networking” sekmesine tıklayın ve IPv4 adresinizin yanındaki “DNS” ikonuna tıklayın. Oraya mail.sirketim.com gibi değeri girin. IPv6 kullanıyorsanız aynı işlemi IPv6 için de yapmanız gerekir.
DigitalOcean
DigitalOcean’da PTR kaydı, Droplet’in hostname’iyle otomatik olarak eşleşir. Hostname’i değiştirdiğinizde PTR de değişir.
# Droplet hostname'ini değiştirmek için (işletim sistemi tarafında)
hostnamectl set-hostname mail.sirketim.com
# /etc/hosts dosyasını da güncellemeyi unutmayın
echo "203.0.113.45 mail.sirketim.com mail" >> /etc/hosts
DigitalOcean panelinde Droplet ayarlarından hostname’i de aynı şekilde güncellemeniz gerekir.
AWS EC2
AWS’de Elastic IP kullanıyorsanız, AWS Console’dan EC2 > Elastic IPs bölümüne gidin, IP’nizi seçin ve “Edit reverse DNS” seçeneğini kullanın. AWS bu işlem için önce DNS doğrulaması ister.
# AWS CLI ile PTR kaydı ayarlamak
aws ec2 modify-address-attribute
--allocation-id eipalloc-12345678
--domain-name mail.sirketim.com
Postfix Tarafında Yapılandırma
PTR kaydını ayarladıktan sonra Postfix’in de tutarlı bir şekilde yapılandırıldığından emin olmanız gerekir.
Hostname Ayarlarını Kontrol Etmek
# Sistem hostname'ini kontrol edin
hostname -f
# Postfix'in kullandığı hostname
postconf myhostname
# Postfix'te kullanılan domain
postconf mydomain
Bunlar tutarlı olmalı. myhostname değeri PTR kaydınızla eşleşmelidir.
main.cf Yapılandırması
# /etc/postfix/main.cf dosyasını düzenleyin
nano /etc/postfix/main.cf
Kritik parametreler:
# Bu değer PTR kaydınızla birebir eşleşmeli
myhostname = mail.sirketim.com
# Domain adınız
mydomain = sirketim.com
# SMTP banner'ı - bu da PTR kaydınızla uyumlu olmalı
smtpd_banner = $myhostname ESMTP $mail_name
# Kaynak IP'nin doğrulanması için
smtp_helo_name = $myhostname
Değişiklikler sonrası:
# Yapılandırmayı test et
postfix check
# Postfix'i yeniden yükle
systemctl reload postfix
Mail Sunucusu Testi ve Doğrulama
PTR kaydını ayarladıktan sonra yayılmasını beklemeniz gerekir. Bu genellikle birkaç dakika ile birkaç saat arasında sürer. Doğrulama için şu araçları kullanabilirsiniz:
Komut Satırından Test
# MX lookup ile mail sunucunuzu kontrol edin
dig MX sirketim.com
# SPF kaydını kontrol edin
dig TXT sirketim.com | grep spf
# DKIM kaydını kontrol edin (selector adınıza göre değiştirin)
dig TXT default._domainkey.sirketim.com
# Telnet ile SMTP bağlantısını test edin
telnet mail.sirketim.com 25
Gerçek Bir Mail Gönderimi Testi
# Sendmail komutuyla test maili gönder
echo "Test maili - PTR kontrol" | sendmail -v [email protected]
# Ya da Postfix ile
echo "Subject: PTR Test" | sendmail -f [email protected] [email protected]
# Mail kuyruğunu kontrol et
mailq
# Postfix loglarını gerçek zamanlı izle
tail -f /var/log/mail.log
MXToolbox ve Online Araçlar
Online test için kullanabileceğiniz bazı kaynaklar:
- mxtoolbox.com/ReverseLookup.aspx: IP adresinizi girerek PTR kaydınızı kontrol edebilirsiniz.
- mail-tester.com: Gerçek bir mail göndererek kapsamlı analiz alabilirsiniz.
- multirbl.valli.org: IP’nizin kara listelerde olup olmadığını toplu kontrol eder.
Sık Karşılaşılan Sorunlar ve Çözümleri
Sorun 1: PTR Kaydı Var Ama Forward DNS Eşleşmiyor
Bu durum “PTR var ama FCrDNS yok” olarak bilinir ve bazı strict mail sunucuları tarafından reddedilir.
# Sorunu tespit et
# Adım 1: PTR'ye bak
dig -x 203.0.113.45 +short
# Çıktı: hosting123.datacenter.com. (YANLIŞ - kendi hostname'iniz değil)
# Adım 2: Beklenen hostname için A kaydına bak
dig mail.sirketim.com +short
# Çıktı: 203.0.113.45 (doğru)
# Çözüm: Sağlayıcınızdan PTR kaydını mail.sirketim.com olarak ayarlamasını isteyin
# Ve A kaydınızın doğru olduğundan emin olun
dig mail.sirketim.com A
Sorun 2: IPv6 PTR Kaydı Eksik
Sunucunuzda IPv6 de aktifse ve Postfix IPv6 üzerinden bağlanmaya çalışıyorsa, IPv6 için de PTR kaydı gereklidir.
# IPv6 adresinizi öğrenin
ip -6 addr show | grep "scope global" | awk '{print $2}' | cut -d'/' -f1
# IPv6 PTR sorgulama
dig -x 2001:db8::1
# Eğer IPv6 PTR ayarlayamıyorsanız, Postfix'i sadece IPv4'e kısıtlayabilirsiniz
# /etc/postfix/main.cf
inet_protocols = ipv4
Sorun 3: Postfix HELO/EHLO Uyumsuzluğu
# Mevcut HELO ayarını kontrol et
postconf smtp_helo_name
# Giden bağlantılarda ne gönderildiğini görmek için verbose mod
# /etc/postfix/main.cf'e geçici olarak ekle
smtp_tls_loglevel = 1
# Logları izle
tail -f /var/log/mail.log | grep "EHLO|HELO"
Sorun 4: Birden Fazla IP ile Çalışmak
Sunucunuzda birden fazla IP adresi varsa Postfix’in hangi IP üzerinden mail gönderdiğini belirlemek önemlidir.
# Hangi IP'nin kullanıldığını test et
# Bir mail gönder ve logda bağlantı IP'sini kontrol et
tail -f /var/log/mail.log | grep "connect from"
# Belirli bir IP'yi giden bağlantılar için ayarla
# /etc/postfix/main.cf
smtp_bind_address = 203.0.113.45
smtp_bind_address6 = 2001:db8::1
Kara Liste Kontrolü ve Temizleme
PTR sorunu yaşayan bir sunucu büyük ihtimalle çeşitli kara listelere de girmiştir. PTR’yi düzelttikten sonra bu listelere de bakmanız gerekir.
# IP'nizin kara listelerde olup olmadığını kontrol et
# dig ile manuel kontrol (Spamhaus için örnek)
dig 45.113.0.203.zen.spamhaus.org
# Eğer "127.x.x.x" formatında cevap alırsanız listede demektir
# NXDOMAIN alırsanız temizsiniz demektir
# MXToolbox blacklist check
# mxtoolbox.com/blacklists.aspx adresine gidin ve IP'nizi girin
Kara listede bulunuyorsanız, her listenin kendi delisting prosedürü vardır. Genellikle:
- PTR kaydınızı düzelttikten sonra başvurabilirsiniz
- Spamhaus, SORBS, Barracuda gibi listelerin web sitelerinden delisting talebinde bulunabilirsiniz
- Bazı listeler birkaç gün içinde otomatik temizlenir
DMARC, SPF ve DKIM ile Bütünleşik Yapılandırma
PTR kaydı önemli olmakla birlikte tek başına yeterli değildir. Tam bir mail sunucusu güvenilirliği için SPF, DKIM ve DMARC kayıtlarının da doğru yapılandırılmış olması gerekir.
# SPF kaydını kontrol et
dig TXT sirketim.com | grep v=spf1
# Beklenen çıktı örneği:
# "v=spf1 mx a ip4:203.0.113.45 ~all"
# DKIM için Postfix + OpenDKIM kontrol
systemctl status opendkim
# DKIM imzalama test et
opendkim-testmsg < /tmp/test.eml
# DMARC kaydını kontrol et
dig TXT _dmarc.sirketim.com
# Beklenen çıktı örneği:
# "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
Gerçek Dünya Senaryosu: E-Ticaret Sitesi Mail Sorunu
Geçen yıl bir e-ticaret müşterisinin mail sorununu çözdüğümü paylaşayım. Müşteri “sipariş onay mailleri gitmiyor, müşteriler şikayet ediyor” diyerek geldi.
Kontrol ettiğimde şunları gördüm:
# Log'larda bu tür hatalar vardı
tail -100 /var/log/mail.log | grep reject
# 550 5.7.1 Mail from 203.0.113.45 rejected - reverse DNS not found
# PTR kontrolü
dig -x 203.0.113.45 +short
# (Boş cevap - PTR kaydı hiç yoktu)
# Hostname'e bakıldığında
hostname -f
# vps-node-47.datacenter.net (hosting firmasının generic ismi)
# Postfix main.cf
grep myhostname /etc/postfix/main.cf
# myhostname = mail.eticaret.com.tr
Sorun şuydu: Postfix mail.eticaret.com.tr olarak kendini tanıtıyordu ama IP’nin PTR kaydı yoktu. Çözüm adımları:
- Hosting firmasına mail atıp PTR kaydının
mail.eticaret.com.trolarak ayarlanmasını istedik (24 saat içinde hallettiler). mail.eticaret.com.triçin A kaydının doğru IP’ye baktığını doğruladık.- SPF kaydını güncelledik.
- 3 farklı kara listeden delisting talebinde bulunduk.
Toplam çözüm süresi: 2 gün. Ama PTR kaydının yayılmasını beklemek dahil, aktif çalışma zamanı 2 saatti.
Monitoring ve Proaktif Takip
PTR sorununu bir kez çözdükten sonra tekrar yaşamamak için basit bir monitoring scripti işe yarar.
#!/bin/bash
# /usr/local/bin/check-ptr.sh
# PTR kaydı ve mail sağlığını kontrol et
MY_IP="203.0.113.45"
EXPECTED_PTR="mail.sirketim.com"
ALERT_EMAIL="[email protected]"
# PTR kaydını kontrol et
CURRENT_PTR=$(dig -x $MY_IP +short | sed 's/.$//')
if [ "$CURRENT_PTR" != "$EXPECTED_PTR" ]; then
echo "UYARI: PTR kaydı beklenen degerden farklı!" |
mail -s "PTR Kaydı Sorunu - $MY_IP" $ALERT_EMAIL
echo "Beklenen: $EXPECTED_PTR" >> /var/log/ptr-check.log
echo "Mevcut: $CURRENT_PTR" >> /var/log/ptr-check.log
echo "Tarih: $(date)" >> /var/log/ptr-check.log
fi
# Scripti crontab'a eklemek için:
# crontab -e
# 0 * * * * /usr/local/bin/check-ptr.sh
# Scripti çalıştırılabilir yap
chmod +x /usr/local/bin/check-ptr.sh
# Crontab'a ekle (her saat başı çalışsın)
echo "0 * * * * /usr/local/bin/check-ptr.sh" | crontab -
Sonuç
PTR kaydı yapılandırması, mail sunucusu yönetiminin en temel ama en çok atlanan konularından biridir. Özellikle yeni sunucu kurulumlarında “mail neden gitmiyor?” sorusunun cevabı çoğu zaman burada gizlidir.
Özetlemek gerekirse:
- PTR kaydını siz değil, IP’nin sahibi ayarlar. VPS sağlayıcınız ya da ISP’niz bu değişikliği yapmalıdır.
- Forward-confirmed reverse DNS (FCrDNS) şarttır. PTR kaydınız bir hostname’e işaret etmeli, o hostname de aynı IP’ye geri dönmeli.
- Postfix hostname ayarları PTR kaydıyla tutarlı olmalıdır.
myhostnamedeğeri PTR kaydınızla birebir eşleşmeli. - IPv6 kullanıyorsanız IPv6 için de PTR gereklidir. Bunu sağlayamıyorsanız Postfix’i IPv4’e kısıtlayabilirsiniz.
- PTR tek başına yetmez. SPF, DKIM ve DMARC kayıtları da mutlaka yapılandırılmalıdır.
Bu konuyu bir kez düzgün kurarsanız yıllarca sorun yaşamazsınız. Ama ihmal ederseniz her seferinde “maillerim neden gitmiyor?” diye saatlerce log karıştırırsınız. Sysadmin hayatında bazı şeyleri bir kez doğru yapmak, defalarca düzeltmekten çok daha değerlidir.
