Zimbra’da Mesaj İzleme ve Mail Akış Kontrolü
Yıllardır Zimbra yöneten biri olarak şunu net söyleyebilirim: Pek çok sistem yöneticisi, Zimbra kurulumunu başarıyla tamamlar, servisleri ayağa kaldırır ve işin bittiğini sanır. Oysa gerçek iş tam o noktada başlar. Kullanıcıdan “mailim gitmiyor” mesajı geldiğinde ne yapacağını bilmek, sunucunun kendisini kurmaktan çok daha kritik bir beceridir. Bu yazıda Zimbra’nın mesaj izleme mekanizmalarını, mail akışını kontrol etmek için kullanabileceğiniz araçları ve gerçek hayatta karşılaştığım senaryoları aktaracağım.
Zimbra Mail Akışını Anlamak
Zimbra’da bir mail gönderildiğinde ya da dışarıdan bir mail alındığında, pek çok katmandan geçer. Bu katmanları anlamadan log okumak, karanlıkta yön bulmaya çalışmak gibidir.
Giden mail akışı kabaca şöyle işler: MUA (mail client) -> Zimbra LMTP/SMTP -> Postfix MTA -> Amavis (spam/virüs filtresi) -> Postfix -> Dış dünya. Gelen mail ise tam tersi yönde akar ve Amavis filtresinden geçtikten sonra kullanıcının mailbox’ına düşer.
Bu zincirin her halkasının ayrı bir log kaydı vardır ve sorunun nerede olduğunu bulmak için doğru halkaya bakmak gerekir. Zimbra’da log dosyaları varsayılan olarak /var/log/zimbra.log altında toplanır. Ancak bazı dağıtımlarda ayrı dosyalara da yazılabilir.
# Zimbra log dosyasının canlı takibi
tail -f /var/log/zimbra.log
# Son 1000 satırı görüntüleme
tail -n 1000 /var/log/zimbra.log
# Belirli bir saate ait kayıtları filtreleme
grep "Oct 15 14:" /var/log/zimbra.log
zmmsgtrace: Zimbra’nın Yerleşik İzleme Aracı
Zimbra’nın en az bilinen ama en güçlü araçlarından biri zmmsgtrace scriptidir. Log dosyalarında belirli bir mesajı takip etmek için hazırlanmış bu araç, elle grep yapmaktan çok daha hızlı sonuç verir.
# Belirli bir alıcıya giden mailleri izleme
su - zimbra
/opt/zimbra/libexec/zmmsgtrace -r [email protected]
# Belirli bir göndericiden gelen mailleri izleme
/opt/zimbra/libexec/zmmsgtrace -s [email protected]
# Belirli bir zaman aralığında gönderilen mailleri izleme
/opt/zimbra/libexec/zmmsgtrace -s [email protected] --from "2024-10-15 08:00:00" --to "2024-10-15 18:00:00"
Bu komutun çıktısı oldukça okunaklıdır. Her mesaj için message ID, gönderici, alıcı, boyut ve teslimat durumu satır satır listelenir. “Mailim karşı tarafa gitti mi?” sorusunun cevabını vermek için biçilmiş kaftandır.
Message ID ile Takip
Kullanıcı size bir mail başlığı (header) getirdiğinde, içindeki Message-ID değerini kullanarak o mailin Zimbra üzerindeki yolculuğunu takip edebilirsiniz.
# Belirli bir Message-ID'yi log dosyasında arama
grep "ABC123DEF456" /var/log/zimbra.log
# Postfix queue ID ile takip (örnek queue ID: 3xK2F1ABC)
grep "3xK2F1ABC" /var/log/zimbra.log
Postfix queue ID ile Message-ID arasındaki farkı anlamak önemlidir. Queue ID, Postfix’in iç kuyruklama sistemi için kullandığı geçici bir kimlik numarasıdır. Message-ID ise RFC standardına göre oluşturulan ve tüm mail sunucuları arasında benzersiz olan kalıcı tanımlayıcıdır. Bir mesajı uçtan uca takip etmek için önce Message-ID’den queue ID’ye geçmeniz, sonra queue ID üzerinden akışı izlemeniz gerekir.
Postfix Kuyruk Yönetimi
Zimbra’nın MTA katmanında Postfix çalışır ve kuyruk yönetimi bu katmanda gerçekleşir. “Mesajım neden hala gitmedi?” sorusunun cevabı genellikle burada saklıdır.
# Postfix kuyruğundaki mesajları listele (zimbra kullanıcısı olarak)
su - zimbra
postqueue -p
# Kuyruk uzunluğunu özetle göster
postqueue -p | tail -n 1
# Belirli bir alıcıya ait kuyruktaki mesajları filtrele
postqueue -p | grep "[email protected]"
# Kuyruktaki tüm mesajları hemen göndermeye zorla
postqueue -f
# Belirli bir mesajı kuyruğun başına al ve gönder (queue ID ile)
postqueue -i 3xK2F1ABC
Kuyruktaki mesajların içeriğine bakmak istediğinizde postcat komutu devreye girer:
# Kuyruktaki bir mesajın içeriğini görüntüle
postcat -q 3xK2F1ABC
# Sadece başlık bilgilerini görüntüle
postcat -qh 3xK2F1ABC
# Mesajın envelope (zarf) bilgilerini görüntüle
postcat -qe 3xK2F1ABC
Buradan elde ettiğiniz bilgi oldukça değerlidir. Özellikle bir mesaj neden kuyrukta bekliyorsa, postcat çıktısında “reason” alanı size deferral sebebini gösterir. “Connection refused”, “Name or service not known”, “Relay access denied” gibi hatalar tamamen farklı müdahale yöntemleri gerektirir.
zmprov ile Mail Akış Politikaları
zmprov, Zimbra’nın merkezi provizyon aracıdır ve sadece hesap yönetimi için değil, mail akış politikalarını sorgulamak için de kullanılır.
# Belirli bir domain için mail ayarlarını görüntüle
su - zimbra
zmprov gd domain.com | grep -i mail
# Belirli bir hesabın mail iletme ayarlarını kontrol et
zmprov ga [email protected] zimbraMailForwardingAddress
# Spam filtresi eşiğini görüntüle
zmprov gd domain.com zimbraSpamKillPercent
zmprov gd domain.com zimbraSpamTagPercent
# Belirli bir hesabın posta kutusu kotasını ve doluluk oranını kontrol et
zmprov ga [email protected] zimbraMailQuota
Gerçek hayatta sık karşılaştığım bir senaryo: Kullanıcı “maillerimi almıyorum” diye şikayet ediyor, inceliyorsunuz ve hesabında bir zimbraMailForwardingAddress tanımlı. Birisi hesabın şifresini ele geçirmiş ve mailleri dışarı yönlendirmiş. zmprov ga çıktısını düzenli kontrol etmek bu tür güvenlik açıklarını erken yakalamak açısından kritik.
Amavis Log Takibi
Spam ve virüs filtresi olarak çalışan Amavis’in logları ayrı bir dikkat gerektirir. Bir mail size ulaşmıyorsa Amavis tarafında engellenmiş olabilir.
# Amavis loglarını filtrele
grep "amavis" /var/log/zimbra.log | tail -n 100
# Reddedilen mesajları listele
grep "REJECT" /var/log/zimbra.log | grep "amavis"
# Spam olarak işaretlenen mesajları izle
grep "Blocked SPAM" /var/log/zimbra.log
# Virüs bulunan mesajları takip et
grep "INFECTED" /var/log/zimbra.log
Amavis’in bir mesajı neden reddettiğini anlamak için spam skoru ve politika detaylarına bakmak gerekir. Özellikle kurumlar arası mail gönderimde “spam skoru yüksek geldi, karşı taraf almadı” şikayeti çok yaygındır. Bu durumda kendi sunucunuzdan çıkan maillerin Amavis’ten nasıl geçtiğini ve DKIM/SPF imzalamasının doğru yapıldığını doğrulamanız gerekir.
# DKIM imzalama durumunu kontrol et
su - zimbra
zmprov gd domain.com zimbraDomainDkimPublicKey
# Postfix'in Amavis ile olan bağlantı durumunu kontrol et
postfix status
/opt/zimbra/common/sbin/amavisd status
Gerçek Dünya Senaryosu: Toplu Mail Gönderilememe
Geçen yıl bir müşteri “sabahtan beri kimseye mail gönderemiyoruz, CEO da bekliyor” diye aradı. İlk iş:
# Kuyruk durumuna baktım
postqueue -p | wc -l
# Çıktı: 847 -- kuyrukta 846 mesaj birikmiş
Devamında:
# Kuyrukta biriken mesajların içerik dağılımına baktım
postqueue -p | grep "^[A-Z0-9]" | awk '{print $8}' | sort | uniq -c | sort -rn | head -20
# Log dosyasında hata mesajlarını filtreledim
grep "status=deferred" /var/log/zimbra.log | tail -50
Log çıktısında şunu gördüm: Connection timed out for mx1.externaldomain.com. Dış ağa çıkış yok muydu? telnet mx1.externaldomain.com 25 ile test ettim, bağlantı açılmıyordu. Güvenlik duvarı kurallarına baktım, önceki gece yapılan bir update sırasında outbound SMTP kuralı silinmişti. Kural eklendikten sonra:
# Kuyruktaki tüm mesajları yeniden göndermeye zorladım
postqueue -f
# 5 dakika sonra kuyruk temizlendi
Bu senaryoda asıl önemli olan, sorunu hızlı teşhis edebilmek için doğru komutları bilmekti. “Mail gitmiyor” şikayetinden “firewall kuralı eksik” tespitine gitmek, ancak log okuma alışkanlığıyla mümkün.
Zimbra Admin Konsolundan Mesaj Takibi
Komut satırı dışında, Zimbra Admin Console üzerinden de mesaj takibi yapılabilir. Ancak gerçek anlamda derinlemesine analiz için komut satırı her zaman daha güçlüdür. Admin Console’da “Monitor” sekmesi altındaki “Message Logs” bölümü, basit sorgular için yeterlidir. Kritik ortamlarda bu arayüzü ilk triage için kullanıp detayları komut satırından tamamlıyorum.
Mail Header Analizi
Bir mail problemi raporlandığında kullanıcıdan ham mail başlığını (raw header) almanız gerekir. Bu başlık, mailin tüm yolculuğunu kayıt altına alır.
# Zimbra mailbox üzerinde belirli bir kullanıcının son maillerinin başlıklarını kontrol etmek için
# zmmailbox aracını kullanabilirsiniz
su - zimbra
zmmailbox -z -m [email protected] getMailboxInfo
# Belirli bir mail ID'sinin ham içeriğini almak
zmmailbox -z -m [email protected] getMessage [MAIL_ID]
Header içindeki Received: satırları özellikle önemlidir. Her mail sunucusu bir Received: satırı ekler ve bu satırlar mailin hangi IP adreslerinden geçtiğini, her hop’ta ne kadar beklediğini gösterir. “Mail çok geç ulaştı” şikayetlerinde bu satırları analiz etmek, gecikmenin kendi altyapınızda mı yoksa karşı tarafta mı olduğunu net biçimde ortaya koyar.
Whitelist ve Blacklist Yönetimi
Bazı meşru mailler spam olarak işaretleniyorsa ya da belirli göndericilerden gelen mailler reddediliyorsa, Zimbra’nın whitelist/blacklist mekanizmasını kullanmanız gerekir.
# Domain bazlı whitelist ekleme
su - zimbra
zmprov md domain.com +zimbraMailWhitelistSender "@guvenilidomain.com"
# Belirli bir göndericiyi whitelist'e ekleme
zmprov ma [email protected] +zimbraMailWhitelistSender "[email protected]"
# Domain bazlı blacklist ekleme
zmprov md domain.com +zimbraMailBlacklistSender "@spambrasil.com"
# Mevcut whitelist kayıtlarını listeleme
zmprov gd domain.com zimbraMailWhitelistSender
# Mevcut blacklist kayıtlarını listeleme
zmprov gd domain.com zimbraMailBlacklistSender
Whitelist/blacklist yönetiminde dikkat etmem gereken nokta şu: Domain bazlı düzenlemeler tüm kullanıcıları etkiler, hesap bazlı düzenlemeler ise sadece o hesabı. CEO’nun sekreteryasından şikayet geldiğinde hesap bazlı whitelist eklemek daha güvenli bir yaklaşımdır; yanlışlıkla tüm kuruma spam geçirme riskini ortadan kaldırır.
Mail Akış İstatistiklerini İzleme
Düzenli izleme yapmak, sorunları reaktif değil proaktif biçimde yakalamak demektir. Zimbra’da mail akış istatistiklerini çekmek için birkaç yöntem mevcuttur.
# Günlük mail istatistiklerini görüntüleme
su - zimbra
/opt/zimbra/libexec/zmlogprocess
# Son 24 saatte gelen/giden mail sayısını hesaplama
grep "status=sent" /var/log/zimbra.log | grep "$(date +%b %e)" | wc -l
grep "status=delivered" /var/log/zimbra.log | grep "$(date +%b %e)" | wc -l
# Belirli bir saatten itibaren gönderilen mail sayısı
grep "status=sent" /var/log/zimbra.log | grep "Oct 15 09:" | wc -l
# En çok mail gönderen hesapları listele (son log dosyasından)
grep "status=sent" /var/log/zimbra.log | grep -oP "sasl_username=K[^s,]+" | sort | uniq -c | sort -rn | head -10
Son komut aslında güvenlik açısından da çok değerlidir. Hesaplardan biri anormal miktarda mail gönderiyorsa, ya spam bot tarafından ele geçirilmiş ya da toplu mail listesi olarak kullanılıyor demektir. Bu anomaliyi erken fark etmek, IP adresinizin blacklist’e girmesini önler.
Zimbra Logger ve Rapor Sistemi
Zimbra’nın kendi rapor sistemi, günlük mail akış özetleri gönderebilir. Ancak bu özelliğin aktif olduğundan emin olmak gerekir.
# Logger servisinin durumunu kontrol et
su - zimbra
zmloggerctl status
# Logger servisini yeniden başlat
zmloggerctl restart
# Günlük rapor gönderim ayarlarını kontrol et
zmlocalconfig | grep logger
Logger servisinin düzgün çalışmaması, Admin Console’daki grafiklerin güncel görünmemesine ve istatistiklerin toplanmamasına yol açar. Özellikle yeni kurulumlardan sonra logger servisinin aktif olup olmadığını kontrol etmeyi ihmal etmeyin.
Deferred Mesajları Temizleme
Kuyruğa takılmış ve artık gönderilmesini istemediğiniz mesajları temizlemek gerekebilir. Bu konuda dikkatli olmak şart; yanlışlıkla tüm kuyruğu silmek felaket olabilir.
# Belirli bir alıcıya ait kuyruktaki mesajları sil
su - zimbra
postsuper -d ALL deferred
# UYARI: Yukarıdaki komut TÜM ertelenmiş mesajları siler.
# Belirli bir queue ID'yi silmek için:
postsuper -d 3xK2F1ABC
# Belirli bir alıcıya ait mesajları bulmak ve silmek için
postqueue -p | grep "[email protected]" | awk '{print $1}' | tr -d '*!' | xargs -I{} postsuper -d {}
Üretim ortamında postsuper -d ALL komutunu çalıştırmadan önce iki kez düşünün. Bu komutu genellikle sadece test ortamlarında ya da gerçekten spam/kötü amaçlı içerikli mesajların kuyruğu doldurduğu durumlarda kullanıyorum.
Zimbra Mail Akışı için Pratik İzleme Scripti
Aşağıdaki script, günlük rutin kontrolleri otomatikleştirmek için iyi bir başlangıç noktasıdır:
#!/bin/bash
# Zimbra Mail Akış Özet Scripti
# /opt/zimbra/bin/mail_flow_check.sh olarak kaydedin
LOGFILE="/var/log/zimbra.log"
TODAY=$(date +"%b %e")
HOSTNAME=$(hostname)
echo "=== $HOSTNAME Zimbra Mail Akış Raporu ==="
echo "Tarih: $(date)"
echo ""
echo "--- Gönderilen Mesajlar ---"
SENT=$(grep "status=sent" $LOGFILE | grep "$TODAY" | wc -l)
echo "Başarıyla gönderilen: $SENT"
echo ""
echo "--- Ertelenen Mesajlar ---"
DEFERRED=$(grep "status=deferred" $LOGFILE | grep "$TODAY" | wc -l)
echo "Ertelenen: $DEFERRED"
echo ""
echo "--- Reddedilen Mesajlar ---"
REJECTED=$(grep "status=bounced" $LOGFILE | grep "$TODAY" | wc -l)
echo "Reddedilen: $REJECTED"
echo ""
echo "--- Kuyruk Durumu ---"
QUEUE_SIZE=$(postqueue -p | tail -n 1)
echo "$QUEUE_SIZE"
echo ""
echo "--- En Aktif Göndericiler (Top 5) ---"
grep "status=sent" $LOGFILE | grep "$TODAY" |
grep -oP "sasl_username=K[^s,]+" |
sort | uniq -c | sort -rn | head -5
Bu scripti cron’a ekleyerek sabah işe geldiğinizde mail durumunu hazır bulabilirsiniz:
# Crontab'a ekle (zimbra kullanıcısı olarak değil, root olarak)
# Her sabah 07:30'da çalıştır ve çıktıyı mail gönder
30 7 * * 1-5 /opt/zimbra/bin/mail_flow_check.sh | mail -s "Zimbra Mail Akış Raporu" [email protected]
Sonuç
Zimbra’da mesaj izleme ve mail akış kontrolü, reaktif değil proaktif bir tutum gerektiriyor. Kullanıcı şikayet etmeden önce anomalileri fark edebilmek, doğru araçları ve doğru log okuma alışkanlığını geliştirmekle mümkün.
Bu yazıda ele aldığımız araçları özetlemek gerekirse:
- zmmsgtrace: Belirli bir mesajı veya gönderici/alıcıyı hızlıca takip etmek için
- postqueue / postcat: Kuyruk yönetimi ve mesaj içeriği analizi için
- zmprov: Hesap ve domain bazlı mail politikalarını sorgulamak için
- grep + log analizi: Hızlı ad-hoc sorun tespiti için
- zmloggerctl: İstatistik toplama servisini yönetmek için
Bunların yanı sıra düzenli izleme scripti yazmak, blacklist/whitelist politikalarını merkezden yönetmek ve kuyruk durumunu periyodik kontrol etmek, beklenmedik olayları önlemenin en güvenilir yoludur. Mail sunucuları “kurun çalışsın” mantığıyla yönetilecek sistemler değildir; aksine sürekli dikkat isteyen, proaktif yönetim gerektiren altyapı bileşenleridir. Zimbra bize bu proaktif yönetim için oldukça kapsamlı araçlar sunuyor; kullanmak bizim elimizde.
