Mail sunucunuzu kurdunuz, Dovecot çalışıyor, kullanıcılar posta alıp gönderiyor. Ama bir gün bir kullanıcı geliyor: “Hocam, ben Thunderbird’den otomatik spam filtresi kuramıyor muyum?” diye soruyor. İşte tam bu noktada ManageSieve devreye giriyor. Sieve, mail sunucusu tarafında çalışan bir filtreleme dili; ManageSieve ise kullanıcıların bu filtreleri mail istemcilerinden uzaktan yönetmesini sağlayan protokol. Bu yazıda Dovecot üzerinde ManageSieve kurulumunu adım adım, gerçek dünya senaryolarıyla anlatacağım.
ManageSieve Nedir ve Neden Kullanmalıyız?
Sieve filtreleri, mailiniz sunucuya ulaştığı anda çalışır. Yani istemciden bağımsız, tamamen sunucu taraflı bir filtreleme yapısı sunar. Bunu Outlook kurallarıyla karıştırmayın: Outlook kuralları istemci açıkken çalışır, Sieve her zaman çalışır.
ManageSieve (RFC 5804) protokolü, kullanıcıların Sieve betiklerini merkezi olarak yönetmesini sağlar. Thunderbird’deki Sieve eklentisi, RoundCube’ün Managesieve modülü ya da kendi yazdığınız bir araç, bu protokol üzerinden sunucuya bağlanır ve filtreleri okur, yazar, siler.
Kullanım senaryoları oldukça geniş:
- Otomatik sınıflandırma: Belirli göndericilerden gelen mailler otomatik olarak ilgili klasöre taşınsın
- Tatil otomatik yanıtları: Kullanıcı tatile çıktığında istemcisiz otomatik cevap gönderimi
- Spam yönetimi: SpamAssassin skoru yüksek mailleri otomatik Junk klasörüne at
- Yönlendirme: Belirli mailler farklı bir adrese forward edilsin
- Büyük dosya uyarısı: Eklenti boyutu 10MB’ı geçen mailler özel klasöre gitsin
Kurulum Öncesi Gereksinimler
Bu rehber Ubuntu 22.04/Debian tabanlı sistemler için yazıldı, CentOS/RHEL kullanıyorsanız paket isimlerine dikkat edin. Dovecot zaten kurulu ve çalışıyor olmalı. Temel IMAP kurulumunuz yoksa önce onu tamamlayın.
Mevcut Dovecot kurulumunuzu kontrol edelim:
dovecot --version
dpkg -l | grep dovecot
systemctl status dovecot
ManageSieve için gerekli paket Dovecot’un Pigeonhole eklentisidir. Pigeonhole, Sieve ve ManageSieve desteğini Dovecot’a ekler:
apt update
apt install dovecot-sieve dovecot-managesieved
Kurulumdan sonra modüllerin geldiğini doğrulayalım:
ls /usr/lib/dovecot/modules/ | grep sieve
Burada lib20_imap_sieve_plugin.so, lib90_sieve_plugin.so ve benzer dosyaları görmelisiniz.
Dovecot Yapılandırması
Dovecot yapılandırması /etc/dovecot/ altında genellikle modüler bir yapıda gelir. Önce hangi dosyaların mevcut olduğuna bakalım:
ls /etc/dovecot/conf.d/
Protokol Yapılandırması
ManageSieve bir protokol olarak Dovecot’ta tanımlanmalı. /etc/dovecot/conf.d/20-managesieve.conf dosyasını açın veya oluşturun:
nano /etc/dovecot/conf.d/20-managesieve.conf
İçerik şu şekilde olmalı:
protocols = $protocols sieve
service managesieve-login {
inet_listener sieve {
port = 4190
}
service_count = 1
process_min_avail = 0
vsz_limit = 64M
}
service managesieve {
process_limit = 1024
}
protocol sieve {
managesieve_logout_format = bytes=%i/%o
}
port = 4190: ManageSieve’in standart portu budur. Eski sistemlerde 2000 de kullanılırdı ama RFC 5804 ile 4190 standart haline geldi.
Plugin Yapılandırması
Şimdi Sieve eklentisini yapılandıralım. /etc/dovecot/conf.d/90-sieve.conf dosyasına bakın, büyük ihtimalle zaten mevcut olacak:
nano /etc/dovecot/conf.d/90-sieve.conf
Temel bir yapılandırma şu şekilde olmalı:
plugin {
sieve = file:~/sieve;active=~/.dovecot.sieve
sieve_default = /etc/dovecot/sieve/default.sieve
sieve_default_name = roundcube
sieve_global_dir = /etc/dovecot/sieve/global/
sieve_dir = ~/sieve
# Maksimum betik boyutu (byte cinsinden, 0 = sınırsız)
sieve_max_script_size = 1M
# Kullanıcı başına maksimum betik sayısı
sieve_max_actions = 32
sieve_max_redirects = 4
# Hangi Sieve eklentileri aktif olsun
sieve_extensions = +notify +imapflags +duplicate
}
sieve = file:~/sieve;active=~/.dovecot.sieve: Bu ifade, kullanıcının Sieve betiklerinin ~/sieve/ klasöründe saklandığını ve aktif betiğin ~/.dovecot.sieve symlink’i ile işaret edildiğini belirtir. ManageSieve protokolü bu yapıyı anlayarak çalışır.
sieve_default: Kullanıcının kendi betiği yoksa bu betik çalışır. Global spam kuralları burada işe yarar.
sieve_max_redirects: Bir betiğin kaç farklı adrese yönlendirme yapabileceğini sınırlar. Spam botların sunucunuzu relay olarak kullanmasını önlemek için önemli.
Mail Teslimatta Sieve Aktifleştirmesi
Sieve filtreleri mail teslim aşamasında çalışır. LDA (Local Delivery Agent) veya LMTP kullanıyorsanız yapılandırma biraz farklı. /etc/dovecot/conf.d/15-lda.conf dosyasını düzenleyin:
nano /etc/dovecot/conf.d/15-lda.conf
protocol lda {
mail_plugins = $mail_plugins sieve
log_path = /var/log/dovecot-lda-errors.log
info_log_path = /var/log/dovecot-lda.log
postmaster_address = [email protected]
}
LMTP kullanıyorsanız (Postfix ile önerilen yol) /etc/dovecot/conf.d/20-lmtp.conf:
protocol lmtp {
mail_plugins = $mail_plugins sieve
postmaster_address = [email protected]
}
Dovecot’u Yeniden Başlatma
Yapılandırmaları test edelim ve uygulayalım:
dovecot -n
doveconf -n | grep -i sieve
Hata yoksa:
systemctl restart dovecot
systemctl status dovecot
Servislerin çalıştığını doğrulayın:
ss -tlnp | grep 4190
4190 portunun dinlediğini görmelisiniz.
Varsayılan Sieve Betiği Oluşturma
Kullanıcıların kendi filtresi olmadığında devreye girecek global bir betik oluşturalım:
mkdir -p /etc/dovecot/sieve/global
nano /etc/dovecot/sieve/default.sieve
Basit bir spam filtresi:
require ["fileinto", "imap4flags"];
# SpamAssassin tarafından işaretlenmiş mailler
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
setflag "\Seen";
stop;
}
# Spam skoru 10'u geçenler direkt silinsin (isteğe bağlı)
if header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "10" {
discard;
stop;
}
Betiği derleyelim (sözdizimi hatası kontrolü):
sievec /etc/dovecot/sieve/default.sieve
Bu komut hata vermezse betik geçerlidir.
Dizin izinlerini ayarlayalım:
chown -R dovecot:dovecot /etc/dovecot/sieve/
chmod 644 /etc/dovecot/sieve/default.sieve
Güvenlik Duvarı Yapılandırması
ManageSieve portu olan 4190’ı açmamız gerekiyor. UFW kullananlar için:
ufw allow 4190/tcp comment "ManageSieve"
ufw status
iptables kullananlar için:
iptables -A INPUT -p tcp --dport 4190 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
Eğer ManageSieve’i sadece belirli IP’lerden erişilebilir yapmak istiyorsanız (örneğin mail istemcilerinin bulunduğu ağ):
iptables -A INPUT -p tcp --dport 4190 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 4190 -j DROP
SSL/TLS Yapılandırması
ManageSieve bağlantılarını şifrelemek zorunlu. ManageSieve STARTTLS kullanır, yani bağlantı düz başlar ve şifrelenir. Dovecot’un SSL yapılandırması zaten mevcutsa ManageSieve bunu otomatik kullanır.
/etc/dovecot/conf.d/10-ssl.conf dosyasını kontrol edin:
grep -E "ssl|cert|key" /etc/dovecot/conf.d/10-ssl.conf
ManageSieve özelinde SSL’i zorunlu kılmak için 20-managesieve.conf dosyasına ekleyin:
protocol sieve {
managesieve_logout_format = bytes=%i/%o
# Şifrelenmemiş bağlantıları reddet
managesieve_implementation_string = Dovecot Pigeonhole
}
service managesieve-login {
inet_listener sieve {
port = 4190
}
# SSL zorunlu yapmak için (isteğe bağlı):
# inet_listener sieve_deprecated {
# port = 2000
# ssl = yes
# }
}
Mail İstemcisi Yapılandırması
Thunderbird ile Sieve Eklentisi
Thunderbird kullanıcıları Sieve yönetimi için “Sieve” eklentisini (önceden “Sieve Message Filters” veya “ThunderSieve” olarak bilinir) kullanabilir.
Eklenti kurulduktan sonra:
- Hesap Ayarları > İlgili hesap > Sieve Filtreler
- Sunucu: mail.example.com
- Port: 4190
- Bağlantı güvenliği: STARTTLS
- Kimlik doğrulama: Normal şifre
RoundCube Webmail
RoundCube kullanıyorsanız managesieve eklentisini aktifleştirin:
nano /etc/roundcube/config.inc.php
$config['plugins'] = array('archive', 'zipdownload', 'managesieve');
$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'tls://localhost';
$config['managesieve_usetls'] = true;
$config['managesieve_default'] = '/etc/dovecot/sieve/default.sieve';
Gerçek Dünya Senaryoları ve Betik Örnekleri
Senaryo 1: Kurumsal Tatil Otomatik Yanıtı
Kullanıcı iki haftalığına tatile gidiyor. Thunderbird üzerinden şu betiği yazıyor:
require ["vacation", "date", "relational"];
if allof (
currentdate :value "ge" "date" "2024-08-01",
currentdate :value "le" "date" "2024-08-14"
) {
vacation
:days 1
:subject "Tatildeyim / Out of Office"
:from "[email protected]"
:addresses ["[email protected]", "[email protected]"]
"Merhaba,
08 Agustos - 14 Agustos tarihleri arasinda tatildeyim.
Acil durumlar icin: [email protected]
Saygilarimla,
Ahmet Yilmaz";
}
:days 1: Aynı kişiye en fazla 1 günde bir otomatik yanıt gönder. Bu olmadan döngü oluşabilir.
:addresses: Hangi adreslere gelen maillere yanıt verileceğini belirler. Birden fazla alias’ınız varsa hepsini ekleyin.
Senaryo 2: Departmana Göre Otomatik Klasörleme
Büyük şirketlerde farklı departmanlardan gelen mailleri otomatik sıralamak:
require ["fileinto", "envelope"];
if envelope :domain :is "from" "muhasebe.example.com" {
fileinto "INBOX/Muhasebe";
stop;
}
if header :contains "X-Department" "IT" {
fileinto "INBOX/BT-Departmani";
stop;
}
if address :is "from" ["[email protected]", "[email protected]"] {
fileinto "INBOX/Yazilim-Destek";
stop;
}
Senaryo 3: Büyük Eklentilerin Yönetimi
Sunucu kaynaklarını korumak ve kullanıcıları bilgilendirmek için:
require ["fileinto", "imap4flags", "notify"];
# 15MB'den büyük mailler ayrı klasöre
if size :over 15M {
fileinto "INBOX/Buyuk-Ekler";
setflag "\Flagged";
stop;
}
Log İzleme ve Sorun Giderme
ManageSieve ile ilgili sorunları logdan takip edin:
tail -f /var/log/mail.log | grep -i sieve
journalctl -u dovecot -f | grep -i sieve
Sık karşılaşılan sorunlar ve çözümleri:
Bağlantı reddediliyor: 4190 portunun açık olduğunu ve Dovecot’un o portu dinlediğini kontrol edin.
ss -tlnp | grep 4190
telnet mail.example.com 4190
Başarılı bir ManageSieve bağlantısında şuna benzer bir karşılama görürsünüz: "IMPLEMENTATION" "Dovecot Pigeonhole"
Betik derleme hatası: sievec komutuyla betiğinizi test edin:
sievec /home/kullanici/sieve/betik.sieve
Kimlik doğrulama hatası: SASL mekanizmalarının ManageSieve için de çalıştığını kontrol edin:
doveconf -n | grep auth
Sieve betiği çalışmıyor: Aktif betiği kontrol edin:
ls -la /home/kullanici/.dovecot.sieve
cat /home/kullanici/.dovecot.sieve
Symlink doğru mu gösteriyor? sieve klasörü izinleri mail kullanıcısına ait mi?
Kullanıcı Betiklerini Yönetme
Sistem yöneticisi olarak kullanıcıların betiklerini komut satırından da yönetebilirsiniz:
# Belirli bir kullanıcının aktif betiğini görüntüle
sieveshell --user=ahmet --passwd=sifre localhost listscripts
# Betiği yükle
sieveshell --user=ahmet --passwd=sifre localhost putscript myscript /tmp/filter.sieve
# Betiği aktifleştir
sieveshell --user=ahmet --passwd=sifre localhost setactive myscript
Toplu kullanıcı betiği dağıtımı için basit bir script:
#!/bin/bash
SIEVE_SCRIPT="/etc/dovecot/sieve/default.sieve"
MAIL_BASE="/var/mail/vhosts/example.com"
for USER_DIR in $MAIL_BASE/*/; do
USER=$(basename $USER_DIR)
SIEVE_DIR="$USER_DIR/sieve"
if [ ! -d "$SIEVE_DIR" ]; then
mkdir -p "$SIEVE_DIR"
cp "$SIEVE_SCRIPT" "$SIEVE_DIR/default.sieve"
sievec "$SIEVE_DIR/default.sieve"
ln -sf "$SIEVE_DIR/default.sieve" "$USER_DIR/.dovecot.sieve"
chown -R vmail:vmail "$SIEVE_DIR"
echo "Sieve kuruldu: $USER"
fi
done
Performans ve Güvenlik Notları
ManageSieve ve Sieve kullanırken dikkat edilmesi gereken birkaç önemli nokta:
- sieve_max_redirects = 4: Bu değeri düşük tutun. Kötü niyetli veya yanlış yapılandırılmış betikler sunucunuzu relay’e dönüştürebilir. Yönlendirmeleri harici adreslere kısıtlamak için
sieve_redirect_envelope_from = senderkullanın.
- sieve_max_script_size: 1M genellikle fazlasıyla yeterli. Çok büyük betiklere izin vermek gereksiz CPU kullanımına yol açar.
- Global betikler: Admin olarak tüm kullanıcılara uygulanan betikleri
/etc/dovecot/sieve/global/altına koyun. Bu betikler kullanıcı betiklerinden önce veya sonra çalışacak şekilde ayarlanabilir.
- Log rotasyonu: Sieve logları büyüyebilir,
/etc/logrotate.d/dovecotdosyasını kontrol edin.
ManageSieve bağlantı sayısını sınırlamak için:
service managesieve-login {
inet_listener sieve {
port = 4190
}
process_limit = 128
service_count = 1
}
Sonuç
ManageSieve kurulumu, kullanıcılarınıza sunucu taraflı mail filtreleme gücünü sezgisel bir arayüzden yönetme imkanı tanır. Bu rehberde Dovecot Pigeonhole kurulumundan başlayarak protokol yapılandırmasını, SSL güvenliğini, mail istemcisi entegrasyonunu ve gerçek dünya betik örneklerini ele aldık.
En çok değer katan yanı şu: Kullanıcı laptop’unu kapattığında bile tatil yanıtları çalışır, spam klasöre gider, müşteri mailleri doğru klasöre düşer. Sunucu taraflı filtreleme bu güvenilirliği sağlar.
Bir sonraki adım olarak Sieve betiklerini bir web arayüzüyle yönetmek isterseniz RoundCube entegrasyonunu derinleştirmeyi veya özelleştirilmiş bir admin paneli oluşturmayı düşünebilirsiniz. SpamAssassin ile Sieve entegrasyonunu da ayrı bir yazıda ele alabiliriz.