Mail sunucusu kuruyorsun, her şey hazır, Dovecot’u başlatıyorsun ve ilk kullanıcı şikayet ediyor: “Eski maillerim nerede?” İşte o an mail depolama formatlarını anlamak zorunlu hale geliyor. Dovecot iki ana mail depolama formatını destekler: Maildir ve Mbox. Bu iki format arasındaki farkı bilmeden sağlıklı bir mail sunucusu yönetemezsin.
Mail Depolama Formatlarını Anlamak
Maildir ve Mbox, e-postaların diskte nasıl saklandığını tanımlayan iki farklı yaklaşımdır. Hangisini seçeceğin performans, güvenilirlik ve kullanım senaryona göre değişir.
Mbox Formatı
Mbox, en eski mail depolama formatlarından biridir. Temel mantığı çok basit: tüm mailler tek bir dosyada, art arda yazılır. Her mesaj From satırıyla (evet, boşlukla) başlar.
Tipik bir mbox dosyasının içeriği şöyle görünür:
# Örnek mbox dosyası yapısı
cat /var/mail/kullanici
From [email protected] Mon Jan 15 10:23:45 2024
From: Gönderici <[email protected]>
To: [email protected]
Subject: Test Mesajı
Date: Mon, 15 Jan 2024 10:23:45 +0300
Bu bir test mesajıdır.
From [email protected] Mon Jan 15 11:00:00 2024
From: Başka Gönderici <[email protected]>
...
Mbox’ın dezavantajları gerçek dünyada ciddi sorunlara yol açar. Binlerce maili olan bir kullanıcı düşün. Tek dosya 2-3 GB’a ulaşmış. Bir mail silmek istiyorsun, sistemin tüm dosyayı yeniden yazması gerekiyor. Bu süreçte başka bir istemci aynı dosyaya erişmeye çalışırsa kilit çakışması yaşanır.
Mbox’ın sorunları:
- Dosya kilitleme: Aynı anda birden fazla istemci erişemez
- Performans: Büyük dosyalarda arama ve silme işlemleri yavaşlar
- Veri bütünlüğü riski: Dosya bozulursa tüm mailler tehlikeye girer
- Eş zamanlı erişim: IMAP’ın çoklu bağlantı özelliğiyle iyi çalışmaz
Maildir Formatı
Maildir, 1995 yılında Daniel Bernstein tarafından tasarlandı. Temel fikir şudur: her mail ayrı bir dosyadır. Dizin yapısı belirlidir ve locking mekanizmasına gerek yoktur.
# Maildir dizin yapısını görmek için
ls -la /home/kullanici/Maildir/
# Çıktı şuna benzer:
# drwx------ 2 kullanici mail 4096 Jan 15 10:00 cur/
# drwx------ 2 kullanici mail 4096 Jan 15 10:00 new/
# drwx------ 2 kullanici mail 4096 Jan 15 09:50 tmp/
Maildir üç alt dizinden oluşur:
- new/: Yeni gelen, henüz okunmamış mailler
- cur/: Daha önce görülmüş mailler (okunmuş ya da okunmamış)
- tmp/: Teslim süreci devam eden geçici dosyalar
Her mail dosyasının adı benzersizdir ve bilgi içerir:
# Maildir dosya adı örneği
ls /home/kullanici/Maildir/cur/
# 1705312425.M123456P7890.mailserver.example.com,S=2048:2,S
# Parçalara bölelim:
# 1705312425 = Unix timestamp
# M123456 = Mikrosaniye
# P7890 = Process ID
# mailserver.example.com = Hostname
# S=2048 = Dosya boyutu
# :2,S = Bayraklar (S = Seen/Okundu)
Dovecot Kurulumu ve Temel Yapılandırma
Önce Dovecot’u kuralım:
# Debian/Ubuntu için
apt-get update
apt-get install dovecot-core dovecot-imapd dovecot-pop3d
# RHEL/CentOS/AlmaLinux için
dnf install dovecot
# Servis durumunu kontrol et
systemctl status dovecot
Dovecot’un ana yapılandırma dosyası /etc/dovecot/dovecot.conf altında bulunur, asıl detaylar ise /etc/dovecot/conf.d/ dizininde ayrı dosyalara dağıtılmıştır.
Maildir Yapılandırması
Dovecot’ta Maildir kullanmak için 10-mail.conf dosyasını düzenliyoruz:
# Yapılandırma dosyasını aç
nano /etc/dovecot/conf.d/10-mail.conf
# mail_location parametresini ayarla
mail_location = maildir:~/Maildir
# Ya da sistem genelinde bir konum için
mail_location = maildir:/var/mail/%d/%n/Maildir
# %d = domain, %n = kullanıcı adı
Maildir kullanırken önemli parametreler:
- maildir_very_dirty_syncs: Performans için ama dikkatli kullan
- maildir_copy_with_hardlinks: Kopyalama işlemlerini hızlandırır
- maildir_stat_dirs: Dizin istatistiklerini sayar
# Gelişmiş Maildir yapılandırması
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir:LAYOUT=fs
maildir_copy_with_hardlinks = yes
maildir_very_dirty_syncs = no
# Namespace tanımı
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = Drafts
}
mailbox Junk {
special_use = Junk
}
mailbox Sent {
special_use = Sent
}
mailbox Trash {
special_use = Trash
}
}
Mbox Yapılandırması
Eğer eski bir sistemle uyumluluk gerekiyorsa ya da mbox kullanmak zorundaysan:
# Mbox için yapılandırma
nano /etc/dovecot/conf.d/10-mail.conf
# Klasik Unix mail spool yöntemi
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# Ya da tüm mailler tek dizinde
mail_location = mbox:~/mail/:INBOX=~/mail/inbox
Mbox ile çalışırken lock dosyaları önemlidir:
# Mbox lock ayarları - 10-mail.conf içinde
mbox_read_locks = fcntl
mbox_write_locks = dotlock fcntl
mbox_lock_timeout = 5 mins
mbox_dotlock_change_timeout = 2 mins
# Mbox dosyalarını düzenli tara
mbox_dirty_syncs = yes
mbox_very_dirty_syncs = no
Mbox’tan Maildir’e Geçiş
Bu senaryo gerçek dünyada çok sık karşılaştığım bir durum. Eski bir sunucu devraldın, her şey mbox formatında, kullanıcılar yavaş performanstan şikayet ediyor. Geçiş yapmak zorundasın.
Önce yedek al, sonra geçiş yap. Bu adımı atlama.
# Önce mevcut mail verilerini yedekle
tar -czf /backup/mail-backup-$(date +%Y%m%d).tar.gz /var/mail/
tar -czf /backup/home-mail-backup-$(date +%Y%m%d).tar.gz /home/*/mail/
# Yedek boyutunu kontrol et
ls -lh /backup/mail-backup-*.tar.gz
Dönüştürme işlemi için mb2md aracını kullanabiliriz:
# mb2md kurulumu
apt-get install mb2md
# Tek kullanıcı için dönüştürme
mb2md -s /var/mail/kullanici -d /home/kullanici/Maildir
# Birden fazla klasörlü mbox için
mb2md -s /home/kullanici/mail/ -d /home/kullanici/Maildir -R
# Tüm kullanıcılar için toplu dönüştürme scripti
for user in /home/*/; do
username=$(basename "$user")
if [ -f "/var/mail/$username" ]; then
echo "Dönüştürülüyor: $username"
mb2md -s /var/mail/$username -d /home/$username/Maildir
chown -R $username:mail /home/$username/Maildir
chmod -R 700 /home/$username/Maildir
fi
done
Dönüştürme sonrası izinleri kontrol et:
# İzinleri kontrol et ve düzelt
find /home/kullanici/Maildir -type d -exec chmod 700 {} ;
find /home/kullanici/Maildir -type f -exec chmod 600 {} ;
chown -R kullanici:mail /home/kullanici/Maildir
# Maildir yapısının doğru oluştuğunu kontrol et
ls -la /home/kullanici/Maildir/
ls -la /home/kullanici/Maildir/new/
ls -la /home/kullanici/Maildir/cur/
Kimlik Doğrulama ve Kullanıcı Yönetimi
Mail formatından bağımsız olarak, Dovecot’un doğru çalışması için authentication ayarları kritiktir:
# 10-auth.conf dosyasını düzenle
nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
disable_plaintext_auth = yes
# Sistem kullanıcıları için
!include auth-system.conf.ext
# Passwd-file kullananlar için
#!include auth-passwdfile.conf.ext
Sanal kullanıcılarla çalışıyorsan passwd-file yöntemi işe yarar:
# Sanal kullanıcı dosyası oluştur
nano /etc/dovecot/users
# Format: kullanici:parola:uid:gid:gecos:home:shell:extra_fields
# Örnek:
[email protected]:{PLAIN}gizliparola:5000:5000::/var/mail/virtual/example.com/ahmet::userdb_mail=maildir:/var/mail/virtual/example.com/ahmet/Maildir
# Dovecot şifreli parola oluştur
doveadm pw -s SHA512-CRYPT -p "güçlüparola123"
Performans Optimizasyonu
Maildir formatında binlerce kullanıcı olduğunda indeks dosyaları hayat kurtarır:
# 10-mail.conf içinde index yapılandırması
mail_location = maildir:~/Maildir:INDEX=/var/dovecot/index/%d/%n
# Index dizinini oluştur
mkdir -p /var/dovecot/index
chown -R vmail:vmail /var/dovecot/index
# Cache ayarları için 15-mailboxes.conf
nano /etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
mailbox INBOX {
auto = subscribe
}
}
Mail cache boyutunu optimize etmek için:
# 10-mail.conf içine ekle
mail_cache_min_mail_count = 0
mail_cache_unaccessed_field_drop = 30 days
mail_index_rewrite_min_log_bytes = 8k
mail_index_rewrite_max_log_bytes = 128k
Sorun Giderme
Gerçek dünyada en sık karşılaştığım sorunları ve çözümlerini paylaşayım.
Problem 1: Kullanıcı mail göremiyorsa
# Dovecot log dosyasını kontrol et
tail -f /var/log/dovecot.log
tail -f /var/log/mail.log
# Kullanıcı için mail konumunu manuel test et
doveadm -Dv auth test [email protected] parola
# Mail dizinini kontrol et
ls -la /home/kullanici/Maildir/
doveadm mailbox list -u [email protected]
Problem 2: Index bozulması
# Index dosyalarını yeniden oluştur
doveadm force-resync -u [email protected] INBOX
# Tüm kullanıcılar için
doveadm force-resync -A INBOX
# Index dosyalarını manuel sil ve yeniden oluştur
rm -rf /home/kullanici/Maildir/.dovecot*
doveadm force-resync -u [email protected] '*'
Problem 3: Mbox kilit sorunları
# Kalan lock dosyalarını temizle
find /var/mail/ -name "*.lock" -mmin +60 -delete
find /home/ -name "*.lock" -path "*/mail/*" -mmin +60 -delete
# Dovecot'u yeniden başlat
systemctl restart dovecot
# Mbox dosyasının bütünlüğünü kontrol et
formail -s cat < /var/mail/kullanici > /dev/null
echo "Çıkış kodu: $?"
Quota Yönetimi
Mail depolama formatından bağımsız olarak quota yönetimi önemlidir:
# Quota plugin'i etkinleştir
nano /etc/dovecot/conf.d/10-mail.conf
mail_plugins = $mail_plugins quota
# 90-quota.conf dosyasını düzenle
nano /etc/dovecot/conf.d/90-quota.conf
plugin {
quota = maildir:User quota
quota_rule = *:storage=1G
quota_rule2 = Trash:storage=100M
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
}
# Quota durumunu kontrol et
doveadm quota get -u [email protected]
# Tüm kullanıcıların quota kullanımı
doveadm quota get -A
Maildir Senkronizasyonu ve Yedekleme
Maildir formatının en büyük avantajı senkronizasyon ve yedeklemenin kolaylığıdır:
# Rsync ile Maildir yedekleme
rsync -avz --delete
/home/kullanici/Maildir/
backup-server:/backup/mail/kullanici/Maildir/
# Tüm kullanıcıları yedekle
for user_dir in /home/*/Maildir/; do
username=$(echo "$user_dir" | cut -d'/' -f3)
rsync -avz --delete
"$user_dir"
backup-server:/backup/mail/$username/Maildir/
echo "$username yedeklendi"
done
# imapsync ile sunucular arası mail taşıma
# apt-get install imapsync
imapsync
--host1 eski-sunucu.example.com
--user1 [email protected]
--password1 eskiparola
--host2 yeni-sunucu.example.com
--user2 [email protected]
--password2 yeniparola
--ssl1 --ssl2
Dovecot ile Birden Fazla Format Kullanmak
Bazı senaryolarda hem eski hem yeni sistemi geçiş sürecinde bir arada çalıştırmak gerekir:
# Namespace ile farklı formatlar tanımlanabilir
nano /etc/dovecot/conf.d/10-mail.conf
# Ana namespace - Maildir
namespace inbox {
inbox = yes
location = maildir:~/Maildir
}
# Arşiv namespace - Mbox (eski mailleri okumak için)
namespace archive {
prefix = Archive/
location = mbox:~/mail/archive:INBOX=~/mail/archive/inbox
list = yes
subscriptions = no
}
Güvenlik Ayarları
# 10-ssl.conf dosyasını düzenle
nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
# Dovecot'un işletim sistemi izinleri
# mail grubunu kontrol et
ls -la /var/mail/
# drwxrwsr-x 2 root mail 4096 -> setgid bit olmalı
# Dovecot servis kullanıcısını kontrol et
grep -i "mail_uid|mail_gid" /etc/dovecot/conf.d/10-mail.conf
Sonuç
Maildir ve Mbox arasındaki seçim çoğu zaman netlik kazanıyor: yeni kurulumlar için kesinlikle Maildir kullan. Performans, güvenilirlik, eş zamanlı erişim ve yedekleme kolaylığı açısından Maildir her senaryoda üstün geliyor.
Mbox’ı yalnızca şu durumlarda kullanmak mantıklı: eski sistemlerle zorunlu uyumluluk, çok basit ve tek kullanıcılı bir yapı ya da mbox formatında saklanan arşiv maillerine erişim gereksinimi.
Eski bir mbox sistemini Maildir’e taşırken dikkat edilmesi gereken en kritik noktalar şunlar:
- Her şeyi yedeklemeden geçiş yapma
- Dönüştürme sonrası dosya izinlerini mutlaka kontrol et
- Dovecot’u yeniden başlatmadan önce yapılandırmanın doğruluğunu
doveadmaraçlarıyla test et - Kullanıcılara geçiş öncesinde haber ver ve kısa bir bakım penceresi planla
Dovecot, her iki formatı da olgunlukla destekliyor. Ama modern bir mail altyapısı kuracaksan Maildir + Dovecot kombinasyonu sağlam, ölçeklenebilir ve yönetimi kolay bir çözüm sunuyor. Quota yönetimi, IMAP namespace’leri ve index optimizasyonlarıyla birleşince kurumsal düzeyde bir mail sistemi çıkıyor ortaya.