Postfix maili sunucuya kabul etmeyi bilir ama kullanıcıların o maili telefonundan ya da Outlook'tan okumasını sağlayamaz; o iş Dovecot'a düşer. Dovecot yapılandırması, posta kutularının diskte nasıl duracağını, kullanıcının hangi şifreyle doğrulanacağını, IMAP ve POP3 servislerinin hangi portlarda ve hangi şifreleme seviyesiyle dinleyeceğini belirler. Yanlış kurulmuş bir Dovecot, "şifrem doğru ama bağlanamıyorum" hatasından sessizce kaybolan maillere kadar uzanan bir sorun listesi üretir.
Bu rehberde Dovecot'un yapılandırma dosyalarını mantıklı bir sırayla ele alacağız: önce dosya düzeni ve posta kutusu biçimi, sonra kimlik doğrulama, sonra SSL, ardından Postfix ile konuşan SASL soketi, kota ve Sieve filtreleri. Her adımda hem çalışan yapılandırma parçasını hem de doğrulama komutunu vereceğim, çünkü Dovecot'ta bir ayarın etkili olup olmadığını doveconf ile saniyeler içinde görebilirsin.
Dosya Düzeni ve İlk Doğrulama#
Debian ve Ubuntu'da Dovecot, tek bir dev dosya yerine /etc/dovecot/conf.d/ altında numaralandırılmış parçalar kullanır. Ana dosya /etc/dovecot/dovecot.conf bu parçaları sırayla dâhil eder. Numaralar önemlidir: 10-mail.conf 20-imap.conf'tan önce okunur ve aynı ayar iki yerde tanımlıysa sonra okunan kazanır.
# Etkin yapılandırmanın tamamını (varsayılanlar dâhil) gör
doveconf -n
# Tek bir ayarın gerçek değerini oku
doveconf mail_location
doveconf ssl_cert
# Söz dizimi kontrolü ve yeniden yükleme
dovecot -n > /dev/null && systemctl reload dovecot
doveconf -n çıktısı, tıpkı Postfix'teki postconf -n gibi, sadece varsayılandan farklı olan satırları gösterir. Bir sorunu araştırırken önce bu çıktıya bak; ham dosyaları okumak neredeyse her zaman zaman kaybıdır. Hangi servislerin hangi portta dinlediğini de doğrulamayı alışkanlık hâline getir:
ss -lntp | grep dovecot
# Beklenen çıktı:
# LISTEN 0 100 0.0.0.0:143 users:(("dovecot",...)) IMAP (STARTTLS)
# LISTEN 0 100 0.0.0.0:993 users:(("dovecot",...)) IMAPS (örtük TLS)
# LISTEN 0 100 0.0.0.0:110 users:(("dovecot",...)) POP3
# LISTEN 0 100 0.0.0.0:995 users:(("dovecot",...)) POP3S
Posta Kutusu Biçimi: Maildir mi mbox mu#
Dovecot iki temel depolama biçimini destekler. mbox, bir klasördeki tüm mailleri tek bir dosyada tutar; Maildir ise her maili ayrı dosya olarak saklar. Yeni bir kurulumda tereddütsüz Maildir seç. Sebebi basit: eşzamanlı erişimde kilit çakışması yaşamaz, tek bir bozuk mail tüm klasörü götürmez ve yedekleme araçları yalnızca değişen dosyaları kopyalar.
# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n/Maildir
mail_privileged_group = mail
namespace inbox {
inbox = yes
separator = /
mailbox Drafts { special_use = \Drafts; auto = subscribe }
mailbox Sent { special_use = \Sent; auto = subscribe }
mailbox Junk { special_use = \Junk; auto = subscribe }
mailbox Trash { special_use = \Trash; auto = subscribe }
}
Buradaki %d alan adını, %n ise kullanıcı adının @ öncesi kısmını temsil eder. Yani [email protected] kutusu /var/mail/vhosts/firmaniz.com/ali/Maildir altında oluşur. special_use etiketleri, istemcilerin hangi klasörün "Gönderilenler", hangisinin "Çöp Kutusu" olduğunu tahmin etmek yerine bilmesini sağlar; bu etiket yoksa Outlook kendi başına ikinci bir "Sent Items" klasörü açar ve kullanıcı iki yerde gönderilmiş mail arar.
| Özellik | Maildir | mbox |
|---|---|---|
| Depolama | Mail başına bir dosya | Klasör başına tek dosya |
| Eşzamanlı erişim | Kilit gerektirmez | Dosya kilidi gerekir |
| Yedekleme | Sadece yeni dosyalar | Tüm dosya yeniden kopyalanır |
| Tek mail silme | Dosyayı sil | Dosyayı yeniden yaz |
| Büyük kutuda performans | İyi | Belirgin şekilde düşer |
IMAP ile POP3 arasındaki davranış farkını ve hangisini kullanman gerektiğini merak ediyorsan IMAP ve POP3 farkı yazısı bu kararı netleştirir.
Kimlik Doğrulama: Kullanıcılar Nerede Duruyor#
Dovecot'ta kimlik doğrulama iki ayrı adımdan oluşur ve bu ayrımı anlamak sorun gidermenin yarısıdır. passdb şifreyi doğrular; userdb ise kullanıcının UID, GID ve ana dizin bilgisini döndürür. Küçük bir kurulumda ikisi de düz bir dosyadan okunabilir.
# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
passdb {
driver = passwd-file
args = scheme=SHA512-CRYPT username_format=%u /etc/dovecot/users
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
disable_plaintext_auth = yes satırı, TLS kurulmadan düz şifre gönderilmesini reddeder; localhost'tan gelen bağlantılar bundan muaftır, bu yüzden Postfix'in SASL soketi etkilenmez. Kullanıcı dosyasındaki şifreler asla düz metin olmamalıdır:
# Yeni bir kullanıcı için şifre hash'i üret
doveadm pw -s SHA512-CRYPT
# Enter new password: ...
# {SHA512-CRYPT}$6$rounds=5000$...
# /etc/dovecot/users satır biçimi:
# [email protected]:{SHA512-CRYPT}$6$rounds=5000$...
Dosya izinlerini de sıkı tut: chown root:dovecot /etc/dovecot/users && chmod 640 /etc/dovecot/users. Kimlik doğrulamada bir sorun yaşarsan tahmin yürütme, doğrudan test et:
# Kullanıcı adı ve şifre doğru mu, hangi userdb değerleri dönüyor
doveadm auth test [email protected]
doveadm user [email protected]
Bu iki komut, "şifre yanlış" ile "kullanıcı bulunamadı" arasındaki farkı net biçimde gösterir. Kullanıcı sayısı arttıkça passwd-file yerine MySQL ya da LDAP sürücüsüne geçmek mantıklıdır; mantık aynı kalır, yalnızca driver ve args satırları değişir.
SSL Sertifikası ve Şifreleme Seviyesi#
Dovecot'un sunduğu sertifika, kullanıcıların istemcisinde görünen sertifikadır ve alan adı uyuşmazlığı ilk açılışta korkutucu bir uyarı üretir. Let's Encrypt sertifikasını doğrudan kullanabilirsin.
# /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.firmaniz.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.firmaniz.com/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
Baştaki < işareti bir yazım hatası değildir; Dovecot'a "bu değeri dosyadan oku" demenin yoludur. ssl = required ayarı, TLS olmadan hiçbir oturuma izin vermez. Sertifikanın hangi isimler için geçerli olduğunu ve gerçekten sunulduğunu dışarıdan kontrol et:
# IMAPS (993) üzerinde sunulan sertifikayı incele
openssl s_client -connect mail.firmaniz.com:993 -servername mail.firmaniz.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -dates
# STARTTLS ile 143 portunu test et
openssl s_client -connect mail.firmaniz.com:143 -starttls imap </dev/null
Sertifika yenilendiğinde Dovecot'un dosyayı yeniden okuması gerekir. certbot yenileme kancasına systemctl reload dovecot eklemezsen, 90 gün sonra kullanıcıların hepsi aynı anda sertifika uyarısı almaya başlar. Aynı kanca içine Postfix reload'ını da koy; Postfix main.cf yapılandırması yazısında bu ayrıntıyı ayrıca vurgulamıştım.
Postfix ile Konuşan SASL Soketi#
Kullanıcının IMAP şifresiyle SMTP üzerinden de mail gönderebilmesi için Postfix'in Dovecot'a "bu kullanıcı gerçekten bu mu" diye sorabilmesi gerekir. Bu köprü bir Unix soketidir ve iki tarafın da aynı yolu göstermesi şarttır.
# /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
Soketin Postfix'in chroot dizini olan /var/spool/postfix/ içinde oluşturulduğuna dikkat et; Postfix bu dizinin dışını göremez. Postfix tarafında karşılığı smtpd_sasl_path = private/auth satırıdır — yol göreceli yazılır çünkü Postfix zaten kendi kök dizini içindedir.
LMTP soketi ise teslimat içindir. Postfix'e maili yerel dosyaya kendisi yazmak yerine Dovecot'a devretmesini söylersen, kota kontrolü, Sieve filtreleri ve indeks güncellemesi tek elden yapılır:
# /etc/postfix/main.cf tarafında
mailbox_transport = lmtp:unix:private/dovecot-lmtp
virtual_transport = lmtp:unix:private/dovecot-lmtp
Bu satırlar olmadan Postfix maili doğrudan Maildir'e yazar, Dovecot da bir sonraki taramada fark eder; çalışır ama kota aşımını fark etmez ve Sieve kuralları hiç işlemez.
Kota ve Sieve Filtreleri#
Disk dolduğunda hangi kullanıcının ne kadar yer kapladığını bilmek istersin. Dovecot'un kota eklentisi hem sınırı uygular hem de kullanıcı doluluk oranına yaklaştığında uyarı maili gönderebilir.
# /etc/dovecot/conf.d/90-quota.conf
plugin {
quota = maildir:User quota
quota_rule = *:storage=2G
quota_rule2 = Trash:storage=+200M
quota_status_success = DUNNO
quota_status_nouser = DUNNO
quota_status_overquota = "552 5.2.2 Mailbox is full"
}
quota_rule2 satırı Çöp Kutusu'na ana kotanın üstüne 200 MB pay verir; böylece kullanıcı yer açmak için mail silmeye çalıştığında "silemiyorum çünkü kota dolu" kısır döngüsüne girmez. Doluluk durumunu her zaman komut satırından kontrol edebilirsin:
doveadm quota get -u [email protected]
# Quota name Type Value Limit %
# User quota STORAGE 1583104 2097152 75
Sieve ise sunucu tarafında çalışan filtre dilidir. İstemciye bağlı olmadığı için kurallar telefonda da, web mailde de aynı biçimde işler.
# /var/mail/vhosts/firmaniz.com/ali/.dovecot.sieve
require ["fileinto", "mailbox"];
# Spam olarak işaretlenenleri Junk klasörüne taşı
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
stop;
}
# Fatura maillerini ayrı klasöre topla
if header :contains "subject" "Fatura" {
fileinto :create "Muhasebe";
}
Spam başlığını üreten katman Dovecot değil, önündeki içerik filtresidir; Rspamd kurulumu yazısında bu başlıkların nasıl eklendiğini anlattım. Kullanıcıların kendi filtrelerini web arayüzünden yönetmesini istersen managesieve servisini (port 4190) açman gerekir.
Sık Yapılan Hatalar ve Sorun Giderme#
Dovecot sorunlarının büyük çoğunluğu üç kaynaktan çıkar: dosya izinleri, yol uyuşmazlığı ve sertifika. Aşağıdaki liste, log'da göreceğin satırla gerçek sebebi eşleştiriyor.
Permission deniedhatası Maildir üzerinde.mail_locationiçindeki dizinin sahibi,userdbiçinde tanımladığınuid/gidile aynı olmalıdır.chown -R vmail:vmail /var/mail/vhostskomutu çoğu kurulumda sorunu bitirir.Auth process diedya da soket bulunamadı. Postfix'insmtpd_sasl_pathdeğeri ile Dovecot'ununix_listeneryolu birbirini tutmuyordur. Soketin gerçekten var olduğunuls -l /var/spool/postfix/private/authile doğrula.- Kullanıcı bağlanıyor ama kutu boş görünüyor. Maildir yolunda
%d/%nkullandın ama kullanıcı adınıusername_format=%uyerine%nile eşleştirdin; alan adı düşünce Dovecot başka bir dizine bakar.doveadm userçıktısındakihomedeğerini gerçek dizinle karşılaştır. - İstemci sertifika uyarısı veriyor. Kullanıcıya
mail.firmaniz.comyerinefirmaniz.comyazdırıyorsundur ya da sertifika yenilendikten sonra reload yapılmamıştır. - POP3 açık olduğu hâlde mailler kayboluyor. POP3 varsayılan olarak indirdiğini sunucudan siler. Kullanıcı hem telefondan hem bilgisayardan bağlanıyorsa POP3 yerine IMAP kullanmalı.
Log seviyesini geçici olarak yükseltmek, tahmin yürütmekten çok daha hızlıdır:
# /etc/dovecot/conf.d/10-logging.conf — sorun giderirken aç, sonra kapat
auth_verbose = yes
auth_debug = yes
mail_debug = yes
journalctl -u dovecot -f
# ya da
tail -f /var/log/mail.log | grep dovecot
Bu ayrıntı seviyesi disk yer, sorun çözülünce geri kapat. Tüm bu yığını kendin kurmak yerine hazır teslim almayı tercih ediyorsan SMTP sunucu paketlerimiz Postfix, Dovecot ve içerik filtresi kurulu gelir; kendi kurulumunu yapmak istersen VDS sunucularında tam root erişimin olur.
Sıkça Sorulan Sorular#
Dovecot'ta IMAP mı POP3 mü kullanmalıyım#
Birden fazla cihazdan aynı posta kutusuna erişiyorsan IMAP kullan. IMAP mailleri sunucuda tutar ve okundu/silindi durumunu tüm cihazlar arasında eşitler. POP3 ise varsayılan davranışta maili indirip sunucudan siler, yani telefonundan indirdiğin bir maili bilgisayarında bulamazsın. POP3'ü yalnızca tek bir makineden bağlanan ve sunucuda yer tutmak istemeyen özel senaryolarda tercih et.
Dovecot yapılandırmasını değiştirdim ama etkili olmuyor, neden#
En yaygın sebep aynı ayarın conf.d altındaki iki farklı dosyada tanımlı olması ve sonra okunanın kazanmasıdır. doveconf -n çıktısı gerçekte etkin olan değeri gösterir; dosyada yazan değil, burada görünen geçerlidir. İkinci sebep servisin yeniden yüklenmemiş olmasıdır: değişiklikten sonra systemctl reload dovecot çalıştır. Söz dizimi hatası varsa reload sessizce başarısız olabilir, bu yüzden önce dovecot -n ile kontrol et.
Kullanıcı şifresini komut satırından nasıl değiştiririm#
doveadm pw -s SHA512-CRYPT komutunu çalıştır, yeni şifreyi iki kez gir ve ekrana basılan hash'i kopyala. Ardından kullanıcı veritabanındaki ilgili satırın şifre alanını bu yeni hash ile değiştir; passwd-file kullanıyorsan /etc/dovecot/users dosyasındaki satırı düzenlemen yeterlidir. Dosya tabanlı passdb'de reload gerekmez, Dovecot dosyayı her doğrulamada okur. Değişikliği doveadm auth test ile doğrulamayı unutma.
Maildir'i mbox'a ya da tersine dönüştürebilir miyim#
Evet, doveadm sync komutu iki farklı biçim arasında dönüşüm yapabilir. Kaynağı ve hedefi ayrı yollar olarak verip senkronizasyon çalıştırırsın; işlem sırasında kullanıcıların bağlantısını kesmen daha güvenlidir çünkü açık bir IMAP oturumu dönüşüm sırasında indeks bozulmasına yol açabilir. Dönüşüm öncesi mutlaka tam yedek al; büyük kutularda işlem uzun sürer ve yarıda kesilmesi hâlinde geri dönüş yedekten yapılır.
Dovecot kota ayarı yaptım ama uygulanmıyor#
Kotanın uygulanabilmesi için mailin Dovecot üzerinden teslim edilmesi gerekir. Postfix maili doğrudan Maildir'e yazıyorsa Dovecot teslim anında devrede olmadığı için kotayı kontrol edemez. Çözüm, Postfix'te virtual_transport = lmtp:unix:private/dovecot-lmtp satırını tanımlayıp teslimatı Dovecot'un LMTP servisine devretmektir. Ayrıca kota eklentisinin mail_plugins listesinde etkin olduğundan emin ol.
IMAP bağlantısını dışarıdan nasıl test ederim#
En hızlı yol openssl s_client -connect mail.firmaniz.com:993 komutuyla bağlanıp elle IMAP komutu göndermektir; bağlantı kurulduktan sonra a1 LOGIN kullanici sifre yazarak yanıtı görebilirsin. Sunucu a1 OK dönerse kimlik doğrulama çalışıyordur. Sertifika sorunlarını ayıklamak için aynı komutun çıktısındaki Verify return code satırına bak; sıfırdan farklı bir değer zincir ya da isim uyuşmazlığına işaret eder.
Kapanış#
Dovecot'u kararlı hâle getiren şey, karmaşık ayarlar değil birkaç doğru temel karardır: Maildir biçimini seçmek, kullanıcı dizinlerinin sahipliğini vmail kullanıcısında toplamak, TLS'i zorunlu kılmak ve teslimatı LMTP üzerinden Dovecot'a devretmek. Bir sorun çıktığında da refleksin dosya okumak değil doveconf -n, doveadm auth test ve doveadm user çalıştırmak olsun; bu üç komut sorunların çoğunu ilk dakikada daraltır. Sertifika yenileme kancasına reload eklemeyi de kurulum günü hallet, üç ay sonra hatırlamak zor olur.
Kendi posta sunucunu baştan sona kurup yönetmek istiyorsan VDS ve sanal sunucu paketlerimizde tam root erişimiyle bu yapılandırmayı uygulayabilirsin. Postfix, Dovecot ve spam filtresi kurulu bir sistemi hazır teslim almayı tercih edersen SMTP sunucu paketlerimize bakabilir, sunucu bakımını üstlenmek istemiyorsan kurumsal e-posta çözümümüzle posta kutularını doğrudan kullanmaya başlayabilirsin.