Bir mail sunucusu kurmak, sistem yöneticilerinin en çok terleyeceği konulardan biridir. Hem Postfix hem de Dovecot ayrı ayrı güçlü araçlar olsa da asıl sihir ikisini birlikte doğru şekilde yapılandırdığınızda ortaya çıkıyor. Postfix gelen ve giden mailleri yönetirken, Dovecot kullanıcıların bu maillere IMAP veya POP3 üzerinden erişmesini sağlar. Bu yazıda sıfırdan çalışan bir mail sunucusu kuracağız, SASL kimlik doğrulamasını ayarlayacağız ve SSL/TLS ile her şeyi güvenli hale getireceğiz.
Mimariyi Anlamak
Kuruluma geçmeden önce kafamızdaki tabloyu netleştirelim. Postfix iki ana görev üstlenir: MTA (Mail Transfer Agent) olarak dışarıdan gelen mailleri kabul eder, MDA (Mail Delivery Agent) olarak da bu mailleri kullanıcı mailbox’larına teslim eder. Dovecot ise MRA (Mail Retrieval Agent) rolünü üstlenerek kullanıcıların Thunderbird, Outlook veya telefon mail uygulamaları üzerinden maillerine erişmesini sağlar.
Bu iki servis arasındaki kritik entegrasyon noktaları şunlardır:
- SASL Kimlik Doğrulama: Postfix, kullanıcıların mail gönderebilmesi için kimlik doğrulamasını Dovecot üzerinden yapar
- Mailbox Formatı: Her iki servis de aynı mailbox dizinine erişir, format uyumu şarttır
- Unix Socket: Postfix ve Dovecot birbirleriyle unix socket üzerinden konuşur
Ön Hazırlık ve Paket Kurulumu
Senaryomuzda Ubuntu 22.04 LTS üzerinde mail.example.com domain’i için kurulum yapıyoruz. Sunucunuzun hostname’i doğru ayarlanmış olmalı, DNS kayıtları da yerinde olmalı.
Önce hostname’i kontrol edelim:
hostname -f
# Çıktı: mail.example.com olmalı
# Eğer değilse düzeltelim
hostnamectl set-hostname mail.example.com
echo "192.168.1.100 mail.example.com mail" >> /etc/hosts
Gerekli paketleri kuralım:
apt update && apt install -y
postfix
postfix-mysql
dovecot-core
dovecot-imapd
dovecot-pop3d
dovecot-lmtpd
mailutils
ssl-cert
Postfix kurulumu sırasında bir diyalog ekranı çıkacak. “Internet Site” seçeneğini işaretleyin ve mail domain olarak example.com girin. Bu adımı geçtikten sonra asıl konfigürasyonumuza başlayabiliriz.
Postfix Ana Konfigürasyonu
Postfix’in ana konfigürasyon dosyası /etc/postfix/main.cf dir. Mevcut dosyayı yedekleyip temiz bir yapılandırma oluşturalım:
cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
/etc/postfix/main.cf dosyasını düzenleyelim:
# Temel Ayarlar
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
readme_directory = no
# TLS Parametreleri (Gelen Bağlantılar)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_loglevel = 1
# TLS Parametreleri (Giden Bağlantılar)
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# SASL Kimlik Doğrulama (Dovecot Entegrasyonu)
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
# Network Ayarları
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# Mail Teslim Ayarları
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +
virtual_transport = lmtp:unix:private/dovecot-lmtp
# Relay ve Kısıtlama Ayarları
mynetworks = 127.0.0.0/8
relayhost =
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# Spam Koruması
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unknown_sender_domain,
reject_rbl_client zen.spamhaus.org
# Boyut Limiti (50MB)
message_size_limit = 52428800
Postfix SMTP Submission Portu
/etc/postfix/master.cf dosyasında 587 portunu (submission) aktif etmemiz gerekiyor. Mail istemcileri artık 25 yerine 587’yi kullanıyor:
# master.cf dosyasında şu satırların yorumunu kaldırın
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# SMTPS (465 portu) için
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
Dovecot Konfigürasyonu
Dovecot konfigürasyonu /etc/dovecot/ dizininde bulunur. Modüler yapısı sayesinde her özellik ayrı bir dosyada tanımlıdır. Bu hem düzeni korur hem de troubleshooting’i kolaylaştırır.
Temel Dovecot Ayarları
/etc/dovecot/dovecot.conf dosyasını kontrol edelim:
# Hangi protokolleri dinleyeceğini belirtelim
protocols = imap pop3 lmtp sieve
# Log ayarları
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
debug_log_path = /var/log/dovecot-debug.log
# Hostname
hostname = mail.example.com
Mail Lokasyonu ve Namespace Ayarları
/etc/dovecot/conf.d/10-mail.conf dosyasını düzenleyelim:
# Maildir formatını kullanıyoruz
mail_location = maildir:~/Maildir
# Namespace tanımı
namespace inbox {
inbox = yes
separator = /
# Özel klasörler
mailbox Drafts {
auto = subscribe
special_use = Drafts
}
mailbox Junk {
auto = subscribe
special_use = Junk
}
mailbox Sent {
auto = subscribe
special_use = Sent
}
mailbox "Sent Messages" {
special_use = Sent
}
mailbox Trash {
auto = subscribe
special_use = Trash
}
}
# İzin verilen kullanıcı grupları
mail_privileged_group = mail
Kimlik Doğrulama Konfigürasyonu
Bu kısım Postfix-Dovecot entegrasyonunun kalbidir. /etc/dovecot/conf.d/10-auth.conf dosyasını ayarlayalım:
# Düz metin kimlik doğrulamayı yalnızca SSL üzerinde izin ver
disable_plaintext_auth = yes
auth_mechanisms = plain login
# Sistem kullanıcıları ile kimlik doğrulama
!include auth-system.conf.ext
Şimdi asıl kritik kısma gelelim. /etc/dovecot/conf.d/10-master.conf dosyasında Postfix’in kullanacağı SASL socket’ini tanımlıyoruz:
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
# LMTP servisi - Postfix mailları buraya teslim edecek
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
# SASL Auth servisi - Postfix kimlik doğrulama için buraya soracak
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = dovecot
}
user = dovecot
}
service auth-worker {
user = root
}
SSL/TLS Konfigürasyonu
/etc/dovecot/conf.d/10-ssl.conf dosyasını düzenleyelim:
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
# Güvenli cipher suite'ler
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# TLS minimum versiyon
ssl_min_protocol = TLSv1.2
# Perfect Forward Secrecy
ssl_prefer_server_ciphers = yes
Let’s Encrypt Sertifika Kurulumu
Eğer henüz SSL sertifikanız yoksa Let’s Encrypt ile ücretsiz alabiliriz:
apt install certbot
certbot certonly --standalone -d mail.example.com
--agree-tos
--email [email protected]
--no-eff-email
# Certbot'un postfix ve dovecot servislerini yenilemede yeniden başlatması için
cat > /etc/letsencrypt/renewal-hooks/deploy/restart-mail.sh << 'EOF'
#!/bin/bash
systemctl reload postfix
systemctl reload dovecot
EOF
chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-mail.sh
Mailbox Kullanıcısı Oluşturma
Gerçek hayatta genellikle sistem kullanıcıları ile mail kullanıcıları ayrılır. Basit senaryo için sistem kullanıcısı oluşturalım:
# Mail kullanıcısı oluştur
useradd -m -s /bin/bash -G mail ahmet
echo "ahmet:GucluSifre123!" | chpasswd
# Maildir dizinini oluştur
maildirmake.dovecot /home/ahmet/Maildir
chown -R ahmet:ahmet /home/ahmet/Maildir
# Test maili gönder
echo "Bu bir test mailidir" | mail -s "Test" [email protected]
# Maili kontrol et
ls /home/ahmet/Maildir/new/
Servisleri Başlatma ve Test
Her şeyi ayarladıktan sonra servisleri başlatıp test edelim:
# Konfigürasyonları test et
postfix check
dovecot -n
# Servisleri yeniden başlat
systemctl restart postfix
systemctl restart dovecot
# Servis durumlarını kontrol et
systemctl status postfix
systemctl status dovecot
# Dinlenen portları kontrol et
ss -tlnp | grep -E '25|587|465|143|993|110|995'
SMTP Bağlantı Testi
Telnet ile SMTP bağlantısını test edelim:
# SMTP testi
telnet localhost 25
# Karşılama mesajı gelmeli: 220 mail.example.com ESMTP Postfix
# EHLO komutunu gönder
EHLO mail.example.com
# AUTH PLAIN LOGIN çıktısında görünmeli
# SSL bağlantısını test et
openssl s_client -connect mail.example.com:587 -starttls smtp
IMAP Bağlantı Testi
# IMAP testi
openssl s_client -connect mail.example.com:993
# Bağlandıktan sonra login dene
a1 LOGIN [email protected] GucluSifre123!
a2 LIST "" "*"
a3 SELECT INBOX
a4 LOGOUT
Log Takibi ve Troubleshooting
Mail sunucularında bir şeyler ters gittiğinde loglar hayat kurtarır. İzlemeniz gereken dosyalar:
# Postfix logları
tail -f /var/log/mail.log
# Dovecot logları
tail -f /var/log/dovecot.log
tail -f /var/log/dovecot-info.log
# SASL hataları genellikle burada görünür
grep "SASL" /var/log/mail.log
# Başarılı login'leri filtrele
grep "Login:" /var/log/dovecot.log
# Gerçek zamanlı Postfix mail kuyruğunu izle
watch -n 2 mailq
Yaygın karşılaşılan sorunlar ve çözümleri:
- “SASL authentication failed”: Socket izinlerini kontrol edin, Dovecot’un
/var/spool/postfix/private/authdosyasını oluşturduğundan emin olun - “Permission denied” Maildir hatası:
mail_privileged_group = mailayarını kontrol edin ve kullanıcıyı mail grubuna ekleyin - “SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol”: Port yanlış yapılandırılmış olabilir, SMTPS için wrapper mode gereklidir
- Mailbox bulunamıyor:
mail_locationyolunun doğru olduğunu ve Maildir dizininin oluşturulduğunu kontrol edin
Firewall Ayarları
UFW kullanıyorsanız gerekli portları açalım:
# Mail portlarını aç
ufw allow 25/tcp comment 'SMTP'
ufw allow 587/tcp comment 'SMTP Submission'
ufw allow 465/tcp comment 'SMTPS'
ufw allow 143/tcp comment 'IMAP'
ufw allow 993/tcp comment 'IMAPS'
ufw allow 110/tcp comment 'POP3'
ufw allow 995/tcp comment 'POP3S'
ufw reload
ufw status verbose
SPF, DKIM ve DMARC Kayıtları
Kurulumunuzu tamamlarken DNS kayıtlarını da unutmayın. Mail güvenilirliği için bunlar şart:
- MX Kaydı:
example.com. IN MX 10 mail.example.com. - SPF Kaydı:
example.com. IN TXT "v=spf1 mx a ip4:SUNUCU_IP ~all" - PTR Kaydı: Hosting sağlayıcınızdan IP için ters DNS kaydı isteyin
DKIM için OpenDKIM kurulumunu da öneririm ancak o ayrı bir yazı konusu. DMARC kaydı için şunu ekleyin:
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
Performans İpuçları
Yüksek trafikli ortamlar için Postfix’e birkaç ek ayar yapalım:
# /etc/postfix/main.cf sonuna ekle
# Worker process sayısı (CPU çekirdeği * 2)
default_process_limit = 100
# Bağlantı rate limiting
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 50
# Aynı IP'den maksimum bağlantı
smtpd_client_connection_count_limit = 10
# Queue yönetimi
maximal_queue_lifetime = 5d
bounce_queue_lifetime = 1d
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
Dovecot tarafında da connection pool’u optimize edebiliriz. /etc/dovecot/conf.d/10-master.conf içine:
default_process_limit = 100
default_client_limit = 1000
service imap-login {
process_min_avail = 2
vsz_limit = 64M
}
Sonuç
Postfix ve Dovecot entegrasyonu ilk bakışta karmaşık görünse de mantığını kavradıktan sonra oldukça sistematik bir yapıya sahip olduğunu fark ediyorsunuz. Kritik noktaları özetlemek gerekirse: Postfix gelen maili Dovecot LMTP üzerinden teslim eder, kullanıcı kimlik doğrulamasını Dovecot SASL üzerinden yapar ve her iki servis de aynı Maildir yapısını paylaşır.
Kurulumun ardından mutlaka mail-tester.com veya mxtoolbox.com gibi araçlarla sunucunuzu test edin. SPF, DKIM ve DMARC kayıtlarınızı doğru yapılandırmadan mailleriniz spam klasörüne düşecektir. Let’s Encrypt sertifikanızın otomatik yenilendiğinden ve yenileme hook’unun postfix ile dovecot’u reload ettiğinden emin olun.
Gerçek üretim ortamında bu temel kurulumun üzerine spam filtreleme için SpamAssassin veya Rspamd, virüs tarama için ClamAV eklemek iyi bir pratik olacaktır. Kullanıcı yönetimini kolaylaştırmak istiyorsanız da sanal kullanıcılar için MySQL backend’e geçiş değerli bir sonraki adımdır.