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.1veya554hata 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.
