Kurumsal ortamlarda birden fazla kullanıcının aynı posta kutusuna erişmesi gerektiği durumlar oldukça yaygın. Muhasebe departmanının ortak bir [email protected] adresi kullanması, destek ekibinin [email protected] kutusunu paylaşması ya da yöneticilerin birbirinin yerine bakması gereken senaryolar bunların başında geliyor. Dovecot, bu ihtiyaçları karşılamak için güçlü bir shared mailbox altyapısı sunuyor. Ancak yapılandırma süreci biraz karmaşık olabiliyor. Bu yazıda sıfırdan çalışan bir shared mailbox kurulumunu adım adım ele alacağız.
Shared Mailbox Nasıl Çalışır?
Dovecot’ta shared mailbox temelde iki farklı yaklaşımla sağlanabilir. Birinci yöntemde bir kullanıcı kendi mailbox’ının belirli klasörlerini diğer kullanıcılarla paylaşır. İkinci yöntemde ise herkesin eriştiği, sahipliği belirli bir kullanıcıya ait olan özel bir public mailbox oluşturulur.
Birinci yöntem (user-to-user sharing): [email protected] kullanıcısı “Projeler” klasörünü [email protected] ile paylaşır. Ayşe kendi mail istemcisinden bu klasörü görebilir ve yazabilir.
İkinci yöntem (public mailboxes): [email protected] gibi bir sistem hesabına ait posta kutusu, destek ekibindeki tüm kullanıcılara aynı anda açılır. Herkes aynı mailbox’ı görür, okundu/okunmadı durumu da paylaşılır.
Bu yazıda ağırlıklı olarak kurumsal ortamlarda daha sık kullanılan public/shared mailbox yöntemini ele alacağız, ardından kullanıcılar arası paylaşımı da göstereceğiz.
Ön Hazırlıklar ve Ortam Bilgisi
Anlatım boyunca Ubuntu 22.04 üzerinde çalışan bir Dovecot kurulumu kullanacağız. Postfix ile entegre çalışan, Maildir formatında depolama yapan tipik bir kurulum düşünün.
# Dovecot versiyonunu ve kurulu modülleri kontrol et
dovecot --version
dovecot --build-options | grep -i storage
# Mevcut yapılandırma dosyalarını listele
ls /etc/dovecot/conf.d/
Shared mailbox özelliği için acl plugin’ine ihtiyacınız var. Bu plugin genellikle dovecot-core paketiyle birlikte geliyor ama kontrol etmekte fayda var:
# Gerekli paketlerin varlığını kontrol et
dpkg -l | grep dovecot
apt list --installed 2>/dev/null | grep dovecot
# Eksik varsa yükle
apt install dovecot-core dovecot-imapd dovecot-pop3d
Yapılandırma dosyalarını düzenlemeden önce yedek almayı alışkanlık haline getirin:
cp -r /etc/dovecot /etc/dovecot.bak.$(date +%Y%m%d)
ACL Plugin’ini Aktifleştirme
Shared mailbox’ların can damarı ACL (Access Control List) sistemi. Önce bunu aktifleştirmemiz gerekiyor.
/etc/dovecot/conf.d/10-mail.conf dosyasını açın ve mail_plugins satırını bulun:
# Mevcut mail_plugins ayarını göster
grep -n "mail_plugins" /etc/dovecot/conf.d/10-mail.conf
Ardından dosyayı düzenleyin:
nano /etc/dovecot/conf.d/10-mail.conf
Şu satırları ekleyin veya güncelleyin:
# Mail depolama konumu - Maildir formatı
mail_location = maildir:~/Maildir
# ACL plugin'ini etkinleştir
mail_plugins = acl
# Namespace tanımlaması - bu kısım önemli
namespace inbox {
type = private
separator = /
prefix =
inbox = yes
}
# Shared namespace - diğer kullanıcıların mailbox'larına erişim
namespace shared {
type = shared
separator = /
prefix = shared/%%u/
location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
subscriptions = yes
list = children
}
# Public mailboxes namespace
namespace public {
type = public
separator = /
prefix = public/
location = maildir:/var/mail/public
subscriptions = yes
list = yes
}
IMAP Plugin Yapılandırması
/etc/dovecot/conf.d/20-imap.conf dosyasına da ACL plugin’ini eklemeliyiz:
protocol imap {
mail_plugins = $mail_plugins imap_acl
# İstemci uyumluluğu için
imap_client_workarounds = delay-newmail
}
ACL Yapılandırma Dosyası
Şimdi asıl ACL ayarlarını yapacağımız dosyayı oluşturalım. /etc/dovecot/conf.d/90-acl.conf dosyasını oluşturun:
plugin {
# ACL backend - vfile: ACL kurallarını dosyada sakla
acl = vfile
# Global ACL dosyası - tüm kullanıcılara uygulanır
acl_globals_only = no
# Kullanıcıların kendi ACL'lerini yönetebilmesi için
# imap_acl plugin gereklidir
# Shared mailbox görünürlüğü için dizin sözlüğü
acl_shared_dict = file:/var/lib/dovecot/db/shared-mailboxes.db
}
Sözlük dosyası için dizini oluşturun:
mkdir -p /var/lib/dovecot/db
chown dovecot:dovecot /var/lib/dovecot/db
Public Mailbox Oluşturma
Şimdi gerçek dünya senaryosuna geçelim. Destek ekibi için bir public mailbox oluşturalım.
# Public mailbox ana dizinini oluştur
mkdir -p /var/mail/public
# Maildir yapısını oluştur
maildirmake /var/mail/public/INBOX
# veya manuel olarak:
mkdir -p /var/mail/public/{cur,new,tmp}
# Dovecot subscriptions ve acl dosyaları için gerekli yapı
mkdir -p /var/mail/public/.Gelen
mkdir -p /var/mail/public/.Gelen/{cur,new,tmp}
mkdir -p /var/mail/public/.Gonderilen
mkdir -p /var/mail/public/.Gonderilen/{cur,new,tmp}
# İzinleri ayarla
chown -R vmail:vmail /var/mail/public
chmod -R 770 /var/mail/public
Şimdi bu public mailbox için ACL dosyasını oluşturalım. Public mailbox’lar için ACL dosyası doğrudan dizine yerleştirilir:
# /var/mail/public/dovecot-acl dosyasını oluştur
cat > /var/mail/public/dovecot-acl << 'EOF'
# Format: <id> <rights>
# id: authenticated, anyone, user=kullanici, group=grup
# rights: l=list, r=read, w=write, s=keep-seen, i=insert, p=post,
# e=expunge, k=create, x=delete, a=admin
# Tüm kimlik doğrulamalı kullanıcılar okuyabilir
authenticated lrwsipekxa
# Belirli kullanıcılar için özel izinler (opsiyonel)
# user=ali lrwsipekxa
EOF
chown vmail:vmail /var/mail/public/dovecot-acl
Kullanıcılar Arası Mailbox Paylaşımı
Bir kullanıcının belirli klasörünü başkasıyla paylaşması için IMAP üzerinden ACL komutu kullanılabilir. Ama sistem yöneticisi olarak bunu komut satırından da yapabilirsiniz.
Kullanıcı ali nin “Projeler” klasörünü ayse ile paylaşmak için:
# Ali'nin Maildir dizininde ACL dosyası oluştur
cat > /home/ali/Maildir/.Projeler/dovecot-acl << 'EOF'
user=ayse lrwsipek
EOF
chown ali:mail /home/ali/Maildir/.Projeler/dovecot-acl
Aynı işlemi Dovecot’ın kendi araçlarıyla da yapabilirsiniz:
# doveadm ile ACL yönetimi
doveadm acl set -u ali INBOX/Projeler user=ayse lookup read write write-seen write-deleted insert post create expunge
# Mevcut ACL'leri listele
doveadm acl get -u ali INBOX/Projeler
# Bir kullanıcının erişimini kaldır
doveadm acl delete -u ali INBOX/Projeler user=ayse
Shared Mailbox Dizini Senkronizasyonu
Kullanıcıların diğerlerinin paylaştığı mailbox’ları görebilmesi için bir dizin mekanizması gerekiyor. acl_shared_dict ile bunu yönetiyoruz.
# Paylaşım bilgilerini shared-mailboxes.db dosyasına ekle
# Format: priv/user=sahip/diger_kullanici = 1
# Ali'nin Projeler klasörünü Ayşe ile paylaştığını kaydet
doveadm dict set -u ayse user/shared/ali file:/var/lib/dovecot/db/shared-mailboxes.db ""
# Alternatif olarak doğrudan dosyayı düzenleyebilirsiniz
# Format flat file ise:
cat >> /var/lib/dovecot/db/shared-mailboxes.db << 'EOF'
/priv/user=ali/ayse 1
EOF
Gerçek ortamlarda bu işlemi daha dinamik hale getirmek için SQL backend kullanmak mantıklı. /etc/dovecot/conf.d/90-acl.conf dosyasını güncelleyin:
plugin {
acl = vfile
# SQL tabanlı shared dictionary (production ortamı için önerilen)
acl_shared_dict = proxy::acl
# Alternatif: basit dosya bazlı (test/küçük ortamlar için)
# acl_shared_dict = file:/var/lib/dovecot/db/shared-mailboxes.db
}
dict {
acl = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
Troubleshooting: Yaygın Sorunlar ve Çözümleri
Shared mailbox kurulumunda en sık karşılaşılan sorunları ve çözümlerini inceleyelim.
Sorun 1: Paylaşılan klasörler IMAP istemcisinde görünmüyor
# Dovecot log'larını kontrol et
tail -f /var/log/dovecot.log
journalctl -u dovecot -f
# Namespace'in doğru yapılandırıldığını doğrula
doveadm user ali 2>&1 | grep -i namespace
# IMAP komutları ile manuel test
# Telnet veya openssl ile bağlanıp LIST komutunu dene
openssl s_client -connect mail.sirket.com:993
# Bağlandıktan sonra:
# a login [email protected] sifre
# a LIST "" "shared/*"
Sorun 2: İzin hataları
# ACL dosyasının varlığını ve içeriğini kontrol et
find /home/ali/Maildir -name "dovecot-acl" -exec echo "Dosya: {}" ; -exec cat {} ;
# Dizin izinlerini kontrol et
ls -la /home/ali/Maildir/.Projeler/
# Dovecot process'inin dosyalara erişebildiğini doğrula
sudo -u vmail ls /home/ali/Maildir/.Projeler/
Sorun 3: Public mailbox’a yazılamıyor
# İzin kontrolü
ls -la /var/mail/public/
stat /var/mail/public/dovecot-acl
# Dovecot'ın hangi kullanıcı ile çalıştığını kontrol et
ps aux | grep dovecot
grep "mail_uid|mail_gid" /etc/dovecot/conf.d/10-mail.conf
# Test için bir mail gönder
echo "Test mesaji" | mail -s "Test" [email protected]
Gerçek Dünya Senaryosu: Destek Ekibi Kurulumu
Bir teknoloji şirketinde destek departmanı için eksiksiz bir shared mailbox kurulumu yapalım. Beş kişilik ekibin [email protected] adresini ortaklaşa yönetmesi gerekiyor.
# 1. Sistem kullanıcısı oluştur (posta alacak ama login olmayacak)
useradd -r -s /sbin/nologin -m -d /var/mail/destek destek_shared
# veya virtual kullanıcı kullanıyorsanız sadece Maildir oluşturun:
mkdir -p /var/mail/destek_shared/Maildir/{cur,new,tmp}
# 2. Destek ekibi üyeleri için ACL ayarla
# Postfix ile entegrasyon - alias ekle
echo "destek: destek_user1, destek_user2, destek_user3" >> /etc/postfix/aliases
newaliases
# 3. Her ekip üyesi için shared mailbox erişimi ver
for user in destek1 destek2 destek3 destek4 destek5; do
doveadm acl set -u destek_shared INBOX user=$user lookup read write write-seen write-deleted insert post create expunge
echo "ACL eklendi: $user -> destek_shared INBOX"
done
# 4. Ayarları doğrula
doveadm acl get -u destek_shared INBOX
Postfix tarafında da destek mailbox’ına gelen postaların işlenmesi için ayar yapalım:
# /etc/postfix/main.cf - virtual_mailbox_maps veya aliases
cat >> /etc/postfix/virtual << 'EOF'
[email protected] destek_shared@localhost
EOF
postmap /etc/postfix/virtual
postfix reload
Dovecot Sieve ile Otomatik Yönlendirme
Shared mailbox’ı daha verimli kullanmak için Sieve filtreleri ekleyebilirsiniz. Örneğin destek mailbox’ına gelen postaları önceliğe göre klasörlere ayırabilirsiniz:
# Sieve script'i oluştur
cat > /var/mail/destek_shared/.dovecot.sieve << 'EOF'
require ["fileinto", "imap4flags"];
# VIP müşteri mailleri ayrı klasöre
if address :contains "from" ["vip@buyukmüsteri.com", "ceo@ortakmüsteri.com"] {
fileinto "VIP";
stop;
}
# Konu içinde "ACIL" geçenlere bayrak koy
if header :contains "subject" "ACIL" {
addflag "\Flagged";
fileinto "Acil";
stop;
}
# Otomatik cevaplanmış mailleri filtrele
if header :contains "auto-submitted" "auto-replied" {
fileinto "Otomatik";
stop;
}
EOF
chown vmail:vmail /var/mail/destek_shared/.dovecot.sieve
# Sieve'i derle
sievec /var/mail/destek_shared/.dovecot.sieve
Performans ve Güvenlik Önerileri
Shared mailbox kurulumu sonrasında göz önünde bulundurmanız gereken birkaç önemli nokta var.
İndeks Yönetimi
Paylaşılan mailbox’ların her kullanıcı için ayrı indeks tutması hem performansı artırır hem de okundu durumunun per-user takibini sağlar:
# 10-mail.conf içinde namespace yapılandırması
namespace shared {
type = shared
separator = /
prefix = shared/%%u/
# Her kullanıcı için ayrı indeks - önemli!
location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u:INDEXPVT=~/Maildir/shared/%%u
subscriptions = yes
list = children
}
Quota Yönetimi
Shared mailbox’lar için ayrı quota tanımlamak iyi bir pratik:
# Destek mailbox'ı için 10GB quota
userdb {
driver = passwd-file
args = /etc/dovecot/users
default_fields = uid=vmail gid=vmail home=/var/mail/%u quota_rule=*:storage=10G
}
Erişim Loglama
Kim ne zaman paylaşılan mailbox’a erişti? Bunu loglamak özellikle denetim gerektiren ortamlarda zorunlu:
# /etc/dovecot/conf.d/10-logging.conf
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
# Detaylı loglama - production'da dikkatli kullanın
mail_debug = no
auth_debug = no
# Erişim logları için
log_timestamp = "%Y-%m-%d %H:%M:%S "
Yapılandırmayı Test Etme
Her şeyi kurduktan sonra sistematik bir test yapmanız gerekiyor:
# Dovecot yapılandırmasını syntax açısından doğrula
doveadm config check
# veya eski yöntem:
dovecot -n
# Servisi yeniden başlat
systemctl restart dovecot
systemctl status dovecot
# Kullanıcı olarak IMAP bağlantısı test et
doveadm -v mailbox list -u [email protected]
# Shared klasörlerin görünebildiğini doğrula
doveadm -v mailbox list -u [email protected] 2>&1 | grep -i shared
# ACL'lerin doğru uygulandığını kontrol et
doveadm acl debug -u [email protected] shared/destek_shared/INBOX
# Bir test maili gönder ve shared box'ta göründüğünü doğrula
echo "Test" | sendmail [email protected]
sleep 5
doveadm mailbox status -u destek_shared INBOX messages
Sonuç
Dovecot ile shared mailbox kurulumu ilk bakışta karmaşık görünüyor. Namespace tanımları, ACL ayarları, indeks yapılandırması… Ama bir kez mantığını kavradığınızda aslında oldukça esnek ve güçlü bir sistem olduğunu görüyorsunuz.
En kritik nokta namespace’lerin doğru tanımlanması. Public ve shared namespace’leri karıştırmak çok sık yapılan bir hata. Public mailbox herkes tarafından erişilebilir ve merkezi bir konumda durur. Shared mailbox ise bir kullanıcının kendi kutusunun bir bölümünü seçici olarak paylaşmasıdır.
Production ortamına taşımadan önce şu kontrol listesini kullanın:
- ACL plugin’inin yüklendiğini ve etkinleştirildiğini doğrulayın
- Namespace separator’larının tutarlı olduğundan emin olun
- Her kullanıcı için ayrı indeks kullanın, yoksa okundu durumu paylaşılır ve kullanıcılar arasında karışıklık yaşanır
dovecot-acldosyalarının sahiplik ve izinlerini kontrol edin- Log’ları aktif tutun, sorun çıktığında hayat kurtarır
- Quota ayarlarını gözden geçirin, shared box’lar hızla dolabilir
Gündeme gelebilecek bir senaryo daha var: Replication ile birlikte shared mailbox kullanımı. Yüksek erişilebilirlik gerektiren ortamlarda Dovecot Director ve Replication plugin’leri devreye giriyor. Bu konuyu başka bir yazıda ele alacağız.