Spam Klasörüne Düşme Sorunu: Blacklist Kontrolü Nasıl Yapılır

Mailleriniz sürekli spam klasörüne mi düşüyor? Bu sorunu yaşayan sistem yöneticilerinin büyük çoğunluğu ilk etapta mail sunucusunu veya uygulama kodunu suçlar. Oysa çoğu zaman asıl sebep çok daha temelde yatar: sunucunuzun IP adresi veya domain adınız bir ya da birden fazla kara listeye (blacklist/DNSBL) girmiştir. Bu yazıda, blacklist sorununu nasıl tespit edeceğinizi, hangi araçları kullanacağınızı ve listelerden nasıl çıkacağınızı adım adım ele alacağız.

Blacklist Nedir ve Neden Önemlidir?

Blacklist’ler, spam gönderdiği tespit edilmiş veya şüpheli bulunan IP adreslerini ve domain’leri tutan veritabanlarıdır. Spamhaus, Barracuda, SORBS gibi onlarca farklı blacklist sağlayıcısı bulunur. Alıcı mail sunucuları, gelen her maili kabul etmeden önce bu listeleri sorgular. Eğer gönderen IP’niz bu listelerden birinde varsa, mailiniz direkt reddedilir ya da spam klasörüne düşer.

Peki nasıl girersiniz bu listelere?

  • Sunucunuzda açık relay yapılandırması varsa
  • Bir botnet tarafından spam göndermek için kullanılıyorsanız
  • Önceki kiracıdan kalma kirli bir IP aldıysanız (cloud sunucularda çok yaygın)
  • Opt-in olmayan kişilere toplu mail gönderdiyseniz
  • Mail sunucunuz güvenlik açığı nedeniyle ele geçirildiyse

Belirtileri Tanımak

Blacklist sorununun en net belirtileri şunlardır:

  • Mailiniz Gmail, Outlook veya Yahoo’da spam klasörüne düşüyor
  • Bazı alıcılara mail hiç ulaşmıyor, bounce alıyorsunuz
  • Mail log’larında 550 5.7.1 veya 554 hata kodları görüyorsunuz
  • MXToolbox veya benzeri araçlarda uyarı alıyorsunuz

Bounce mesajı aldığınızda içeriğine dikkat edin. Genellikle hangi blacklist’e girdiğinizi açıkça söyler:

550 5.7.1 Service unavailable; Client host [203.0.113.45] blocked
using Spamhaus. To request removal see https://www.spamhaus.org/query/ip/203.0.113.45

Bu tür mesajlar altın değerindedir, sizi direkt olarak kaynağa yönlendirir.

Adım 1: Sunucu IP ve Domain Bilgilerini Toplayın

Önce neyi kontrol edeceğinizi belirleyin. Mail sunucunuzun public IP adresini ve kullandığınız domain’leri not edin.

# Mail sunucusunun dışarıya bakan IP'sini öğrenin
curl -s ifconfig.me

# Alternatif yöntem
dig +short myip.opendns.com @resolver1.opendns.com

# Hostname ve MX kayıtlarını kontrol edin
hostname -f
dig MX example.com +short

Birden fazla IP ile mail gönderiyorsanız (örneğin bir load balancer arkasında), tüm IP’leri listelemek için şunu kullanabilirsiniz:

# Postfix kullananlar için mail gönderim IP'lerini görmek
postconf -n | grep inet_interfaces
postconf -n | grep smtp_bind_address

Adım 2: Komut Satırından DNSBL Sorgulama

Blacklist sorgulaması aslında bir DNS sorgusu üzerine kuruludur. Mekanizma şöyledir: IP adresinizi ters çevirerek DNSBL domain’inin sonuna eklersiniz ve bu adrese DNS sorgusu atarsınız. Cevap dönerse listedesiniz demektir.

Örneğin 203.0.113.45 IP’si için Spamhaus’u sorgulamak:

# IP'yi ters çevir: 203.0.113.45 -> 45.113.0.203
# Sonra DNSBL domain'ini ekle: 45.113.0.203.zen.spamhaus.org
dig 45.113.0.203.zen.spamhaus.org A

# Eğer NXDOMAIN dönerse temizsiniz
# Eğer 127.0.0.x döndürürse listedesiniz

Bu işlemi birden fazla liste için manuel yapmak can sıkıcıdır. Aşağıdaki bash script’i en yaygın DNSBL’leri otomatik olarak sorgular:

#!/bin/bash
# dnsbl-check.sh - Toplu DNSBL Sorgulama Script'i

IP=$1

if [ -z "$IP" ]; then
    echo "Kullanim: $0 <ip-adresi>"
    exit 1
fi

# IP'yi ters cevir
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')

DNSBLS=(
    "zen.spamhaus.org"
    "bl.spamcop.net"
    "dnsbl.sorbs.net"
    "b.barracudacentral.org"
    "dnsbl-1.uceprotect.net"
    "dnsbl-2.uceprotect.net"
    "dnsbl.dragonar.org"
    "ix.dnsbl.manitu.net"
    "psbl.surriel.com"
    "dnsbl.inps.de"
    "db.wpbl.info"
    "cbl.abuseat.org"
    "truncate.gbudb.net"
    "spam.dnsbl.sorbs.net"
)

echo "=== DNSBL Kontrolu: $IP ==="
echo "Tarih: $(date)"
echo ""

LISTED=0
for DNSBL in "${DNSBLS[@]}"; do
    RESULT=$(dig +short "$REVERSED.$DNSBL" A 2>/dev/null)
    if [ -n "$RESULT" ]; then
        echo "[LISTEDE] $DNSBL -> $RESULT"
        LISTED=$((LISTED + 1))
    else
        echo "[TEMIZ]   $DNSBL"
    fi
done

echo ""
echo "Sonuc: $LISTED listede bulundu."

Script’i çalıştırmak:

chmod +x dnsbl-check.sh
./dnsbl-check.sh 203.0.113.45

Adım 3: Web Tabanlı Araçlarla Kapsamlı Kontrol

Komut satırı araçlarının yanı sıra bazı web servisleri 100’den fazla DNSBL’i aynı anda sorgular. Bunları da kullanabilirsiniz ama otomasyona dökemezsiniz. Neyse ki bazıları API sunar.

MXToolbox API kullanımı:

# MXToolbox API ile blacklist kontrolü (ücretsiz katmanda sınırlı)
curl -s "https://api.mxtoolbox.com/api/v1/Lookup/blacklist/?argument=203.0.113.45" 
  -H "Authorization: YOUR_API_KEY" | python3 -m json.tool

Mail-Tester.com ile test:

Bu servis için gerçek bir mail göndermeniz gerekir. Size özel bir adres verir, oraya mail atarsınız ve 10 üzerinden bir skor alırsınız. SPF, DKIM, DMARC ve blacklist durumunu aynı anda gösterir. Özellikle “neden spam gidiyor” sorusuna kapsamlı cevap aradığınızda çok işe yarar.

Adım 4: Mail Log’larını Analiz Etmek

Blacklist kontrolü yaparken log’ları da paralel incelemeniz gerekir. Sorunun gerçekten blacklist kaynaklı olup olmadığını teyit eder.

# Postfix log'larında reject ve defer mesajlarını filtrele
grep -i "reject|blocked|blacklist|listed" /var/log/mail.log | tail -50

# Son 24 saatteki tüm mail hatalarını göster
grep "$(date '+%b %d')" /var/log/mail.log | grep -E "status=bounced|status=deferred" | tail -30

# Belirli bir domain'e giden maillerin durumunu izle
grep "to=<.*@gmail.com>" /var/log/mail.log | grep -v "status=sent" | tail -20

Tipik bir blacklist kaynaklı bounce log’u şöyle görünür:

Nov 15 14:23:11 mailserver postfix/smtp[12345]: 4A3B2C1D2E: 
to=<[email protected]>, relay=gmail-smtp-in.l.google.com[142.250.27.26]:25, 
delay=2.5, delays=0.1/0/1.8/0.6, dsn=5.7.1, 
status=bounced (host gmail-smtp-in.l.google.com said: 
550-5.7.1 [203.0.113.45] Our system has detected that this message is 
550 5.7.1 likely unsolicited mail.)

Bu çıktıda 5.7.1 SMTP hata kodu önemlidir. 550 kalıcı red anlamına gelir.

Adım 5: Blacklist’e Girme Sebebini Araştırmak

Listeden çıkmadan önce neden girdiğinizi anlamalısınız. Yoksa birkaç gün sonra tekrar girersiniz.

# Son 24 saatte kaç mail gönderildi?
grep "$(date '+%b %d')" /var/log/mail.log | grep "status=sent" | wc -l

# Hangi hesaptan en fazla mail gönderiliyor?
grep "$(date '+%b %d')" /var/log/mail.log | grep "sasl_username=" | 
  grep -oP 'sasl_username=KS+' | sort | uniq -c | sort -rn | head -20

# Açık relay kontrolü - dışarıdan relay yapılıyor mu?
grep "$(date '+%b %d')" /var/log/mail.log | grep "relay=" | 
  grep -v "localhost|127.0.0.1" | grep "status=sent" | 
  awk '{print $7}' | sort | uniq -c | sort -rn | head -20

Eğer bir hesaptan anormal miktarda mail gönderiliyorsa, o hesap muhtemelen ele geçirilmiştir. Hemen şifreyi değiştirin ve hesabı geçici olarak kilitleyin:

# Postfix'te belirli bir kullanıcıyı geçici olarak engelle
postsuper -d ALL deferred

# Şüpheli hesabın mail kuyruğundaki mesajlarını sil
mailq | grep "sasl_username=saldiriya_ugrayan_hesap" | 
  awk '{print $1}' | tr -d '*!' | xargs postsuper -d

Adım 6: SPF, DKIM ve DMARC Kontrolü

Blacklist’te olmak tek başına spam klasörüne düşme sebebi olmayabilir. Eksik veya hatalı mail kimlik doğrulama kayıtları da aynı sonucu verir. Bu yüzden bunları da kontrol edin.

# SPF kaydını kontrol et
dig TXT example.com | grep spf

# DKIM kaydını kontrol et (selector adını mail sunucunuza göre değiştirin)
dig TXT default._domainkey.example.com

# DMARC kaydını kontrol et
dig TXT _dmarc.example.com

# Postfix + OpenDKIM kurulu sunucularda DKIM imzalamayı test et
echo "Test maili" | mail -s "DKIM Test" [email protected]
# Sonra gelen mailin header'larını inceleyin, DKIM-Signature satırı olmalı

SPF kaydı şöyle görünmeli:

"v=spf1 ip4:203.0.113.45 include:_spf.google.com ~all"

Eğer ~all yerine -all kullanıyorsanız daha katı bir politika uygulamış olursunuz ki bu blacklist açısından aslında olumludur.

Gerçek Dünya Senaryosu: VPS’ten Gelen Kirli IP

Birkaç ay önce yaşadığım bir vakayı paylaşayım. Müşteri yeni bir DigitalOcean droplet kurdu ve üzerine Postfix yapılandırdı. Her şey teknik olarak doğruydu. SPF, DKIM, DMARC tamamen yerindeydi. Ama Gmail’e giden mailler spam klasörüne düşüyordu.

İlk kontrol:

./dnsbl-check.sh 203.0.113.45
# Sonuc: 3 listede bulundu
# [LISTEDE] cbl.abuseat.org -> 127.0.0.2
# [LISTEDE] zen.spamhaus.org -> 127.0.0.10
# [LISTEDE] b.barracudacentral.org -> 127.0.0.2

IP’nin geçmişini kontrol ettim:

# IP'nin reverse DNS kaydına bak
dig -x 203.0.113.45

# WhoIs ile IP'nin ne zamandan beri bu sağlayıcıda olduğunu öğren
whois 203.0.113.45 | grep -i "netrange|created|updated"

Anlaşıldı: IP, daha önce başka bir müşteriye aitti ve o müşteri spam göndermişti. DigitalOcean pool’undan gelen kirli bir IP’ydi bu.

Çözüm iki aşamalıydı: Önce DigitalOcean’dan yeni bir IP istedik (bu genellikle mümkündür), ardından yeni IP’nin geçmişini kontrol ettikten sonra listeleme başvurularını yaptık.

Adım 7: Blacklist’ten Çıkma Başvurusu

Her DNSBL’in kendi delisting prosedürü vardır. En yaygın olanları:

Spamhaus (zen.spamhaus.org): Otomatik CBL listesi için https://www.abuseat.org/lookup.cgi?ip=IPADRESINIZ adresine gidin. Genellikle 24-48 saat içinde çıkarılırsınız. SBL listesi içinse manuel inceleme gerekir ve spam faaliyetinin durduğunu kanıtlamanız gerekebilir.

Barracuda Central: https://www.barracudacentral.org/rbl/removal-request adresinden başvuru yapılır. İş email adresi gerektirir.

SpamCop: Listeden otomatik çıkar (genellikle 24-48 saat içinde), yeni spam raporu gelmezse. Manuel müdahale gerekmez.

Başvuruyu gönderdikten sonra takip edin:

# Cron ile periyodik blacklist kontrolü yap
# /etc/cron.d/blacklist-check dosyasına ekle:
# 0 */6 * * * root /usr/local/bin/dnsbl-check.sh 203.0.113.45 | 
#   grep "LISTEDE" && mail -s "Blacklist Uyarisi" [email protected]

Süregelen İzleme: Proaktif Yaklaşım

Blacklist sorununu çözdükten sonra tekrar yaşamamak için izleme sistemi kurmanız şarttır.

#!/bin/bash
# /usr/local/bin/blacklist-monitor.sh
# Her 6 saatte bir çalışır, listede bulunursa mail atar

IP="203.0.113.45"
ADMIN_EMAIL="[email protected]"
LOG_FILE="/var/log/blacklist-monitor.log"

DNSBLS=(
    "zen.spamhaus.org"
    "bl.spamcop.net"
    "b.barracudacentral.org"
    "cbl.abuseat.org"
    "dnsbl.sorbs.net"
)

REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
FOUND=()

for DNSBL in "${DNSBLS[@]}"; do
    RESULT=$(dig +short +time=5 +tries=2 "$REVERSED.$DNSBL" A 2>/dev/null)
    if [ -n "$RESULT" ]; then
        FOUND+=("$DNSBL")
    fi
done

if [ ${#FOUND[@]} -gt 0 ]; then
    MESSAGE="UYARI: $IP su blacklist'lerde bulundu:n"
    for ITEM in "${FOUND[@]}"; do
        MESSAGE+="- $ITEMn"
    done

    echo -e "$(date): $MESSAGE" >> "$LOG_FILE"
    echo -e "$MESSAGE" | mail -s "[KRITIK] Blacklist Uyarisi - $IP" "$ADMIN_EMAIL"
fi

Bu script’i cron’a ekleyin:

# Crontab'a ekle
echo "0 */6 * * * root /usr/local/bin/blacklist-monitor.sh" > /etc/cron.d/blacklist-monitor
chmod 644 /etc/cron.d/blacklist-monitor

# Script'e çalıştırma izni ver
chmod +x /usr/local/bin/blacklist-monitor.sh

Mail Sunucusu Güvenlik Sertleştirmesi

Blacklist sorununu kökten önlemek için sunucu güvenliğini de güçlendirmeniz gerekir.

# Postfix rate limiting - tek kullanıcının çok fazla mail göndermesini engelle
# /etc/postfix/main.cf'e ekle:
postconf -e "smtpd_client_message_rate_limit = 100"
postconf -e "smtpd_client_connection_rate_limit = 30"
postconf -e "default_process_limit = 100"
postconf -e "smtpd_recipient_limit = 50"

# Açık relay'i kesinlikle kapat
postconf -e "smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination"

# Postfix'i yeniden başlat
systemctl restart postfix

# Açık relay test et - dışarıdan relay mümkün olmamalı
telnet mail.example.com 25
# EHLO test
# MAIL FROM: [email protected]
# RCPT TO: [email protected]
# Bu noktada 554 Relay access denied almalısınız

Sonuç

Spam klasörüne düşme sorununun yüzde sekseninden fazlası blacklist, SPF/DKIM/DMARC eksikliği veya bunların kombinasyonundan kaynaklanır. Sorunla karşılaştığınızda panik yapmak yerine sistematik yaklaşın: önce IP ve domain’inizi komut satırından sorgulayın, log’ları analiz edin, mail kimlik doğrulama kayıtlarınızı kontrol edin.

En önemli nokta, sorunu çözdükten sonra proaktif izleme kurmaktır. Blacklist’e girdiğinizi haftalarca sonra öğrenmek yerine, otomatik script ile 6 saatte bir kontrol etmek ve anında haberdar olmak çok daha sağlıklı bir yaklaşımdır.

Cloud sunucu kullanıyorsanız, yeni aldığınız her IP’yi kullanmadan önce mutlaka blacklist kontrolünden geçirin. Kirli IP alma ihtimali göz ardı edilemeyecek kadar yüksektir. Bu küçük alışkanlık, ilerleyen dönemde saatler sürecek hata ayıklama seanslarından sizi kurtarır.

Benzer Konular

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir