Mail Sunucusu Kara Listeye Girdi: Çıkma Yöntemi
Sabah 09:00’da ofise geliyorsunuz, kahvenizi hazırlıyorsunuz ve tam oturduğunuzda müşteri şikayetleri yağmaya başlıyor: “Mailler gitmiyor!”, “Müşteriden cevap yok!”, “Sipariş onayları ulaşmıyor!” Sisteme bakıyorsunuz, mail sunucusu çalışıyor, kuyrukta binlerce mail birikmiş ama hiçbiri teslim edilemiyor. Klasik senaryo: mail sunucunuz bir kara listeye (blacklist/RBL) girmiş.
Bu yazıda kara listeye girme sorununu nasıl tespit edeceğinizi, hangi listelerden çıkma başvurusu yapacağınızı ve bir daha bu duruma düşmemek için neler yapmanız gerektiğini adım adım anlatacağım.
Sorunun Kaynağını Anlamak
Önce şunu netleştirelim: kara listeye girmek genellikle bir sonuçtur, neden değil. Sunucunuz spam gönderiyor olabilir, açık relay çalışıyor olabilir, ya da IP adresiniz daha önceki bir kullanıcıdan miras olarak kötü bir itibarla gelmiş olabilir. Çıkmak için uğraşmadan önce neden girdiğinizi anlamanız şart, aksi takdirde birkaç gün içinde yeniden aynı duruma düşersiniz.
Kara Listeye Girmenin Yaygın Nedenleri
- Açık relay (open relay): Sunucunuz authentication olmadan dışarıdan mail kabul edip iletiyordur
- Spam botnet: Sunucunuzdaki bir hesap ele geçirilmiş ve spam gönderiyordur
- Yüksek bounce oranı: Geçersiz adreslere çok fazla mail gönderiyorsunuzdur
- SPF/DKIM/DMARC eksikliği: Authentication kayıtları yoksa spam olarak algılanırsınız
- Yeni IP adresi: Veri merkezinden yeni aldığınız IP’nin geçmişi kötü olabilir
- Compromised script: Web sitenizde bir PHP script ya da form spam gönderiyor olabilir
Adım 1: Kara Liste Durumunu Tespit Etmek
İlk yapmanız gereken hangi listelerde olduğunuzu öğrenmek. Bunun için birkaç farklı yöntem var.
MXToolbox ile Hızlı Kontrol
En pratik başlangıç noktası MXToolbox. Tarayıcıdan mxtoolbox.com/blacklists.aspx adresine gidip IP’nizi girebilirsiniz. Ama biz sysadmin olarak komut satırından yapalım:
# dig ile belirli bir RBL listesini sorgulamak
# IP'yi ters çevirerek sorgu yapılır: 1.2.3.4 -> 4.3.2.1
dig +short 4.3.2.1.zen.spamhaus.org
# Spamhaus SBL, XBL, PBL kontrolü
dig +short 4.3.2.1.zen.spamhaus.org A
# Sonuç 127.0.0.2 dönerse listede demektir
# Sonuç boşsa listede değilsiniz
Toplu RBL Kontrol Script’i
Tek tek kontrol etmek yerine bir script yazalım:
#!/bin/bash
# rbl_check.sh - Birden fazla RBL listesini kontrol eder
IP="1.2.3.4" # Kendi IP'nizi buraya yazın
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
LISTS=(
"zen.spamhaus.org"
"bl.spamcop.net"
"dnsbl.sorbs.net"
"b.barracudacentral.org"
"dnsbl-1.uceprotect.net"
"ix.dnsbl.manitu.net"
"bl.mailspike.net"
"hostkarma.junkemailfilter.com"
)
echo "=== RBL Kontrol Raporu: $IP ==="
echo "Tarih: $(date)"
echo ""
BLACKLISTED=0
for LIST in "${LISTS[@]}"; do
RESULT=$(dig +short "$REVERSED.$LIST" 2>/dev/null)
if [ -n "$RESULT" ]; then
echo "[LISTEDE] $LIST - $RESULT"
BLACKLISTED=$((BLACKLISTED + 1))
else
echo "[TEMIZ] $LIST"
fi
done
echo ""
echo "Sonuç: $BLACKLISTED liste(ler)de kayıtlısınız."
chmod +x rbl_check.sh
./rbl_check.sh
Postfix Log’larını İncelemek
Hangi listede olduğunuzu log’lardan da anlayabilirsiniz:
# Son 1 saatin mail log'larına bakmak
grep "reject" /var/log/mail.log | grep -i "block|blacklist|rbl|dnsbl" | tail -50
# Postfix queue durumuna bakmak
postqueue -p | head -30
# Belirli bir domain'e giden maillerin neden gitmiyor olduğunu görmek
postqueue -p | grep "example.com"
# Delivery attempt detaylarını görmek
mailq | grep -A 3 "Connection refused|blacklist|blocked"
Tipik bir rejection mesajı şöyle görünür:
550 5.7.1 Service unavailable; client [203.0.113.10] blocked using
zen.spamhaus.org; https://www.spamhaus.org/query/ip/203.0.113.10
Adım 2: Neden Listeye Girdiğinizi Bulmak
Çıkış başvurusu yapmadan önce sorunu düzeltmeniz gerekiyor. Yoksa başvurunuz reddedilir ya da birkaç gün sonra yeniden listeye girersiniz.
Açık Relay Testi
# Sunucunuzun açık relay olup olmadığını test edin
# Başka bir sunucudan ya da kendi sunucunuzdan:
telnet mail.siteniz.com 25
EHLO test.example.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
# Eğer "250 OK" dönerse OPEN RELAY'siniz - bu kritik sorun!
# "554 Relay access denied" dönmesi istenen sonuç
Son Birkaç Saatteki Mail Aktivitesini İncelemek
# Hangi hesapların en çok mail gönderdiğini bulmak
grep "sasl_username" /var/log/mail.log |
awk '{print $NF}' | sort | uniq -c | sort -rn | head -20
# Belirli bir hesabın aktivitesini detaylı görmek
grep "[email protected]" /var/log/mail.log |
grep "$(date +%b %d)" | wc -l
# Saatlik gönderim sayısını görmek
grep "status=sent" /var/log/mail.log |
awk '{print $1, $2, $3}' |
awk '{print substr($3,1,5)}' | sort | uniq -c
PHP Script Kaynaklı Spam Tespiti
Çok sık karşılaştığım bir senaryo: WordPress ya da başka bir CMS’te bir form veya plugin spam gönderiyor.
# PHP üzerinden gönderilen mailleri tespit etmek
# (Postfix + PHP-FPM ortamında)
grep "postfix/pickup" /var/log/mail.log | grep "uid=" |
awk -F'uid=' '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -rn
# Apache/Nginx log'larında form submit patternlerini aramak
grep "POST" /var/log/nginx/access.log |
grep -E "contact|form|mail|send" |
awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# Şüpheli PHP scriptlerini bulmak
find /var/www -name "*.php" -newer /var/www/html/index.php
-exec grep -l "mail(" {} ; 2>/dev/null
Adım 3: Sorunu Düzeltmek
Kara listeden çıkış başvurusu yapmadan önce sisteminizin temiz olduğundan emin olun.
Ele Geçirilmiş Hesabı Devre Dışı Bırakmak
# Postfix'te belirli bir hesabı geçici olarak kilitlemek
# (Dovecot kullanıyorsanız)
doveadm user [email protected]
passwd -l kullanici # Sistem kullanıcısı için
# Postfix'te belirli bir hesaptan gelen mailleri reddetmek
# /etc/postfix/sender_access dosyasına ekleyin:
echo "[email protected] REJECT Account suspended" >> /etc/postfix/sender_access
postmap /etc/postfix/sender_access
postfix reload
# Mail kuyruğunu temizlemek - dikkatli olun!
# Sadece belirli bir hesabın maillerini silmek
postqueue -p | grep "[email protected]" |
awk '{print $1}' | tr -d '*!' |
xargs -I {} postsuper -d {}
SPF, DKIM ve DMARC Kayıtlarını Kontrol Etmek
# SPF kaydını kontrol etmek
dig +short TXT siteniz.com | grep spf
# DKIM kaydını kontrol etmek (selector'ınızı yazın)
dig +short TXT default._domainkey.siteniz.com
# DMARC kaydını kontrol etmek
dig +short TXT _dmarc.siteniz.com
Eğer SPF kaydınız yoksa DNS’e şunu eklemeniz gerekiyor:
# Örnek SPF kaydı - sadece kendi mail sunucunuzun gönderebileceğini belirtir
# DNS TXT kaydı olarak eklenecek:
# v=spf1 ip4:203.0.113.10 mx ~all
# DKIM kurulumu için (Postfix + opendkim)
apt install opendkim opendkim-tools
opendkim-genkey -t -s default -d siteniz.com
# Üretilen public key'i DNS'e TXT kaydı olarak ekleyin
# DMARC kaydı örneği (DNS TXT olarak _dmarc.siteniz.com):
# v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100
Mail Kuyruğunu Yönetmek
# Kuyrukta bekleyen mail sayısını görmek
postqueue -p | grep -c "^[A-F0-9]"
# Kuyruktaki tüm bounce/undeliverable mailleri silmek
# DİKKAT: Bu geri alınamaz!
postsuper -d ALL deferred
# Kuyruktaki mailleri listelemek ve belirli domain'e gidenleri bulmak
postqueue -p | grep "@spam-domain.com" |
awk '{print $1}' | tr -d '*!' | head -10
# Kuyruğu yeniden denemek (sorun çözüldükten sonra)
postqueue -f
Adım 4: Kara Listeden Çıkış Başvurusu
Artık sorunu çözdüğünüzü doğruladığınıza göre başvuru zamanı. Her listenin kendine özgü süreci var.
Spamhaus
En yaygın ve en etkili liste. zen.spamhaus.org aslında birkaç listenin birleşimi:
- SBL (Spamhaus Block List): Spam kaynakları
- XBL (Exploits Block List): Ele geçirilmiş sistemler
- PBL (Policy Block List): ISP’lerin dynamic IP havuzları
# Hangi Spamhaus listesinde olduğunuzu anlamak
dig +short 4.3.2.1.sbl.spamhaus.org # SBL kontrolü
dig +short 4.3.2.1.xbl.spamhaus.org # XBL kontrolü
dig +short 4.3.2.1.pbl.spamhaus.org # PBL kontrolü
Spamhaus’tan çıkmak için www.spamhaus.org/lookup/ adresine gidin. PBL’deyseniz otomatik çıkış mümkün, SBL’deyseniz manuel inceleme süreci başlıyor.
Spamhaus başvurusu sırasında şunları hazırlayın:
- Neden listeye girdiğinize dair açıklama
- Sorunu nasıl çözdüğünüzün kanıtı (log parçaları)
- Bir daha olmayacağına dair alınan önlemler
SpamCop
bl.spamcop.net listesi genellikle 24-48 saat içinde otomatik temizleniyor ama aktif spam gönderimi bitince. spamcop.net/bl.shtml adresinden durum kontrolü yapabilirsiniz.
Barracuda
b.barracudacentral.org için www.barracudacentral.org/rbl/removal-request adresinden başvuru yapılıyor. Genellikle 12-24 saat içinde işleniyor.
Microsoft/Outlook/Hotmail
Microsoft’un listesi biraz farklı çalışıyor:
# Microsoft'a mail gönderirken 550 hatası alıyorsanız
# Hata mesajı genellikle şöyle görünür:
# 550 5.7.1 Unfortunately, messages from [IP] weren't sent.
# Please contact your Internet service provider since part of their
# network is on our block list (S3150).
# Microsoft Smart Network Data Services başvurusu:
# https://sendersupport.olc.protection.outlook.com/pm/troubleshooting.aspx
Gmail Postmaster Tools
Gmail’e mail gidemiyorsa bu biraz farklı bir süreç:
# Gmail'in size gönderdiği bounce mesajını kontrol edin
# Genellikle 421 ya da 550 ile başlar
grep "gmail.com" /var/log/mail.log | grep "reject|defer" | tail -20
Gmail için postmaster.google.com adresinden domain’inizi doğrulayıp itibar puanınızı görebilirsiniz.
Adım 5: Çıkış Sonrası Doğrulama
Başvurunuz onaylandıktan sonra her şeyin düzeldiğini teyit edin:
# RBL'den çıktıktan sonra tekrar kontrol
dig +short 4.3.2.1.zen.spamhaus.org
# Artık boş dönmeli
# DNS propagasyonunu bekleyin (genellikle 1-4 saat)
# Postfix kuyruğunu yeniden denemek
postfix flush
# Test maili göndermek
echo "Test maili - $(date)" | mail -s "RBL Test" [email protected]
# Mail log'larını canlı takip etmek
tail -f /var/log/mail.log | grep -E "sent|reject|defer"
Adım 6: Bir Daha Olmaması İçin Alınacak Önlemler
Kara listeden çıkmak iyi, ama bir daha girmemek daha iyi.
Rate Limiting Konfigürasyonu
# /etc/postfix/main.cf'e eklenecek rate limiting ayarları
# Tek bir hesaptan saatlik maksimum mail sayısını sınırlamak
# Postfix ile basit rate limiting
# smtpd_client_connection_count_limit: Aynı anda aynı IP'den max bağlantı
# smtpd_client_message_rate_limit: Saatlik mesaj limiti
postconf -e "smtpd_client_connection_count_limit = 10"
postconf -e "smtpd_client_message_rate_limit = 100"
postconf -e "anvil_rate_time_unit = 3600s"
postfix reload
Otomatik RBL İzleme Script’i
#!/bin/bash
# rbl_monitor.sh - Cron'a ekleyin, listeye girince mail atsın
IP="203.0.113.10"
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
ALERT_EMAIL="[email protected]"
LOG_FILE="/var/log/rbl_monitor.log"
LISTS=("zen.spamhaus.org" "bl.spamcop.net" "b.barracudacentral.org" "dnsbl.sorbs.net")
for LIST in "${LISTS[@]}"; do
RESULT=$(dig +short "$REVERSED.$LIST" 2>/dev/null)
if [ -n "$RESULT" ]; then
MESSAGE="UYARI: $IP adresi $LIST listesine girdi! Sonuç: $RESULT"
echo "$(date): $MESSAGE" >> $LOG_FILE
echo "$MESSAGE" | mail -s "RBL UYARISI: Mail Sunucusu Kara Listede!" $ALERT_EMAIL
fi
done
# Cron'a eklemek (her 2 saatte bir kontrol)
crontab -e
# Eklenecek satır:
# 0 */2 * * * /usr/local/bin/rbl_monitor.sh
Fail2ban ile Brute Force ve Spam Koruması
# fail2ban-client ile postfix jail durumunu kontrol etmek
fail2ban-client status postfix
fail2ban-client status postfix-sasl
# Engellenen IP'leri görmek
fail2ban-client get postfix-sasl banlist
# /etc/fail2ban/jail.local'e eklenecek Postfix kuralları
# [postfix-sasl]
# enabled = true
# port = smtp,ssmtp,submission
# filter = postfix-sasl
# logpath = /var/log/mail.log
# maxretry = 3
# findtime = 300
# bantime = 86400
systemctl restart fail2ban
Gerçek Dünya Senaryosu: E-Ticaret Sitesinin Krizi
Bir müşterimde yaşanan olayı anlatayım. Orta ölçekli bir e-ticaret sitesi, sipariş onay mailleri 3 gündür gitmiyordu. İlk bakışta Postfix çalışıyordu, kuyrukta 4.000’den fazla mail vardı.
Log’lara baktım:
grep "reject" /var/log/mail.log | grep "spamhaus" | tail -5
# Nov 15 09:23:11 mail postfix/smtp[12834]: A3F2B1234: to=<[email protected]>,
# relay=gmail-smtp-in.l.google.com[142.250.x.x]:25,
# status=bounced (host gmail-smtp-in.l.google.com said: 550-5.7.1 [203.0.113.10]
# Our system has detected that this message is likely unsolicited mail.)
RBL kontrolünde Spamhaus XBL’deydi. XBL, exploited sistemler içindir. Demek ki sunucudan kötü amaçlı trafik çıkıyordu. Hesap aktivitesine baktım:
grep "sasl_username" /var/log/mail.log | grep "Nov 14" |
awk '{print $NF}' | sort | uniq -c | sort -rn | head -5
# 15847 [email protected]
# 23 [email protected]
# 12 [email protected]
[email protected] hesabı tek günde 15.000’den fazla mail göndermişti. Hesap şifresi brute force ile kırılmış. Hesabı kilitledi, kuyruğu temizledi, şifreyi değiştirdi ve Spamhaus’a başvurdu. 6 saat içinde XBL’den çıktı, 2 saat sonra mailler gitmeye başladı.
Sonuç
Mail sunucusunun kara listeye girmesi panikleyecek bir durum değil, ama hızlı ve doğru hareket gerektiriyor. Süreci şöyle özetleyebiliriz: önce hangi listede olduğunu tespit et, neden girdiğini anla, sorunu köklü olarak çöz, sonra çıkış başvurusu yap. Bu sırayı atlarsanız, başvurunuz reddedilebilir ya da birkaç gün içinde yeniden aynı yerde bulursunuz kendinizi.
En önemlisi, reaktif değil proaktif olmak. RBL izleme script’ini kurun, fail2ban’ı aktif edin, rate limiting ayarlayın ve düzenli olarak SPF/DKIM/DMARC durumunuzu kontrol edin. Mail sunucusu itibarı bir kere kazanılıp bırakılan bir şey değil, sürekli bakım gerektiren bir servis.
Sorularınız olursa yorumlar kısmında buluşalım.
