Mail sunucunuza gelen yüzlerce e-postayı manuel olarak klasörlere taşımaktan, spam’leri silmekten ya da belirli göndericilerden gelen mailleri otomatik yönlendirmekten yoruldunuz mu? İşte tam bu noktada Sieve devreye giriyor. Dovecot’un Sieve entegrasyonu, sunucu taraflı mail filtreleme için son derece güçlü ve esnek bir çözüm sunuyor. Bu yazıda Dovecot üzerinde Sieve kurulumunu, yapılandırmasını ve gerçek dünya senaryolarında nasıl kullanacağınızı adım adım ele alacağız.
Sieve Nedir ve Neden Kullanmalısınız?
Sieve, RFC 5228 ile tanımlanmış bir mail filtreleme dilidir. İstemci taraflı filtreleme (Outlook kuralları gibi) yerine sunucu tarafında çalışır, yani kullanıcının mail istemcisi açık olmasa bile kurallar işlenir. Bu fark kritiktir; çünkü sunucu taraflı filtreleme şu avantajları sağlar:
- Platformdan bağımsızlık: Telefon, tablet veya bilgisayar fark etmez, kurallar her zaman çalışır.
- Bant genişliği tasarrufu: İstenmeyen mailler istemciye hiç indirilmez.
- Merkezi yönetim: Sistem yöneticisi tüm kullanıcılar için genel kurallar tanımlayabilir.
- ManageSieve protokolü: Kullanıcılar web arayüzü veya istemci üzerinden kendi kurallarını yönetebilir.
Dovecot, Sieve’i dovecot-pigeonhole paketi aracılığıyla destekler. Pigeonhole projesi, Dovecot için Sieve implementasyonunu sağlayan resmi eklentidir.
Kurulum
Debian/Ubuntu Sistemlerde Kurulum
apt update
apt install dovecot-sieve dovecot-managesieved
Kurulum sonrası servis durumunu kontrol edin:
systemctl status dovecot
dovecot --version
# Sieve desteğini doğrulamak için
dovecot --build-options | grep sieve
RHEL/CentOS/AlmaLinux Sistemlerde Kurulum
dnf install dovecot-pigeonhole
systemctl restart dovecot
Paket kurulduktan sonra /usr/lib/dovecot/modules/ dizininde lib10_sieve_plugin.so dosyasının mevcut olduğunu doğrulayın:
ls /usr/lib/dovecot/modules/ | grep sieve
Dovecot Yapılandırması
Temel Sieve Eklenti Yapılandırması
Sieve’i etkinleştirmek için önce dovecot.conf veya ilgili konfigürasyon dosyasına eklenti eklemeliyiz. Genellikle /etc/dovecot/conf.d/90-sieve.conf dosyası bu amaçla kullanılır.
LDA (Local Delivery Agent) veya LMTP üzerinde Sieve’i etkinleştirmek için:
# /etc/dovecot/conf.d/15-lda.conf
protocol lda {
mail_plugins = $mail_plugins sieve
postmaster_address = [email protected]
hostname = mail.yourdomain.com
}
Eğer LMTP kullanıyorsanız (ki Postfix entegrasyonlarında yaygındır):
# /etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp {
mail_plugins = $mail_plugins sieve
postmaster_address = [email protected]
}
Sieve Eklenti Parametreleri
/etc/dovecot/conf.d/90-sieve.conf dosyasını düzenleyin:
plugin {
# Kullanıcının aktif Sieve scripti
sieve = file:~/sieve;active=~/.dovecot.sieve
# Sieve scriptlerinin saklanacağı dizin
sieve_dir = ~/sieve
# Global Sieve scriptleri (admin tarafından yönetilir)
sieve_global = /etc/dovecot/sieve/global/
# Script öncesi çalışacak admin kuralları
sieve_before = /etc/dovecot/sieve/before.d/
# Script sonrası çalışacak admin kuralları
sieve_after = /etc/dovecot/sieve/after.d/
# Maksimum script boyutu (64KB)
sieve_max_script_size = 64k
# Bir scriptte maksimum aksiyon sayısı
sieve_max_actions = 32
# Maksimum yönlendirme sayısı (spam önlemi)
sieve_max_redirects = 4
# Quota plugin ile entegrasyon
sieve_quota_max_scripts = 20
sieve_quota_max_storage = 5M
}
Önemli parametreleri açıklayalım:
- sieve: Aktif scriptin yolu ve formatı.
file:prefix’i dosya tabanlı depolamayı belirtir. - sieve_before: Kullanıcı kurallarından önce işlenen admin kuralları. Spam filtreleme için idealdir.
- sieve_after: Kullanıcı kurallarından sonra işlenen admin kuralları.
- sieve_max_redirects: Bir mail döngü oluşturmasını engellemek için yönlendirme limitini kısıtlar.
ManageSieve Yapılandırması
ManageSieve, kullanıcıların kendi Sieve scriptlerini yönetmesine olanak tanıyan bir protokoldür. Port 4190 üzerinde çalışır:
# /etc/dovecot/conf.d/20-managesieve.conf
service managesieve-login {
inet_listener sieve {
port = 4190
}
service_count = 1
process_min_avail = 0
}
service managesieve {
process_limit = 1024
}
protocol sieve {
managesieve_max_line_length = 65536
managesieve_logout_format = bytes=%i/%o
# Giriş için izin verilen mekanizmalar
auth_mechanisms = plain login
}
Güvenlik duvarı ayarlarını yapmayı unutmayın:
# UFW kullanıyorsanız
ufw allow 4190/tcp
# firewalld kullanıyorsanız
firewall-cmd --permanent --add-port=4190/tcp
firewall-cmd --reload
Sieve Script Yazımı
Sieve’in sözdizimi oldukça okunabilir ve mantığı nettir. Her script require bildirimleriyle başlar, ardından kurallar sırayla işlenir.
Temel Script Yapısı
require ["fileinto", "reject", "vacation", "imap4flags"];
# Spam klasörüne taşı
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
stop;
}
# Belirli göndericiden gelen mailleri klasöre taşı
if address :is "from" "[email protected]" {
fileinto "INBOX.Newsletters";
stop;
}
# Varsayılan: INBOX'a teslim et
keep;
Gerçek Dünya Senaryosu 1: Kurumsal Spam Filtreleme
SpamAssassin veya Rspamd ile entegre çalışan bir spam filtreleme scripti:
require ["fileinto", "imap4flags", "mailbox"];
# Yüksek spam skoru - direkt sil
if header :contains "X-Spam-Level" "**********" {
discard;
stop;
}
# Orta spam skoru - Junk klasörüne taşı
if anyof (
header :contains "X-Spam-Flag" "YES",
header :contains "X-Rspamd-Action" "add header",
header :contains "X-Rspamd-Action" "rewrite subject"
) {
fileinto :create "INBOX.Junk";
setflag "\Seen";
stop;
}
# Kimlik doğrulama başarısız mailler
if header :contains "Authentication-Results" "dkim=fail" {
fileinto :create "INBOX.Suspicious";
stop;
}
Bu scripti /etc/dovecot/sieve/before.d/10-spam-filter.sieve olarak kaydedin. before.d dizinindeki scriptler kullanıcı scriptlerinden önce çalışacağından tüm kullanıcılara uygulanır.
Script Derleme
.sieve uzantılı scriptleri Dovecot’un çalıştırabilmesi için derlemek gerekmez, ancak derleme hataları için sievec aracını kullanabilirsiniz:
# Script sözdizimini kontrol et
sievec /etc/dovecot/sieve/before.d/10-spam-filter.sieve
# Kullanıcı scriptini kontrol et
sievec /home/user/sieve/myscript.sieve
Hata yoksa komut çıktısız tamamlanır. Hata varsa satır numarası ve açıklama ile bildirir.
Gerçek Dünya Senaryosu 2: Departman Bazlı Mail Yönlendirme
Bir şirkette farklı departmanlara gelen mailleri otomatik yönlendirme örneği. Bu scripti /etc/dovecot/sieve/global/company-rules.sieve olarak saklayabilirsiniz:
require ["fileinto", "envelope", "subaddress", "mailbox"];
# Fatura mailleri - muhasebe klasörü
if anyof (
header :contains "subject" "invoice",
header :contains "subject" "fatura",
header :contains "subject" "payment"
) {
fileinto :create "INBOX.Finance";
stop;
}
# Destek talepleri - ticket sistemi taşıması
if anyof (
address :is "to" "[email protected]",
address :is "to" "[email protected]",
header :contains "subject" "[Ticket]"
) {
fileinto :create "INBOX.Support";
stop;
}
# GitHub/GitLab bildirimleri
if anyof (
address :domain "from" "github.com",
address :domain "from" "gitlab.com",
header :contains "X-GitHub-Reason" ""
) {
fileinto :create "INBOX.DevOps.GitHub";
stop;
}
Gerçek Dünya Senaryosu 3: Otomatik Tatil Yanıtı
Kullanıcıların tatil mesajı ayarlayabilmesi için Vacation eklentisi kullanılır:
require ["vacation", "envelope"];
# Sadece dışarıdan gelen maillere yanıt ver
if not address :domain "from" "company.com" {
vacation
:days 1
:subject "Ofis Dışındayım / Out of Office"
:addresses ["[email protected]", "[email protected]"]
"Merhaba,
15-22 Ocak tarihleri arasında ofis dışındayım.
Acil durumlar için: [email protected]
---
Hello,
I am out of office between January 15-22.
For urgent matters: [email protected]
Regards,
Ali Yilmaz";
}
Dikkat: :days 1 parametresi aynı göndericiye kaç günde bir yanıt gönderileceğini belirtir. Bunu çok düşük tutmak döngülere yol açabilir.
ManageSieve ile Kullanıcı Yönetimi
Komut Satırından Sieve Yönetimi
sieve-test aracı, scripti gerçekten uygulamadan önce test etmenizi sağlar:
# Test maili oluştur ve scripti simüle et
cat > /tmp/test-mail.eml << 'EOF'
From: [email protected]
To: [email protected]
Subject: Test fatura
X-Spam-Flag: NO
Bu bir test mailidir.
EOF
# Scripti test et
sieve-test /home/user/.dovecot.sieve /tmp/test-mail.eml
Aktif Sieve scriptlerini listelemek ve yönetmek için doveadm aracını kullanın:
# Belirli kullanıcının aktif scriptini görüntüle
doveadm sieve get -u [email protected] active
# Tüm kullanıcının sieve scriptlerini listele
doveadm sieve list -u [email protected]
# Script yükle
doveadm sieve put -u [email protected] scriptname < /tmp/my-script.sieve
# Scripti aktifleştir
doveadm sieve activate -u [email protected] scriptname
# Script sil
doveadm sieve delete -u [email protected] scriptname
Roundcube ile ManageSieve Entegrasyonu
Roundcube webmail kullanıyorsanız managesieve eklentisini etkinleştirerek kullanıcıların tarayıcı üzerinden kural yönetmesini sağlayabilirsiniz. /etc/roundcube/config.inc.php dosyasına ekleyin:
$config['plugins'] = array('managesieve', 'archive', 'zipdownload');
$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'tls://localhost';
$config['managesieve_usetls'] = true;
Gelişmiş Sieve Eklentileri
Notify Eklentisi ile Anlık Bildirimler
Kritik maillerde anlık bildirim göndermek için:
require ["enotify", "variables"];
# "URGENT" veya "ACİL" içeren konu satırlı mailler için bildirim
if header :contains "subject" ["URGENT", "ACİL", "CRITICAL"] {
notify :importance "1"
:message "Kritik mail alındı!"
"mailto:[email protected]?subject=Kritik+Mail+Bildirimi";
fileinto "INBOX.Critical";
stop;
}
Variables Eklentisi ile Dinamik Filtreleme
require ["fileinto", "variables", "envelope", "subaddress", "mailbox"];
# Gönderen domain'ini yakala ve klasörlendir
if envelope :matches "from" "*@*" {
set "sender_domain" "${2}";
if string :is "${sender_domain}" ["github.com", "gitlab.com", "bitbucket.org"] {
fileinto :create "INBOX.Code-Reviews";
stop;
}
if string :is "${sender_domain}" ["jira.atlassian.net", "trello.com"] {
fileinto :create "INBOX.Project-Management";
stop;
}
}
Body Eklentisi ile İçerik Filtreleme
RFC 5173 ile gelen body eklentisi mail içeriğinde arama yapmanızı sağlar:
require ["body", "fileinto", "mailbox"];
# Mail gövdesinde belirli anahtar kelimeler varsa
if body :contains ["şifre sıfırlama", "password reset", "hesabınız askıya"] {
fileinto :create "INBOX.Security-Alerts";
stop;
}
Uyarı: Body filtreleme işlemci yoğun bir işlemdir. Yüksek trafikli sunucularda dikkatli kullanın.
Log Takibi ve Sorun Giderme
Sieve aktivitelerini takip etmek için Dovecot loglarını izleyin:
# Gerçek zamanlı Sieve loglarını izle
tail -f /var/log/mail.log | grep sieve
# Son Sieve hatalarını filtrele
grep -i "sieve" /var/log/mail.log | grep -i "error|warn" | tail -50
# Belirli kullanıcının Sieve aktivitesini izle
grep "sieve.*[email protected]" /var/log/mail.log | tail -20
Daha ayrıntılı loglama için debug modunu etkinleştirin:
# /etc/dovecot/conf.d/90-sieve.conf
plugin {
sieve_trace_dir = /tmp/sieve-trace
sieve_trace_level = matching
sieve_trace_debug = yes
}
Bu ayarları yalnızca sorun giderme sırasında aktif tutun, çünkü disk kullanımını ciddi ölçüde artırır.
Yaygın hataları ve çözümlerini inceleyelim:
- “Script compile error”:
sievecile sözdizimini kontrol edin, genellikle eksikrequirebildirimi veya yanlış tırnak işareti sorunudur. - “Mailbox does not exist”:
fileinto :createeklentisini require edin ya da klasörü önceden oluşturun. - “Sieve script not executing”: LDA/LMTP yapılandırmasında
mail_pluginssatırınasieveeklendiğinden emin olun. - “Permission denied”: Sieve dizin izinlerini kontrol edin, genellikle
vmail:vmail 700olmalıdır.
Dizin izinlerini toplu düzeltmek için:
# Tüm kullanıcıların sieve dizin izinlerini düzelt
find /home -name "sieve" -type d -exec chown -R vmail:vmail {} ;
find /home -name ".dovecot.sieve" -exec chown vmail:vmail {} ;
Güvenlik Önerileri
Sieve yapılandırmasında güvenliği ön planda tutmak gerekir:
- Redirect sınırı:
sieve_max_redirects = 4ile mail döngülerini önleyin. Bir kullanıcı tüm maillerini başka birine yönlendirirse ve o kişi de geri yönlendirirse sonsuz döngü oluşur. - Script boyutu:
sieve_max_script_sizeile çok büyük scriptleri engelleyin. Aşırı büyük scriptler parse süresini uzatır. - External domain redirect: Kurumsal ortamlarda external adrese redirect’i tamamen kısıtlamak isteyebilirsiniz. Bunu
sieve_beforeile global bir kural olarak uygulayabilirsiniz. - ManageSieve TLS: ManageSieve bağlantılarında mutlaka TLS kullanın, kimlik bilgileri düz metin olarak geçebilir.
TLS zorunluluğu için:
# /etc/dovecot/conf.d/20-managesieve.conf
protocol sieve {
# TLS olmadan bağlantıya izin verme
ssl = required
}
Sonuç
Dovecot ile Sieve entegrasyonu, mail yönetimini hem sistem yöneticisi hem de kullanıcı perspektifinden çok daha güçlü hale getirir. Sunucu taraflı filtreleme sayesinde spam yönetimi, departman bazlı yönlendirme ve tatil mesajları gibi onlarca senaryo artık istemciden bağımsız çalışır. sieve_before ve sieve_after mekanizmaları yöneticilere global kural tanımlama esnekliği sunarken, ManageSieve protokolü kullanıcılara kendi kurallarını yönetme özgürlüğü verir.
Kurulumu tamamladıktan sonra yapmanız gereken ilk adımlar şunlar olmalıdır: sievec ile scriptlerinizi doğrulayın, sieve-test ile gerçek mail örnekleri üzerinde test edin ve log takibini alışkanlık haline getirin. Sieve’in gücü basit sözdiziminin arkasında yatan esnekliktir; ihtiyacınız büyüdükçe eklenti ekleyerek sistemi kolayca genişletebilirsiniz.