Dovecot ile ManageSieve Protokolü Kurulumu ve Yapılandırması

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 = sender kullanı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/dovecot dosyası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.

Yorum yapın