Dovecot IMAP ve POP3 Sunucusu Kurulumu

Posta sunucusu kurulumunda en kritik bileşenlerden biri olan Dovecot, hem IMAP hem de POP3 protokollerini destekleyen, güvenilir ve yüksek performanslı bir mail sunucusudur. Postfix ile birlikte kullanıldığında tam teşekküllü bir mail altyapısı oluşturur. Bu yazıda Ubuntu/Debian tabanlı sistemler üzerinde Dovecot kurulumunu, yapılandırmasını ve güvenlik ayarlarını adım adım ele alacağız.

Dovecot Nedir ve Neden Kullanılır?

Dovecot, 2002 yılından beri aktif olarak geliştirilen, açık kaynaklı bir IMAP ve POP3 sunucusudur. Temel felsefesi güvenlik ve performans üzerine kurulmuştur. Büyük kurumsal yapılardan küçük şirket mail sunucularına kadar geniş bir yelpazede kullanılır.

Dovecot’u öne çıkaran birkaç önemli özellik vardır:

  • Yüksek performans: Binlerce eş zamanlı bağlantıyı rahatlıkla kaldırır
  • Güvenlik odaklı tasarım: Minimum ayrıcalık prensibiyle çalışır
  • Esnek kimlik doğrulama: PAM, LDAP, MySQL, PostgreSQL gibi birçok backend destekler
  • Maildir ve mbox desteği: Her iki posta kutusu formatıyla çalışabilir
  • Postfix entegrasyonu: SASL kimlik doğrulama için mükemmel uyum sağlar

Kurulum Öncesi Hazırlık

Kuruluma geçmeden önce sistemin güncel olduğundan emin olalım ve gerekli paketleri yükleyelim.

# Sistem güncellemesi
sudo apt update && sudo apt upgrade -y

# Dovecot core ve protokol paketlerini kur
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d -y

# SSL desteği için
sudo apt install dovecot-lmtpd -y

# Kurulumu doğrula
dovecot --version

Kurulum tamamlandıktan sonra Dovecot’un servis durumunu kontrol edelim:

sudo systemctl status dovecot
sudo systemctl enable dovecot

Şu anda Dovecot çalışıyor olabilir ancak henüz düzgün yapılandırılmamış durumda. Asıl iş şimdi başlıyor.

Yapılandırma Dosyalarının Anlaşılması

Dovecot’un yapılandırma dosyaları /etc/dovecot/ dizininde bulunur. Ana yapı şu şekildedir:

  • /etc/dovecot/dovecot.conf: Ana yapılandırma dosyası, diğer dosyaları include eder
  • /etc/dovecot/conf.d/: Modüler yapılandırma dosyaları bu dizinde yer alır
  • /etc/dovecot/conf.d/10-auth.conf: Kimlik doğrulama ayarları
  • /etc/dovecot/conf.d/10-mail.conf: Posta kutusu konumu ve formatı
  • /etc/dovecot/conf.d/10-ssl.conf: SSL/TLS yapılandırması
  • /etc/dovecot/conf.d/10-master.conf: Servis ve socket ayarları
  • /etc/dovecot/conf.d/15-mailboxes.conf: Posta kutusu tanımlamaları
  • /etc/dovecot/conf.d/20-imap.conf: IMAP özel ayarları
  • /etc/dovecot/conf.d/20-pop3.conf: POP3 özel ayarları

Ana yapılandırma dosyasına bir göz atalım:

# Ana yapılandırmayı görüntüle
sudo cat /etc/dovecot/dovecot.conf

# Tüm aktif ayarları görmek için (yorum satırları hariç)
sudo dovecot -n

Temel Yapılandırma Adımları

Protokol Ayarları

İlk olarak hangi protokollerin aktif olacağını belirleyelim. Ana yapılandırma dosyasını düzenleyelim:

sudo nano /etc/dovecot/dovecot.conf

Dosyaya şu satırları ekleyin veya mevcut satırları düzenleyin:

# Kullanılacak protokoller
protocols = imap pop3 lmtp

# Listen adresi - tüm interface'lerde dinle
listen = *, ::

# Log ayarları
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log

Posta Kutusu Yapılandırması

/etc/dovecot/conf.d/10-mail.conf dosyasını düzenleyelim. Burada Maildir formatını kullanacağız çünkü büyük posta kutularında mbox’a göre çok daha iyi performans sunar:

sudo nano /etc/dovecot/conf.d/10-mail.conf
# Maildir formatını kullan
mail_location = maildir:~/Maildir

# Mail user ve group
mail_uid = vmail
mail_gid = vmail

# Posta kutusu kilitleme yöntemi
lock_method = fcntl

# İlk login'de Maildir dizinini otomatik oluştur
namespace inbox {
  inbox = yes
}

Eğer sanal kullanıcılar (virtual users) kullanıyorsanız mail konumunu şöyle tanımlamanız gerekir:

mail_location = maildir:/var/mail/vhosts/%d/%n/Maildir

Burada %d domain adını, %n kullanıcı adını temsil eder.

Kimlik Doğrulama Yapılandırması

/etc/dovecot/conf.d/10-auth.conf dosyası kimlik doğrulamanın kalbini oluşturur:

sudo nano /etc/dovecot/conf.d/10-auth.conf
# Düz metin kimlik doğrulamaya sadece SSL üzerinden izin ver
disable_plaintext_auth = yes

# Desteklenen kimlik doğrulama mekanizmaları
auth_mechanisms = plain login

# Sistem kullanıcıları için PAM kimlik doğrulaması
!include auth-system.conf.ext

# Sanal kullanıcılar için SQL kimlik doğrulaması (aktif etmek için # kaldırın)
#!include auth-sql.conf.ext

# LDAP kimlik doğrulaması (aktif etmek için # kaldırın)
#!include auth-ldap.conf.ext

# Statik kullanıcılar için (test ortamları)
#!include auth-static.conf.ext

SSL/TLS Yapılandırması

Güvenli bağlantı için SSL yapılandırması kritik öneme sahiptir. Let’s Encrypt sertifikalarınız varsa onları kullanabilirsiniz:

sudo nano /etc/dovecot/conf.d/10-ssl.conf
# SSL'i zorunlu kıl
ssl = required

# Sertifika dosyaları
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem

# Güvenli protokoller - eski ve güvensiz protokolleri devre dışı bırak
ssl_min_protocol = TLSv1.2

# Güçlü cipher suite'leri kullan
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384

# Perfect Forward Secrecy için DH parametreleri
ssl_dh = </etc/dovecot/dh.pem

# Sunucu cipher tercihini aktif et
ssl_prefer_server_ciphers = yes

DH parametrelerini oluşturmak için:

# Bu işlem birkaç dakika sürebilir
sudo openssl dhparam -out /etc/dovecot/dh.pem 4096

Eğer Let’s Encrypt sertifikanız yoksa self-signed sertifika oluşturabilirsiniz:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 
  -keyout /etc/dovecot/private/dovecot.pem 
  -out /etc/dovecot/dovecot.pem 
  -subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/CN=mail.example.com"

Postfix ile Entegrasyon

Dovecot ve Postfix’in birlikte çalışması için iki önemli yapılandırma gerekir: LMTP ile mail teslimi ve SASL ile kimlik doğrulama.

Master Process Socket Yapılandırması

sudo nano /etc/dovecot/conf.d/10-master.conf
# LMTP servisi - Postfix'ten mail teslimi için
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

# Auth servisi - Postfix SASL için
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
}

# Auth worker process
service auth-worker {
  user = $default_internal_user
}

Postfix Tarafında Yapılandırma

Postfix’in Dovecot SASL’ı kullanması için main.cf dosyasına eklemeler yapın:

sudo nano /etc/postfix/main.cf
# Dovecot SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

# Dovecot LMTP ile mail teslimi
virtual_transport = lmtp:unix:private/dovecot-lmtp

Sanal Kullanıcı Yapılandırması

Gerçek dünya senaryolarında sistem kullanıcıları yerine sanal kullanıcılar kullanmak çok daha pratik ve güvenlidir. MySQL ile sanal kullanıcı kurulumunu görelim.

Önce gerekli paketi yükleyin:

sudo apt install dovecot-mysql -y

MySQL’de kullanıcı tablosunu oluşturun:

mysql -u root -p
CREATE DATABASE mailserver;
CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'güçlü_şifre';
GRANT ALL PRIVILEGES ON mailserver.* TO 'mailadmin'@'localhost';
FLUSH PRIVILEGES;

USE mailserver;

CREATE TABLE virtual_domains (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE virtual_users (
  id INT NOT NULL AUTO_INCREMENT,
  domain_id INT NOT NULL,
  password VARCHAR(106) NOT NULL,
  email VARCHAR(100) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY email (email),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

INSERT INTO virtual_domains (name) VALUES ('example.com');
-- Şifre SHA512-CRYPT formatında
INSERT INTO virtual_users (domain_id, password, email) 
VALUES (1, '{SHA512-CRYPT}$6$rounds=5000$salt$hash', '[email protected]');

Dovecot SQL yapılandırması:

sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailadmin password=güçlü_şifre

default_pass_scheme = SHA512-CRYPT

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

Güvenlik Sertleştirme

Fail2Ban Entegrasyonu

Dovecot saldırılarına karşı Fail2Ban kullanmak şarttır:

sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.local
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/dovecot.log
maxretry = 5
bantime = 3600
findtime = 600
sudo systemctl restart fail2ban
sudo fail2ban-client status dovecot

Login Limit Ayarları

Brute force saldırılarına karşı login limitleri tanımlayın. 10-auth.conf dosyasına ekleyin:

# Başarısız login denemelerinde gecikme
auth_failure_delay = 2secs

# Aynı IP'den maksimum eş zamanlı auth denemesi
auth_cache_size = 10M
auth_cache_ttl = 1 hour
auth_cache_negative_ttl = 1 hour

Posta Kutusu Sınır ve Kota Yönetimi

Kullanıcı başına disk kotası tanımlamak için dovecot-quota paketini kullanın:

sudo apt install dovecot-quota -y

/etc/dovecot/conf.d/90-quota.conf dosyasını düzenleyin:

plugin {
  quota = maildir:User quota
  quota_rule = *:storage=1G
  quota_rule2 = Trash:storage=100M
  quota_rule3 = Spam:ignore

  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
}

service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  unix_listener quota-warning {
    user = vmail
  }
}

Uyarı scriptini oluşturun:

sudo nano /usr/local/bin/quota-warning.sh
#!/bin/bash
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: [email protected]
Subject: Posta Kutusu Dolu - %$PERCENT

Sayın kullanıcı,

Posta kutunuzun $PERCENT%'i dolmuştur. Lütfen gereksiz mesajları silerek yer açınız.

Sistem Yöneticisi
EOF
sudo chmod +x /usr/local/bin/quota-warning.sh

Servisin Test Edilmesi

Yapılandırma tamamlandıktan sonra servist yeniden başlatın ve test edin:

# Yapılandırma syntax kontrolü
sudo dovecot -n

# Servisi yeniden başlat
sudo systemctl restart dovecot

# Port durumlarını kontrol et
sudo ss -tlnp | grep dovecot

# IMAP bağlantısını test et
openssl s_client -connect mail.example.com:993

# POP3 bağlantısını test et  
openssl s_client -connect mail.example.com:995

# Düz metin IMAP testi (sadece test ortamında)
telnet mail.example.com 143

IMAP bağlantı testinde şu komutları kullanabilirsiniz:

# Telnet ile IMAP testi
telnet localhost 143

# Aşağıdaki komutları sırasıyla girin:
a001 LOGIN [email protected] şifre
a002 LIST "" "*"
a003 SELECT INBOX
a004 FETCH 1 BODY[]
a005 LOGOUT

Yaygın Sorunlar ve Çözümleri

Dovecot kurulumunda sıkça karşılaşılan sorunlar ve çözümleri:

“Permission denied” hatası: vmail kullanıcısının posta dizinine erişim izni yoksa ortaya çıkar.

sudo chown -R vmail:vmail /var/mail/vhosts/
sudo chmod -R 700 /var/mail/vhosts/

“SSL certificate not trusted” hatası: Let’s Encrypt sertifikası kullanıyorsanız fullchain.pem dosyasını kullanmaya dikkat edin, sadece cert.pem değil.

“Authentication failed” hatası: Şifre formatını kontrol edin. Dovecot şifrelerini doğru formatta oluşturmak için:

# SHA512-CRYPT şifre oluştur
doveadm pw -s SHA512-CRYPT -p "kullanici_sifresi"

# BCRYPT şifre oluştur
doveadm pw -s BLF-CRYPT -p "kullanici_sifresi"

Log dosyalarını takip edin:

# Gerçek zamanlı log takibi
sudo tail -f /var/log/dovecot.log
sudo tail -f /var/log/mail.log

# doveadm ile kullanıcı bilgisi sorgulama
sudo doveadm user [email protected]

# Aktif bağlantıları listele
sudo doveadm who

Performans Optimizasyonu

Yoğun kullanımlı sunucularda performans için bazı optimizasyonlar yapılabilir. dovecot.conf dosyasına ekleyin:

# Process limit ayarları
default_process_limit = 200
default_client_limit = 1000

# İndex cache boyutu
mail_cache_min_mail_count = 10

# IMAP için
protocol imap {
  mail_max_userip_connections = 50
  imap_idle_notify_interval = 2 mins
}

# POP3 için
protocol pop3 {
  mail_max_userip_connections = 10
  pop3_uidl_format = %08Xu%08Xv
}

Yedekleme Stratejisi

Dovecot yapılandırmasını ve posta kutularını düzenli olarak yedekleyin:

#!/bin/bash
# /usr/local/bin/dovecot-backup.sh

BACKUP_DIR="/backup/mail"
DATE=$(date +%Y%m%d)

# Yapılandırma dosyalarını yedekle
tar -czf "$BACKUP_DIR/dovecot-conf-$DATE.tar.gz" /etc/dovecot/

# Posta kutularını yedekle (büyük veri, uygun schedule ile yapın)
rsync -avz --delete /var/mail/vhosts/ "$BACKUP_DIR/mailboxes/"

# Eski yedekleri temizle (30 günden eski)
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete

echo "Dovecot yedekleme tamamlandı: $DATE"
sudo chmod +x /usr/local/bin/dovecot-backup.sh

# Crontab'a ekle - her gece 02:00'de çalıştır
echo "0 2 * * * root /usr/local/bin/dovecot-backup.sh" | sudo tee /etc/cron.d/dovecot-backup

Sonuç

Dovecot, doğru yapılandırıldığında son derece güvenilir ve güvenli bir IMAP/POP3 sunucusudur. Bu yazıda temel kurulumdan başlayarak SSL yapılandırması, Postfix entegrasyonu, sanal kullanıcılar, kota yönetimi ve güvenlik sertleştirmesine kadar kapsamlı bir kurulum süreci ele aldık.

Dikkat etmeniz gereken en kritik noktalar şunlardır: SSL’i her zaman zorunlu kılın, güçlü şifreleme algoritmaları kullanın, Fail2Ban ile brute force koruması sağlayın ve log dosyalarını düzenli olarak takip edin. Sanal kullanıcı yapısı kurduysanız vmail kullanıcısının izinlerini doğru ayarlamak özellikle önem taşır.

Üretim ortamına geçmeden önce doveadm araçlarını kullanarak kapsamlı testler yapmanızı ve yedekleme rutinlerinizi mutlaka oluşturmanızı tavsiye ederim. Bir sonraki yazıda Dovecot üzerinde Sieve filtreleri ve spam yönetimini ele alacağız.

Yorum yapın