Dovecot Bağlantı Sorunları: IMAP ve POP3 Hatalarını Çözme
Mail sunucunuzda kullanıcılar bağlanamıyor, Thunderbird sürekli hata veriyor, mobil uygulamalar mail çekmiyor… Dovecot sorunları tam da böyle anlarda kendini gösterir. Üstelik çoğu zaman hata mesajları yeterince açıklayıcı olmaz ve sizi saatlerce log dosyalarında avlamaya iter. Bu yazıda Dovecot’un IMAP ve POP3 bağlantı sorunlarını sistematik bir şekilde nasıl ayıklayacağınızı, gerçek dünyada karşılaştığım senaryolarla birlikte anlatacağım.
Temel Kontroller: Her Şeyden Önce
Dovecot sorunlarına dalmadan önce birkaç temel kontrol yapmanız gerekiyor. Bu adımları atlarsanız saatlerce yanlış yerde bakabilirsiniz.
Servis Durumu
İlk iş Dovecot’un ayakta olup olmadığını kontrol edin:
systemctl status dovecot
# veya eski sistemlerde
service dovecot status
# Proses gerçekten çalışıyor mu?
ps aux | grep dovecot
# Portlar dinleniyor mu?
ss -tlnp | grep -E '143|993|110|995'
netstat -tlnp | grep dovecot
Port çıktısında şunları görmeniz gerekiyor:
- 143: IMAP (plain)
- 993: IMAPS (SSL/TLS)
- 110: POP3 (plain)
- 995: POP3S (SSL/TLS)
Eğer portlar listede yoksa Dovecot ya çalışmıyor ya da dinleme adresi yanlış yapılandırılmış demektir.
Güvenlik Duvarı Kontrolü
Servis çalışıyor ama dışarıdan bağlanılamıyorsa güvenlik duvarına bakın:
# iptables
iptables -L INPUT -n -v | grep -E '143|993|110|995'
# firewalld
firewall-cmd --list-all
firewall-cmd --add-service=imap --permanent
firewall-cmd --add-service=imaps --permanent
firewall-cmd --reload
# UFW
ufw status verbose | grep -E 'IMAP|POP3|143|993'
ufw allow 143/tcp
ufw allow 993/tcp
Log Analizi: Sorunun Kaynağını Bulmak
Dovecot logları genellikle /var/log/mail.log (Debian/Ubuntu) veya /var/log/maillog (CentOS/RHEL) içinde bulunur. Bazı sistemlerde Dovecot kendi log dizinine yazar.
# Gerçek zamanlı log takibi
tail -f /var/log/mail.log | grep -i dovecot
# Son 100 satır hata
grep -i "error|failed|denied" /var/log/mail.log | tail -100
# Belirli kullanıcının logları
grep "user=<ahmet>" /var/log/mail.log | tail -50
# Dovecot'un kendi log yapılandırması
cat /etc/dovecot/conf.d/10-logging.conf
Log Detay Seviyesini Artırmak
Sorun tekrarlayan ama logda görünmüyorsa debug modunu açın:
# /etc/dovecot/conf.d/10-logging.conf dosyasını düzenleyin
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
mail_debug = yes
verbose_ssl = yes
Uyarı: auth_debug_passwords = yes şifreleri loga yazar, sadece test ortamında kullanın ve işiniz bitince kapatın.
# Dovecot'u yeniden yükleyin (restart gerekmez genelde)
doveadm reload
Kimlik Doğrulama Hataları
En sık karşılaşılan sorun kategorisi kimlik doğrulama hatalarıdır. Log çıktısında şöyle görünür:
dovecot: imap-login: Disconnected (auth failed, 1 attempts in 2 secs): user=<ahmet>, method=PLAIN, rip=192.168.1.100, lip=10.0.0.1
PAM Kimlik Doğrulama Sorunları
# PAM yapılandırmasını kontrol et
cat /etc/pam.d/dovecot
# Kullanıcının sisteme giriş yapıp yapamadığını test et
su - ahmet
# doveadm ile kimlik doğrulamayı test et
doveadm auth test ahmet
# Şifre sorduğunda girin
# Login testi (tam oturum simülasyonu)
doveadm auth login ahmet
Eğer doveadm auth test başarısız oluyorsa sorun Dovecot’un kendisinde değil, kimlik doğrulama backendinde.
passwd-file ile Kimlik Doğrulama
Dovecot kendi kullanıcı dosyasını kullanıyorsa:
# Kullanıcı var mı?
cat /etc/dovecot/users | grep ahmet
# Şifre hash'i doğru formatta mı?
# Format: kullanici:{SCHEME}hash:uid:gid:gecos:home:shell:extra
# Yeni şifre hash'i oluştur
doveadm pw -s SHA512-CRYPT
# Veya
openssl passwd -6 "yenisifre"
LDAP/Active Directory Entegrasyonu Sorunları
Kurumsal ortamlarda LDAP bağlantısı koptuğunda tüm kullanıcılar bağlanamaz hale gelir:
# LDAP bağlantısını test et
ldapsearch -x -H ldap://ldap.sirket.com -D "cn=dovecot,dc=sirket,dc=com" -W -b "dc=sirket,dc=com" "(uid=ahmet)"
# Dovecot LDAP yapılandırması
cat /etc/dovecot/dovecot-ldap.conf.ext
# Yaygın sorun: TLS sertifika hatası
# Geçici test için (üretimde kullanmayın)
tls_require_cert = never
SSL/TLS Sorunları
Modern istemciler artık şifreli bağlantı istiyor. SSL/TLS sorunları çok yaygın ve çözümü bazen can sıkıcı.
# SSL bağlantısını doğrudan test et
openssl s_client -connect mail.sirket.com:993 -servername mail.sirket.com
# POP3S testi
openssl s_client -connect mail.sirket.com:995
# STARTTLS testi (IMAP)
openssl s_client -connect mail.sirket.com:143 -starttls imap
# Sertifika son kullanma tarihini kontrol et
openssl s_client -connect mail.sirket.com:993 2>/dev/null | openssl x509 -noout -dates
# Veya doğrudan sertifika dosyasından
openssl x509 -in /etc/ssl/certs/mail.crt -noout -dates -subject -issuer
Sertifika Yapılandırması
# /etc/dovecot/conf.d/10-ssl.conf kontrolü
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.sirket.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.sirket.com/privkey.pem
ssl_min_protocol = TLSv1.2
# Let's Encrypt sertifikasını yenileme sonrası Dovecot'u yenile
certbot renew --post-hook "systemctl reload dovecot"
Sık yapılan hata: ssl_cert dosyasında sadece sertifikayı değil, chain dahil fullchain.pem kullanmak gerekiyor. Aksi takdirde mobil istemciler ve bazı mail programları sertifikayı tanımaz.
Cipher Suite Sorunları
Eski istemciler yeni cipher’larla çalışmayabilir, yeni istemciler eski cipher’ları reddeder:
# Desteklenen cipher'ları listele
openssl ciphers -v 'HIGH:!aNULL:!MD5' | head -20
# Dovecot cipher yapılandırması
# /etc/dovecot/conf.d/10-ssl.conf
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
ssl_prefer_server_ciphers = yes
Posta Kutusu Erişim Sorunları
Kullanıcı giriş yapıyor ama mailleri göremiyorsa posta kutusu izinleri veya formatkonfigürasyonu sorunlu olabilir.
# Kullanıcının maildir'ine erişim testi
doveadm mailbox list -u ahmet
# Mail sayısını görüntüle
doveadm mailbox status -u ahmet messages INBOX
# İzin sorunlarını kontrol et
ls -la /var/mail/ahmet/
ls -la /home/ahmet/Maildir/
# Dovecot hangi kullanıcıyla çalışıyor?
ps aux | grep dovecot
# mail prosesleri genellikle vmail veya mail kullanıcısıyla çalışır
Maildir vs mbox Format Sorunları
# Mevcut mail formatı nedir?
grep "mail_location" /etc/dovecot/conf.d/10-mail.conf
# Maildir formatı örneği
mail_location = maildir:~/Maildir
# mbox formatı örneği
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# Maildir yapısını elle kontrol et
ls -la /home/ahmet/Maildir/
# cur, new, tmp dizinleri olmalı
# Bozuk index dosyalarını temizle (dikkatli kullanın)
doveadm index -u ahmet INBOX
İzin ve Sahiplik Sorunları
Gerçek dünyadan bir senaryo: Sunucu taşıma sırasında rsync ile kopyalanan maildir klasörleri, sahiplik bilgileri yanlış taşındığında tüm kullanıcılar bağlanabilir ama mailleri göremez hale gelir.
# Sahiplik sorununu tespit et
find /home/*/Maildir -not -user vmail -not -user mail | head -20
# Toplu düzeltme (vmail kullanıcısı için)
chown -R vmail:vmail /home/ahmet/Maildir
# Veya tüm kullanıcılar için (dikkatli!)
find /home -name "Maildir" -exec chown -R vmail:vmail {} ;
# İzinler
chmod -R 700 /home/ahmet/Maildir
Bağlantı Limitleri ve Performans Sorunları
“Bazen bağlanıyor bazen bağlanamıyor” şikayeti genellikle bağlantı limiti sorunudur.
# Mevcut aktif bağlantıları gör
doveadm who
# Kullanıcı bazlı bağlantı sayısı
doveadm who | grep ahmet
# Tüm bağlantı istatistikleri
doveadm stats dump
# Sistem sınırları
ulimit -n
cat /proc/$(pgrep -o dovecot)/limits
Dovecot Bağlantı Limitlerini Ayarlamak
# /etc/dovecot/conf.d/10-master.conf
service imap {
process_limit = 1024
client_limit = 0
}
service imap-login {
process_min_avail = 10
client_limit = 128
service_count = 1
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
# Kullanıcı başına max bağlantı
# /etc/dovecot/conf.d/20-imap.conf
mail_max_userip_connections = 10
Sistem Kaynak Limitleri
# Sistem genelinde açık dosya limiti
cat /proc/sys/fs/file-max
# Dovecot için limit artır
# /etc/security/limits.conf
dovecot soft nofile 65536
dovecot hard nofile 65536
# Veya systemd birimi için
# /etc/systemd/system/dovecot.service.d/limits.conf
[Service]
LimitNOFILE=65536
systemctl daemon-reload
systemctl restart dovecot
Gerçek Dünya Senaryoları
Senaryo 1: Toplu Kullanıcı Erişim Kesintisi
Sabah 9’da IT departmanı “kimse mail açamıyor” diye çıkıyor karşınıza. Log’a bakıyorsunuz:
tail -100 /var/log/mail.log | grep "imap-login"
# Çıktı:
# Fatal: master: service(imap-login): child 12453 returned error 89 (Out of memory)
Bu durumda memory sorunu var. Sunucunun genel durumuna bakın:
free -h
# Swap dolmuş, RAM tükenmiş
# Dovecot proseslerinin memory kullanımı
ps aux --sort=-%mem | grep dovecot | head -20
# Hızlı çözüm: Zombi prosesleri temizle
doveadm kick ""
systemctl restart dovecot
Senaryo 2: Belirli Kullanıcı Bağlanamıyor
Tek kullanıcı sorununda log şöyle görünür:
grep "mehmet" /var/log/mail.log | tail -20
# dovecot: imap(mehmet): Error: stat(/home/mehmet/Maildir) failed: Permission denied
# Kullanıcının ev dizini sorunlu
ls -la /home/mehmet/
# Çıktı: drwx------ 3 root root ...
# Sahiplik yanlış!
# Düzelt
chown -R mehmet:mehmet /home/mehmet/
systemctl reload dovecot
Senaryo 3: Mobil Cihazlar Bağlanamıyor Masaüstü Bağlanıyor
Bu klasik bir SSL SNI sorunudur. Eski Dovecot sürümleri veya yanlış yapılandırmada görülür:
# iOS/Android'den bağlantı testi simülasyonu
openssl s_client -connect mail.sirket.com:993 -servername mail.sirket.com -tls1_2
# SNI olmadan test (eski istemci davranışı)
openssl s_client -connect mail.sirket.com:993
# Fark varsa SNI yapılandırması gerekiyor
# /etc/dovecot/conf.d/10-ssl.conf
local_name mail.sirket.com {
ssl_cert = </etc/letsencrypt/live/mail.sirket.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.sirket.com/privkey.pem
}
Manuel Bağlantı Testi
Hiçbir istemci olmadan, sadece telnet veya netcat ile IMAP/POP3 bağlantısı test edebilirsiniz. Bu en saf testtir.
# IMAP plain text testi (143 portu)
telnet mail.sirket.com 143
# Bağlandıktan sonra:
# A1 LOGIN "ahmet" "sifre123"
# A2 LIST "" "*"
# A3 SELECT INBOX
# A4 LOGOUT
# netcat ile
nc mail.sirket.com 143
# IMAP CAPABILITY kontrolü (istemci olmadan)
(sleep 2; echo "A1 CAPABILITY"; sleep 1; echo "A2 LOGOUT") | nc mail.sirket.com 143
# POP3 testi
telnet mail.sirket.com 110
# USER ahmet
# PASS sifre123
# LIST
# QUIT
# SSL bağlantı tam testi
openssl s_client -connect mail.sirket.com:993 -quiet
# Bağlandıktan sonra IMAP komutlarını girin
Dovecot Yapılandırma Doğrulama
Yapılandırma değişikliği sonrasında her zaman doğrulama yapın:
# Yapılandırma sözdizimini kontrol et
doveconf -n 2>&1 | head -50
# Tüm aktif ayarları gör
doveconf -a
# Belirli bir ayarı bul
doveconf -a | grep ssl
# Yapılandırma dosyası konumları
doveconf -n | grep "^#.*dovecot"
# Test modunda başlat (çalışmadan)
dovecot -n
Log Rotasyonu ve Logwatch
Uzun vadede sorunları takip etmek için log analizi önemli:
# Son 24 saatin hata özeti
awk '/'"$(date --date='1 day ago' '+%b %_d')"'/{p=1} p' /var/log/mail.log | grep -c "auth failed"
# Başarısız giriş denemelerini listele (brute force tespiti)
grep "auth failed" /var/log/mail.log | awk '{print $NF}' | grep "rip=" | sed 's/.*rip=([^,]*).*/1/' | sort | uniq -c | sort -rn | head -20
# Fail2ban ile Dovecot koruması
cat /etc/fail2ban/jail.local | grep -A5 dovecot
# Eğer yoksa ekleyin:
# [dovecot]
# enabled = true
# port = imap,imaps,pop3,pop3s
# filter = dovecot
# logpath = /var/log/mail.log
# maxretry = 5
# bantime = 3600
Yaygın Hata Mesajları ve Anlamları
Log dosyalarında sık gördüğünüz hatalar ve ne anlama geldikleri:
- “Disconnected: Inactivity”: İstemci bağlantıyı açık tutmuş ama trafik yok, timeout devreye girmiş. Genellikle sorun değil.
- “imap-login: Maximum number of connections from user+IP exceeded”:
mail_max_userip_connectionslimitine ulaşıldı, artırılabilir. - “IMAP(user): Mailbox doesn’t exist: INBOX”: Maildir henüz oluşturulmamış, kullanıcı hiç mail almamış olabilir.
- “Fatal: chdir(/home/user) failed: No such file or directory”: Kullanıcının ev dizini yok.
- “Error: net_connect_unix(auth-master) failed: No such file or directory”: Auth socket dosyası eksik, genellikle servis yeniden başlatma ile çözülür.
- “SSL routines:ssl3_get_record:wrong version number”: İstemci plain text bağlantı açıyor ama sunucu SSL bekliyor. Port karışıklığı.
# Socket dosyalarını kontrol et
ls -la /var/run/dovecot/
# Eksik socket için
systemctl restart dovecot
ls -la /var/run/dovecot/auth-master
Sonuç
Dovecot sorunlarını çözerken sistematik olmak çok önemli. Önce servis çalışıyor mu, portlar açık mı, güvenlik duvarı engel mi bunları kontrol edin. Sonra log seviyesini artırıp tam hata mesajını alın. Kimlik doğrulama sorunlarında doveadm auth test komutu hayat kurtarır. SSL sorunlarında openssl s_client ile doğrudan bağlantı testi yapın.
En sık düştüğüm tuzakları söyleyeyim: Sertifika chain eksikliği, maildir sahiplik hataları ve bağlantı limitleri. Bunların üçü de log’da bazen net görünmez, biraz kazımak gerekir.
doveadm aracını yeterince kullanmayan sysadminler var, bu araç gerçekten güçlü. Kullanıcı testleri, bağlantı yönetimi, posta kutusu işlemleri hepsi bu araçla yapılabiliyor. Man sayfasını bir gözden geçirmenizi öneririm.
Son olarak: Üretim değişikliklerinden önce her zaman doveconf -n ile yapılandırmanızı doğrulayın, değişiklik sonrasında da log’u birkaç dakika izleyin. Küçük bir yazım hatası tüm mail sunucunuzu durdurabilir.
