Zimbra’da ActiveSync ile Mobil Cihaz Entegrasyonu
Mobil cihaz yönetimi, bir zamanlar “bu kadar da olmaz” diyerek görmezden geldiğimiz şeylerden biriydi. Sonra bir sabah CEO telefonuyla mail alamıyorum diye aradı, o gün her şey değişti. Zimbra’da ActiveSync entegrasyonu tam da bu noktada devreye giriyor: kurduğunuzda “vay be” diyorsunuz, kurarken ise saçlarınızı yoluyorsunuz. Bu yazıda yaşadığım gerçek senaryoları ve çözümleri aktaracağım.
ActiveSync Nedir ve Zimbra’da Nasıl Çalışır?
ActiveSync, Microsoft’un geliştirdiği ama artık endüstri standardı haline gelmiş bir mobil senkronizasyon protokolüdür. Zimbra, bu protokolü kendi Sync Client ile destekler. iOS, Android ve hatta Windows Phone (Allah rahmet eylesin) cihazlarla mail, takvim, kişiler ve görev senkronizasyonu sağlar.
Zimbra’nın ActiveSync implementasyonu iki farklı şekilde gelir:
- Zimbra Sync Client (ZCS): Açık kaynak sürümde varsayılan olarak gelir, temel senkronizasyon yapar
- Zimbra Mobile (ZCO): Network Edition ile birlikte gelir, ileri düzey MDM özellikleri sunar
Açık kaynağı kullanıyorsanız ve bütçeniz kısıtlıysa, üçüncü parti çözümler de var ama onlara geleceğiz.
Mimariye bakıldığında akış şu şekilde işliyor: Mobil cihaz, HTTPS üzerinden Zimbra’nın /Microsoft-Server-ActiveSync endpoint’ine bağlanıyor. Bu istek Nginx tarafından alınıp Zimbra’nın mailbox servisine iletiliyor. Mailbox servisi de IMAP/SMTP katmanıyla konuşarak veriyi mobil cihaza gönderiyor.
# ActiveSync endpoint'ini test etmek için basit bir curl komutu
curl -v -k https://mail.sirketiniz.com/Microsoft-Server-ActiveSync
-u [email protected]:sifre
-H "MS-ASProtocolVersion: 14.1"
Bu komutu çalıştırdığınızda 401 döndürmesi normaldir, ama 404 dönüyorsa bir şeyler ters gidiyor demektir.
Ön Koşullar ve Lisans Kontrolü
ActiveSync’i etkinleştirmeden önce birkaç şeyi kontrol etmek gerekiyor.
# Zimbra versiyonunu kontrol edin
su - zimbra -c "zmcontrol version"
# Mevcut lisansı kontrol edin (Network Edition için)
su - zimbra -c "zmlicense -p"
# ActiveSync'in etkin olup olmadığını kontrol edin
su - zimbra -c "zmprov gacf | grep zimbraActiveSyncEnabled"
Açık kaynak kullanıyorsanız zimbraActiveSyncEnabled değeri zaten TRUE gelecektir ama bazı eski kurulumlar FALSE döndürebilir. Network Edition’da ise lisans durumu kritik, lisansınız süreli ise ve süresi dolmuşsa ActiveSync çalışmayı bırakabilir.
Global düzeyde ActiveSync’i etkinleştirmek için:
# Tüm domain için ActiveSync'i etkinleştir
su - zimbra -c "zmprov modifyConfig zimbraActiveSyncEnabled TRUE"
# Belirli bir domain için etkinleştir
su - zimbra -c "zmprov modifyDomain sirketiniz.com zimbraActiveSyncEnabled TRUE"
# Tek bir kullanıcı için etkinleştir
su - zimbra -c "zmprov modifyAccount [email protected] zimbraActiveSyncEnabled TRUE"
Servis yeniden başlatmadan değişiklikler aktif olmaz:
su - zimbra -c "zmmailboxdctl restart"
SSL Sertifika Yapılandırması
Burası çoğu kurulumda sorun çıkaran yer. Mobil cihazlar, özellikle yeni iOS versiyonları, self-signed sertifikaları ya reddediyor ya da kullanıcıya 15 tane uyarı gösteriyor. Kurumsal ortamda bu kabul edilemez.
Let’s Encrypt veya ticari bir sertifika kullanıyorsanız şu adımları takip edin:
# Mevcut sertifika durumunu kontrol et
su - zimbra -c "zmcertmgr viewdeployedcrt all"
# Sertifika zincirini doğrula
openssl s_client -connect mail.sirketiniz.com:443 -servername mail.sirketiniz.com
# Yeni sertifika deploy et (dosyaları /tmp/ssl/ altına koyduğunuzu varsayarak)
su - zimbra -c "zmcertmgr deploycrt comm /tmp/ssl/mail.crt /tmp/ssl/mail.key /tmp/ssl/chain.crt"
Sertifika deploy ettikten sonra mutlaka Nginx’i restart edin:
su - zimbra -c "zmproxyctl restart"
su - zimbra -c "zmnginxctl restart"
Mobil cihazdan test ediyorsanız ve sertifika hatası alıyorsanız, şu komutla intermediate chain’i kontrol edin:
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /opt/zimbra/ssl/zimbra/commercial/commercial.crt
iOS Cihaz Yapılandırması
iOS, ActiveSync kurulumunu “Exchange” profili üzerinden yapıyor. Kullanıcılara şunu söylemeniz yeterli:
Ayarlar > Mail > Hesap Ekle > Microsoft Exchange
Dolduracakları alanlar:
- E-posta: tam mail adresi ([email protected])
- Sunucu: mail.sirketiniz.com
- Alan Adı: boş bırakılabilir
- Kullanıcı Adı: tam mail adresi veya sadece kullanıcı adı
- Parola: Zimbra parolası
iOS cihazlar bazen autodiscover yapmaya çalışıyor. Zimbra’nın autodiscover desteği sınırlı olduğundan DNS’e şunu ekleyin:
# DNS'e eklenecek autodiscover kaydı
# A kaydı: autodiscover.sirketiniz.com -> mail sunucu IP
# veya CNAME: autodiscover.sirketiniz.com -> mail.sirketiniz.com
# Autodiscover endpoint'ini test edin
curl -v -k https://autodiscover.sirketiniz.com/autodiscover/autodiscover.xml
Zimbra’da autodiscover için /opt/zimbra/conf/nginx/includes/ dizinine bakın, gerekirse nginx konfigürasyonuna redirect ekleyebilirsiniz.
Android Cihaz Yapılandırması
Android tarafında durum biraz daha karmaşık çünkü her üretici kendi mail uygulamasını getiriyor. Samsung’da “Email” uygulaması, stock Android’de “Gmail” veya “Outlook” kullanılıyor.
Stock Android için önerim Microsoft Outlook uygulaması kullanmak. Neden mi? Çünkü Outlook, Exchange ActiveSync’i en iyi destekleyen uygulama ve sorun gidermesi çok daha kolay.
Kurumsal ortamlarda MDM (Mobile Device Management) sistemi kullanıyorsanız, profil push etmek çok daha temiz bir çözüm. Ama MDM yoksa kullanıcıları şu bilgilerle yönlendirin:
- Exchange sunucu: mail.sirketiniz.com
- Port: 443
- SSL: Açık
- Kullanıcı adı: [email protected]
Cihaz Politikaları Yapılandırması
ActiveSync’in güçlü yanı, mobil cihazlara politika uygulayabilmesi. PIN zorunluluğu, uzaktan silme, cihaz şifreleme gibi özellikler bu kapsamda.
# Varsayılan mobil politikayı görüntüle
su - zimbra -c "zmprov getConfig zimbraDefaultMobilePolicyAccountId"
# Yeni bir mobil politika oluştur
su - zimbra -c "zmprov createMobileDevicePolicy"
# Mevcut politikaları listele
su - zimbra -c "zmprov getAllMobilePolicies"
Belirli bir kullanıcıya politika ataması:
# Kullanıcının mevcut mobil politikasını görüntüle
su - zimbra -c "zmprov getAccount [email protected] zimbraMobilePolicyKey"
# Politika uygula (Network Edition)
su - zimbra -c "zmprov modifyAccount [email protected]
zimbraActiveSyncEnabled TRUE
zimbraActiveSyncPendingRemoteWipe FALSE"
PIN politikası için admin konsolunu kullanmak daha pratik ama komut satırından da yapılabilir:
su - zimbra -c "zmprov md sirketiniz.com
zimbraActiveSyncEnabled TRUE
zimbraMobilePolicyDevicePasswordEnabled TRUE
zimbraMobilePolicyMinDevicePasswordLength 6
zimbraMobilePolicyMaxDevicePasswordFailedAttempts 10"
Kayıtlı Cihazları Yönetme
Zamanla kullanıcıların birden fazla cihazı olacak, bazı cihazlar değişecek, bazı çalışanlar şirketten ayrılacak. Bu durumları yönetmek için komut satırı araçları şart.
# Bir kullanıcının kayıtlı cihazlarını listele
su - zimbra -c "zmprov getAccount [email protected] zimbraActiveSyncDeviceId"
# Daha detaylı cihaz bilgisi için
su - zimbra -c "zmsoap -z -m [email protected] GetDeviceStatusRequest"
# Belirli bir cihazı sil
su - zimbra -c "zmprov removeDeviceFromAccount [email protected] CIHAZ_ID"
# Uzaktan cihaz silme (wipe) işlemi başlat
su - zimbra -c "zmsoap -z -m [email protected] RemoteWipeRequest
<account by='name'>[email protected]</account>"
Bir çalışan şirketten ayrıldığında yapmanız gerekenler:
# Hesabı kilitle
su - zimbra -c "zmprov modifyAccount [email protected] zimbraAccountStatus locked"
# Tüm cihazlardan wipe başlat (dikkatli olun, kişisel verileri de siler)
su - zimbra -c "zmprov removeAllDevicesFromAccount [email protected]"
# Aktif sync oturumlarını sonlandır
su - zimbra -c "zmmailboxdctl sync stop [email protected]"
Sık Karşılaşılan Sorunlar ve Çözümleri
Sync Durmuş Cihazlar
En sık karşılaştığım sorun bu. Kullanıcı mail alamıyor, takvim güncellenmiyor. İlk baktığım yer:
# Mailbox loglarını kontrol et
tail -f /opt/zimbra/log/mailbox.log | grep "ActiveSync|sync|mobile"
# Sync hata logları
tail -f /opt/zimbra/log/sync.log
# Nginx access loglarından ActiveSync isteklerini filtrele
grep "Microsoft-Server-ActiveSync" /opt/zimbra/log/nginx.access.log | tail -50
Çoğu zaman sorun şuradan geliyor: cihaz eski bir sync state’i tutuyor ve sunucu bunu kabul etmiyor. Çözüm, sunucu tarafında cihaz state’ini sıfırlamak:
# Cihazın sync state'ini sıfırla
su - zimbra -c "zmprov deleteDevice [email protected] CIHAZ_ID"
# Sonra kullanıcıdan cihazda hesabı silip tekrar eklemesini isteyin
403 veya 449 Hataları
449 hatası genellikle politika uyumsuzluğundan geliyor. Cihaz politikayı kabul etmeden sync olmayı reddediyor.
# Politika durumunu kontrol et
grep "449|policy" /opt/zimbra/log/mailbox.log | tail -20
# Politikayı geçici olarak devre dışı bırakıp test edin
su - zimbra -c "zmprov modifyDomain sirketiniz.com zimbraActiveSyncEnabled TRUE"
403 hatası ise genellikle izin sorunudur:
# Kullanıcı için ActiveSync iznini açıkça ver
su - zimbra -c "zmprov modifyAccount [email protected] zimbraActiveSyncEnabled TRUE"
# COS üzerinden kontrol edin
su - zimbra -c "zmprov getCos default | grep ActiveSync"
Batarya Tüketim Şikayetleri
Kullanıcılar “mail açık tutunca batarya bitiyor” diye şikayet ediyorsa, sorun genellikle push interval ayarındadır. ActiveSync’in push mekanizması heartbeat interval ile çalışır.
# Mevcut heartbeat ayarını kontrol et
su - zimbra -c "zmprov gacf | grep -i heartbeat"
# Heartbeat interval'ı düzenle (saniye cinsinden, varsayılan 8 dakika = 480 saniye)
su - zimbra -c "zmprov modifyConfig zimbraActiveSyncHeartbeatInterval 600"
Interval’ı artırmak batarya ömrünü uzatır ama mail gecikmesini artırır. 600-900 saniye arası çoğu ortam için makul bir denge noktası.
iOS 16+ Sertifika Sorunları
iOS 16 ile Apple, TLS 1.0 ve 1.1’i tamamen kesti. Eski Zimbra kurulumlarında bu sorun ciddi şekilde hissediliyor.
# Zimbra'nın kullandığı TLS versiyonlarını kontrol et
su - zimbra -c "zmprov gacf | grep zimbraSSLExcludeCipherSuites"
# Nginx SSL konfigürasyonunu kontrol et
cat /opt/zimbra/conf/nginx/nginx.conf | grep ssl_protocols
# TLS 1.2 ve 1.3'ü aktif et, eski versiyonları kaldır
su - zimbra -c "zmprov modifyConfig zimbraReverseProxySSLProtocols 'TLSv1.2 TLSv1.3'"
# Nginx'i yeniden yapılandır ve başlat
su - zimbra -c "zmproxyconfgen"
su - zimbra -c "zmproxyctl restart"
Performans Optimizasyonu
Kullanıcı sayısı 200’ü geçtiğinde ActiveSync bağlantıları mailbox servisini zorlamaya başlar. Her mobil cihaz uzun polling bağlantısı açar ve bu thread tüketir.
# Mevcut ActiveSync bağlantı sayısını gör
su - zimbra -c "zmstat-chart -t 1 | grep activesync"
# Thread pool ayarlarını kontrol et
su - zimbra -c "zmprov gacf | grep zimbraMailboxdNumThreads"
# Gerekirse thread sayısını artır (RAM'inize göre hesaplayın)
su - zimbra -c "zmprov modifyConfig zimbraMailboxdNumThreads 500"
ActiveSync loglarını ayrı bir dosyaya yönlendirmek izlemeyi kolaylaştırır:
# Log4j konfigürasyonunu düzenle
vi /opt/zimbra/conf/log4j.properties
# Şu satırı ekleyin
log4j.logger.zimbra.soap.ActiveSync=DEBUG,mailboxFile
# Değişikliği uygula
su - zimbra -c "zmmailboxdctl restart"
500+ kullanıcıda, özellikle iOS cihazların çoğunlukta olduğu ortamlarda, nginx’in worker connection sayısını da artırmanız gerekebilir:
# Nginx worker ayarlarını kontrol et
cat /opt/zimbra/conf/nginx/nginx.conf | grep worker
# /opt/zimbra/conf/nginx/nginx.conf.web.https.default dosyasını düzenle
# keepalive_timeout değerini ActiveSync için optimize edin
İzleme ve Alerting
Sorun çıkmadan önce yakalamak için şu metrikleri izleyin:
# ActiveSync queue durumu
su - zimbra -c "zmstat-chart -t 60" | grep -i sync
# Başarısız kimlik doğrulama girişimleri
grep "authentication failed" /opt/zimbra/log/mailbox.log |
grep "activesync|mobile" |
awk '{print $NF}' | sort | uniq -c | sort -rn | head 20
# Son 1 saatteki ActiveSync işlem sayısı
grep "$(date '+%Y-%m-%d %H')" /opt/zimbra/log/nginx.access.log |
grep "Microsoft-Server-ActiveSync" | wc -l
Nagios veya Zabbix kullanıyorsanız basit bir check scripti:
#!/bin/bash
# /usr/local/bin/check_zimbra_activesync.sh
THRESHOLD=100
ERROR_COUNT=$(grep "$(date '+%Y-%m-%d %H')" /opt/zimbra/log/mailbox.log |
grep -c "ActiveSync.*error|ActiveSync.*failed" 2>/dev/null)
if [ "$ERROR_COUNT" -gt "$THRESHOLD" ]; then
echo "CRITICAL: Son 1 saatte $ERROR_COUNT ActiveSync hatasi"
exit 2
elif [ "$ERROR_COUNT" -gt "$(($THRESHOLD/2))" ]; then
echo "WARNING: Son 1 saatte $ERROR_COUNT ActiveSync hatasi"
exit 1
else
echo "OK: ActiveSync normal calisiyor ($ERROR_COUNT hata)"
exit 0
fi
Sonuç
Zimbra’da ActiveSync kurulumu aslında düz bir iş, ama detaylar sizi doldurabilir. Özellikle sertifika zinciri, TLS versiyonları ve cihaz politikaları konularında dikkatli olun. Benim pratiğimde en çok zaman kaybettiren şey, kullanıcıların “dün çalışıyordu bugün çalışmıyor” dediği durumlar. Bunların yüzde sekseninde ya sertifika yenilendi ve düzgün deploy edilmedi, ya da kullanıcı şifresini değiştirdi ama cihazını güncellemedi.
Büyük ölçekli ortamlarda, 300+ kullanıcı dediğimizde, ActiveSync bağlantılarını ayrı bir proxy arkasına almayı düşünün. Zimbra’nın multi-server kurulumunda proxy node’u ActiveSync trafiğini yönetmek için biçilmiş kaftan.
Son olarak şunu söyleyeyim: Ne kadar iyi yapılandırırsanız yapılandırın, ara sıra bir cihaz sync olmayı reddedecek. Bu normal. Cihazı silip yeniden eklemek çoğu zaman beş dakikada çözüyor. Kullanıcıya bunu söylediğinizde yüzü düşebilir, ama bu işin gerçeği bu.
