Dovecot ile Master Kullanıcı Kimlik Doğrulama Yapılandırması

Mail sunucusu yönetiminde en can sıkıcı durumlardan biri, bir kullanıcının şifresini bilmeden onun posta kutusuna erişmek zorunda kalmaktır. Destek talebi geldi, kullanıcı şifresini unuttuk demek yerine “şifremi vermek istemiyorum” diyor ama sorun giderilmesi lazım. Ya da migration sırasında yüzlerce hesabın içeriğini taşımanız gerekiyor. İşte tam bu noktada Dovecot’un Master User (Usta Kullanıcı) özelliği devreye giriyor.

Master Kullanıcı Nedir?

Dovecot’ta master kullanıcı, başka kullanıcıların posta kutularına o kullanıcının şifresini bilmeden erişebilme yetkisine sahip özel bir hesaptır. Bu mekanizma, IMAP protokolünün proxy authentication özelliğini kullanır. Teknik olarak şöyle çalışır: IMAP istemcinizde kullanıcı adı olarak gercek_kullanici*master_kullanici formatını kullanırsınız, şifre olarak da master kullanıcının şifresini girersiniz. Dovecot bu isteği görünce önce master kullanıcıyı doğrular, ardından hedef kullanıcının posta kutusuna erişim sağlar.

Bu özellik özellikle şu senaryolarda hayat kurtarır:

  • Mail migrasyonlarında toplu hesap içeriği aktarımı
  • Kullanıcı adına hata ayıklama ve destek işlemleri
  • Compliance ve audit gereksinimleri
  • Yedekleme sistemlerinin posta kutularına erişmesi
  • Hosting sağlayıcılarının müşteri hesaplarını yönetmesi

Temel Yapılandırma

Dovecot Konfigürasyon Dosyaları

Çoğu sistemde Dovecot konfigürasyonu /etc/dovecot/ altında bulunur. Dağıtıma göre tek bir dovecot.conf veya birden fazla dosya halinde düzenlenmiş olabilir. Master user ayarlarını genellikle 10-auth.conf dosyasına ekleriz.

İlk olarak mevcut durumu kontrol edelim:

dovecot -n | grep -i master
ls -la /etc/dovecot/conf.d/
cat /etc/dovecot/conf.d/10-auth.conf

auth-master.conf.ext Dosyasını Aktifleştirmek

Dovecot kurulumunda genellikle örnek dosyalar hazır gelir. 10-auth.conf içinde aşağıdaki satırı bulup aktifleştirmemiz gerekir:

# 10-auth.conf içinde bu satırın başındaki # işaretini kaldırın
!include auth-master.conf.ext

Eğer bu dosya yoksa kendiniz oluşturabilirsiniz:

cat > /etc/dovecot/conf.d/auth-master.conf.ext << 'EOF'
# Master kullanıcı kimlik doğrulama dosyası
passdb {
  driver = passwd-file
  master = yes
  args = /etc/dovecot/master-users
  
  # Bu ayar olmadan master user tüm hesaplara erişemez
  result_success = continue
}
EOF

Buradaki result_success = continue ayarı kritik öneme sahiptir. Bu parametre, master kullanıcı doğrulandıktan sonra sistemin hedef kullanıcının kendi passdb kontrolünü de yapmasını söyler. Eğer bu ayarı koymazsanız, var olmayan kullanıcı adlarıyla da giriş yapılabilir hale gelir ki bu ciddi bir güvenlik açığıdır.

Master Kullanıcı Dosyasını Oluşturmak

# Master kullanıcı için şifre hash'i oluştur
# -5 SHA256-CRYPT, -6 SHA512-CRYPT demektir
doveadm pw -s SHA512-CRYPT

# Çıktı şuna benzer:
# {SHA512-CRYPT}$6$rounds=5000$xyz...

# Şimdi dosyayı oluşturalım
touch /etc/dovecot/master-users
chmod 600 /etc/dovecot/master-users
chown dovecot:dovecot /etc/dovecot/master-users

Dosya formatı standart passwd formatındadır:

# /etc/dovecot/master-users
# kullanici_adi:{SCHEME}hash:uid:gid:gecos:home
mailadmin:{SHA512-CRYPT}$6$rounds=5000$ABCdefGHI...:::::
support:{SHA512-CRYPT}$6$rounds=5000$XYZuvwRST...:::::

Alternatif olarak düz metin şifre de kullanabilirsiniz (geliştirme ortamı için):

echo "mailadmin:{PLAIN}GizliSifre123" >> /etc/dovecot/master-users

Ama production ortamında asla düz metin kullanmayın. SHA512-CRYPT minimum standart olarak kabul edilmelidir.

Master User Separator Ayarı

Kullanıcı adı ve master kullanıcı adı arasındaki ayraç karakterini belirleriz. Varsayılan olarak * kullanılır ama bu bazen sorun çıkarabilir, özellikle bazı mail istemcilerinde. Dovecot’a bu ayracın ne olduğunu söylememiz gerekir:

# 10-auth.conf dosyasına ekleyin
auth_master_user_separator = *

Bu ayarla birlikte IMAP bağlantısında kullanıcı adı formatı şöyle olacak: [email protected]*mailadmin

Gerçek Dünya Senaryosu: Mail Migrasyonu

Diyelim ki eski mail sunucunuzdan yenisine geçiyorsunuz. Yüzlerce kullanıcının IMAP içeriğini taşımanız lazım. Her kullanıcının şifresini bilmiyorsunuz ve bilmenize de gerek yok. İşte burada imapsync veya mbsync ile master user kombinasyonu inanılmaz kolaylık sağlar.

Önce hedef sunucuda master user’ı hazırlayın, sonra şu script’i kullanabilirsiniz:

#!/bin/bash
# migrate_mail.sh - Toplu mail migrasyonu

KAYNAK_SUNUCU="eski-mail.firma.com"
HEDEF_SUNUCU="yeni-mail.firma.com"
MASTER_USER="mailadmin"
MASTER_PASS="GizliMasterSifre"
KULLANICI_LISTESI="/tmp/mail_kullanicilari.txt"

while IFS= read -r kullanici; do
  echo "Migrasyon basliyor: $kullanici"
  
  imapsync 
    --host1 "$KAYNAK_SUNUCU" 
    --user1 "${kullanici}*${MASTER_USER}" 
    --password1 "$MASTER_PASS" 
    --host2 "$HEDEF_SUNUCU" 
    --user2 "${kullanici}*${MASTER_USER}" 
    --password2 "$MASTER_PASS" 
    --ssl1 --ssl2 
    --logfile "/var/log/migrasyon/${kullanici}.log" 
    2>&1
    
  if [ $? -eq 0 ]; then
    echo "BASARILI: $kullanici"
  else
    echo "HATA: $kullanici - log dosyasini kontrol edin"
  fi
  
done < "$KULLANICI_LISTESI"

Bu script sayesinde binlerce hesabı tek tek uğraşmadan geçirebilirsiniz.

Dovecot ACL ile Master User Sınırlandırması

Master user çok güçlü bir araç, bu yüzden dikkatli kullanılmalı. Belirli kullanıcıların veya domainlerin dışında tutmak için ACL (Access Control List) mekanizmasını kullanabiliriz.

# dovecot.conf veya 10-mail.conf
mail_plugins = $mail_plugins acl

protocol imap {
  mail_plugins = $mail_plugins imap_acl
}

plugin {
  acl = vfile
  acl_globals_only = no
}

Belirli bir posta kutusunu master user erişimine kapatmak için o kullanıcının dovecot-acl dosyasına şunu yazabilirsiniz:

# /var/mail/vhosts/domain.com/ceo/dovecot-acl
# CEO'nun posta kutusunu master user'dan koru
# Negatif izin tanımlaması
owner lrwstipekxa
authenticated 

Dovecot ACL sistemi oldukça derin bir konu, ama temel olarak owner’a tam yetki verip master user dahil diğerlerini kısıtlayabilirsiniz.

Güvenlik Sertleştirme

Master user özelliği yanlış yapılandırılırsa ciddi güvenlik riskleri doğurabilir. Aşağıdaki önlemleri mutlaka alın.

Erişim Loglama

Master user ile yapılan her girişi loglamak için Dovecot’un log sistemini düzenleyin:

# 10-logging.conf
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
debug_log_path = /var/log/dovecot-debug.log

# Auth işlemlerini detaylı logla
auth_verbose = yes
auth_verbose_passwords = no  # Şifreleri loglama!
auth_debug = no  # Production'da kapalı tutun

# Her login'i logla
login_log_format_elements = user=%u method=%m rip=%r lip=%l mpid=%e %c %k

Ardından master user girişlerini izlemek için basit bir log analiz scripti:

#!/bin/bash
# master_user_monitor.sh
LOG_DOSYA="/var/log/dovecot-info.log"
UYARI_MAIL="[email protected]"

# Son 1 saatteki master user girişlerini bul
son_bir_saat=$(grep "$(date -d '1 hour ago' '+%b %e %H')" "$LOG_DOSYA" | grep "*")

if [ -n "$son_bir_saat" ]; then
  echo "$son_bir_saat" | mail -s "UYARI: Master User Erisimi Tespit Edildi" "$UYARI_MAIL"
fi

IP Kısıtlaması

Master user erişimini sadece belirli IP adreslerinden kabul etmek için Dovecot’un passdb bloğuna koşul ekleyebiliriz. Ancak daha pratik yol firewall seviyesinde kısıtlamaktır:

# Sadece iç ağdan IMAP erişimine izin ver
iptables -A INPUT -p tcp --dport 993 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -s 10.0.0.0/8 -j ACCEPT

# Dış dünyadan master user'ın kullandığı porta erişimi kapat
# Ya da genel IMAP'ı sadece VPN üzerinden aç

Fail2ban Entegrasyonu

Master user için özel bir Fail2ban kuralı oluşturmak iyi bir pratiktir:

# /etc/fail2ban/filter.d/dovecot-master.conf
[INCLUDES]
before = common.conf

[Definition]
failregex = dovecot.*auth.**.*failed

ignoreregex =
# /etc/fail2ban/jail.local içine ekle
[dovecot-master]
enabled = true
port = imap,imaps,pop3,pop3s
filter = dovecot-master
logpath = /var/log/dovecot.log
maxretry = 3
bantime = 3600

Sorun Giderme

Yaygın Hatalar ve Çözümleri

“Master user authentication failed” hatası:

Bu hata genellikle üç sebepten kaynaklanır. İlki master-users dosyasının izinleri yanlışsa. İkincisi şifre hash formatı hatalıysa. Üçüncüsü auth_master_user_separator doğru ayarlanmamışsa.

# Dosya izinlerini kontrol et
ls -la /etc/dovecot/master-users
# Çıktı şöyle olmalı: -rw------- 1 dovecot dovecot

# Dovecot'un şifreyi doğrulayabildiğini test et
doveadm auth test mailadmin GizliSifre

# Auth mekanizmasını debug modda test et
doveadm -D auth test "[email protected]*mailadmin" GizliSifre

“User doesn’t exist” hatası:

Bu hata result_success = continue ayarının eksik olduğu durumlarda ortaya çıkabilir ya da hedef kullanıcı gerçekten sistemde yoktur.

# Kullanıcının var olup olmadığını kontrol et
doveadm user [email protected]

# Passdb zincirini görüntüle
dovecot -n | grep passdb

Bağlantı kuruluyor ama posta kutusu görünmüyor:

Bu durumda büyük ihtimalle userdb konfigürasyonu eksiktir. Master user kendi kimliğiyle doğrulansa bile hedef kullanıcının userdb bilgilerine ulaşılamamıştır.

# 10-auth.conf içinde userdb bloğunu kontrol et
# sql, ldap veya passwd-file kullanıyorsanız
# o bloğun doğru çalıştığından emin olun

# Detaylı auth debug için geçici olarak:
auth_debug = yes
auth_debug_passwords = no
# Log'ları incele, sonra tekrar kapat!

Virtual Users ile Master User Kullanımı

Çoğu production ortamında virtual users, yani MySQL/PostgreSQL veya LDAP’ta tutulan kullanıcılar bulunur. Bu durumda master user yapılandırması biraz farklıdır:

# 10-auth.conf - Virtual users + Master user kombinasyonu
!include auth-sql.conf.ext
!include auth-master.conf.ext
# auth-master.conf.ext - Virtual user ortamı için
passdb {
  driver = passwd-file
  master = yes
  args = /etc/dovecot/master-users
  result_success = continue
}

# Master user'ın kendi userdb kaydı olması gerekmez
# Hedef kullanıcının userdb'si kullanılır

SQL ile kullanıcıları yönetiyorsanız ve master user mekanizmasını test etmek istiyorsanız:

# Önce normal kullanıcı doğrulamasını test et
doveadm auth test [email protected] NormalSifre

# Sonra master user ile aynı hesaba eriş
doveadm auth test "[email protected]*mailadmin" MasterSifre

# Her iki testin de başarılı olması gerekir

Dovecot Servisini Yeniden Başlatma ve Doğrulama

Tüm değişiklikleri yaptıktan sonra konfigürasyonu test edip servisi yeniden başlatın:

# Konfigürasyon syntax kontrolü
dovecot -n
doveconf -n

# Hata varsa daha detaylı görmek için
doveconf -c /etc/dovecot/dovecot.conf 2>&1 | grep -i error

# Servisi yeniden başlat
systemctl restart dovecot

# Servis durumunu kontrol et
systemctl status dovecot

# Log'ları canlı izle
journalctl -u dovecot -f

# Ya da doğrudan log dosyasını izle
tail -f /var/log/dovecot.log

Başarılı bir master user girişinde log’da şuna benzer bir satır göreceksiniz:

dovecot: imap-login: Login: user=<[email protected]>, method=PLAIN, 
rip=192.168.1.100, lip=10.0.0.1, mpid=12345, 
master_user=<mailadmin>, session=<xyz>

master_user= kısmı, girişin master user üzerinden yapıldığını teyit eder.

Birden Fazla Master User Yönetimi

Büyük ortamlarda farklı ekipler için farklı master user’lar oluşturmak iyi bir pratiktir:

# /etc/dovecot/master-users
# Her satır farklı bir ekip veya amaç için
migrasyon:{SHA512-CRYPT}$6$...:::::
destek:{SHA512-CRYPT}$6$...:::::
yedekleme:{SHA512-CRYPT}$6$...:::::
audit:{SHA512-CRYPT}$6$...:::::

Bu yaklaşımla hangi işlemin hangi master user üzerinden yapıldığını log’lardan takip edebilirsiniz. Örneğin migrasyon işlemi bitince o master user’ı dosyadan kaldırabilirsiniz. Destek ekibi için ayrı bir master user tutarak yetkisiz erişimleri daha kolay tespit edebilirsiniz.

Şifre rotasyonu için de düzenli bir rutin oluşturmanız önerilir:

#!/bin/bash
# master_user_rotate.sh - Aylık şifre rotasyonu
MASTER_DOSYA="/etc/dovecot/master-users"
KULLANICI="mailadmin"
YENI_SIFRE=$(openssl rand -base64 32)
YENI_HASH=$(doveadm pw -s SHA512-CRYPT -p "$YENI_SIFRE")

# Mevcut satırı yeni hash ile değiştir
sed -i "s|^${KULLANICI}:.*|${KULLANICI}:${YENI_HASH}:::::|" "$MASTER_DOSYA"

# Yeni şifreyi güvenli bir yere kaydet
echo "$YENI_SIFRE" | openssl enc -aes-256-cbc -out /root/master_sifre.enc

echo "Sifre basariyla degistirildi. Yeni sifre /root/master_sifre.enc dosyasinda."

# Dovecot'u yeniden yükle (restart gerekmez)
doveadm reload

Sonuç

Dovecot master user mekanizması, doğru yapılandırıldığında mail yöneticilerinin işini ciddi ölçüde kolaylaştıran güçlü bir araçtır. Migrasyon projelerinde zaman tasarrufu, destek süreçlerinde esneklik ve audit gereksinimlerini karşılama konularında vazgeçilmez hale gelir.

Ancak unutmayın ki bu yetki son derece geniştir. Sunucunuzdaki tüm posta kutularına erişim imkanı veren bir anahtarı yönetiyorsunuz. Bu nedenle şu temel prensiplere dayanmanızı öneririm: Master user şifresini düzenli olarak rotate edin, erişimleri eksiksiz loglayın, IP kısıtlaması ve Fail2ban ile brute force saldırılarına karşı önlem alın, ihtiyaç kalmadığında ilgili master user hesabını devre dışı bırakın. Geçici işlemler için geçici master user hesapları oluşturup işlem bitince silin.

Konfigürasyonunuzu her değişiklikten sonra doveadm auth test ile doğrulama alışkanlığı edinin. Log’ları düzenli gözden geçirin ve beklenmedik master user girişlerini anında alarm olarak değerlendirin. Mail sistemleri kurumların can damarıdır; bu kadar kritik bir erişim mekanizmasını ciddiye almak her zaman doğru yaklaşım olacaktır.

Yorum yapın