E-posta & SMTP Sunucu

    SpamAssassin Kurulumu ve Kural Ayarları

    SpamAssassin kurulumu, skor eşikleri ve kendi kurallarını yazmanın pratik yolu.

    9 dk okuma Güncellendi: 25 Ağustos 2026

    SpamAssassin, yirmi yılı aşkın süredir posta sunucularının spam savunmasında duran, kural tabanlı ve istatistiksel filtreleri birleştiren bir puanlama motorudur. SpamAssassin kurulumu tek başına bir spam çözümü değildir; asıl iş, sunucuna gelen gerçek trafiğe göre skorları ayarlamak, kendi kurallarını yazmak ve Bayes sınıflandırıcısını düzenli eğitmektir. Varsayılan ayarlarla bıraktığında hem çok spam kaçırır hem de zaman zaman meşru mailleri işaretler.

    Bu rehberde SpamAssassin'i kuracak, Postfix'e bağlayacak, local.cf dosyasındaki kritik parametreleri tek tek açıklayacak, kendi kural setini yazacak ve Bayes filtresini eğiteceğiz. Ayrıca hangi kural setinin ne kadar yük getirdiğini, hangi skorun neye karşılık geldiğini ve yanlış pozitif geldiğinde nereden başlanacağını konuşacağız. Eğer sıfırdan yeni bir sunucu kuruyorsan sonda Rspamd ile karşılaştırmaya da yer verdim.

    Kurulum ve Servis Yapısı#

    SpamAssassin iki parça hâlinde çalışır: spamd arka plan servisi kuralları bellekte tutar, spamc ise maili bu servise gönderen hafif istemcidir. Her mail için Perl yorumlayıcısını yeniden başlatmamanın tek yolu budur.

    # Kurulum (Debian/Ubuntu)
    apt update
    apt install -y spamassassin spamc
    
    # Servisi etkinleştir
    systemctl enable --now spamassassin
    
    # Kural setlerini indir ve derle
    sa-update --no-gpg
    systemctl reload spamassassin
    
    # Sürüm ve kural durumu
    spamassassin --version
    sa-update --check-only ; echo "çıkış kodu: $?"
    

    sa-update komutunun çıkış kodu önemlidir: 0 yeni kural indirildiğini, 1 zaten güncel olduğunu, diğer değerler hata anlamına gelir. Bunu günlük bir cron işine bağla; kural setleri güncellenmezse filtre zamanla körelir.

    # /etc/cron.daily/sa-update-custom
    #!/bin/sh
    sa-update --no-gpg && systemctl reload spamassassin
    exit 0
    

    Yapılandırma dosyaları /etc/spamassassin/ altında durur. Sistem genelindeki ayarlar için local.cf, kendi kuralların için ayrı bir dosya (örneğin 99-firmaniz.cf) kullan. Dosyalar alfabetik sırayla okunur ve aynı ayar iki kez tanımlıysa sonuncusu kazanır.

    local.cf: Skorlar, Eşikler ve Başlıklar#

    local.cf dosyası SpamAssassin'in davranışını belirleyen merkezdir. Aşağıdaki blok, çoğu kurulum için makul bir başlangıç noktasıdır.

    # /etc/spamassassin/local.cf
    
    # Bu skorun üstündeki mailler spam sayılır
    required_score 5.0
    
    # Spam maili yeniden paketleme, sadece başlık ekle
    report_safe 0
    
    # Konu satırını değiştirme; Sieve/filtre başlığa baksın
    rewrite_header Subject ***SPAM***
    
    # Bayes sınıflandırıcısı
    use_bayes 1
    bayes_auto_learn 1
    bayes_auto_learn_threshold_nonspam 0.1
    bayes_auto_learn_threshold_spam 12.0
    
    # Ağ testleri (RBL, DNS sorguları) — kapatırsan doğruluk ciddi düşer
    skip_rbl_checks 0
    dns_available yes
    
    # Kendi alan adlarını "güvenilir" olarak tanıt
    trusted_networks 127.0.0.1 185.12.34.56
    internal_networks 127.0.0.1
    

    report_safe değeri çoğu kişinin gözden kaçırdığı bir ayardır. Varsayılan 1, spam olarak işaretlenen maili yeni bir mailin eki hâline getirir; kullanıcı orijinali görmek için eki açmak zorunda kalır ve bu berbat bir deneyimdir. 0 yaparsan mail olduğu gibi kalır, sadece başlıklara puan bilgisi eklenir.

    required_score değerini düşürme konusunda dikkatli ol. Aşağıdaki tablo, skor eşiğinin pratikte ne anlama geldiğini özetliyor:

    EşikYakalama oranıYanlış pozitif riskiUygun senaryo
    3.0Çok yüksekYüksekYalnızca karantina, silme yok
    5.0YüksekDüşükVarsayılan, çoğu kurulum
    6.5OrtaÇok düşükKritik iş yazışması yoğun kutular
    8.0+Düşükİhmal edilebilirYalnızca en kaba spam yakalanır

    Eşiği tek bir sayı olarak düşünme; kullanıcı bazında da ayarlanabilir. Bir yöneticinin kutusu için 6.5, genel bilgi adresi için 4.0 kullanmak tamamen makul bir yaklaşımdır.

    Postfix ile Entegrasyon#

    SpamAssassin'i Postfix'e bağlamanın en yaygın yolu, mailleri bir içerik filtresi (content filter) üzerinden geçirmektir. Bunun için master.cf içinde bir servis tanımlanır.

    # /etc/postfix/master.cf
    smtp      inet  n  -  y  -  -  smtpd
      -o content_filter=spamassassin
    
    spamassassin unix - n n - - pipe
      user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
    

    Bu yöntemin bir dezavantajı var ve bilmen gerekir: mail önce kabul edilir, sonra taranır. Yani spam çıkarsa reddedemezsin, ya sessizce silersin ya da kullanıcıya işaretli teslim edersin. Reddetme isteyen kurulumlar spamass-milter paketini tercih eder:

    # Milter yaklaşımı — maili kabul etmeden reddedebilir
    # /etc/postfix/main.cf
    smtpd_milters = unix:/spamass/spamass.sock
    milter_default_action = accept
    

    milter_default_action = accept satırını mutlaka koy. SpamAssassin servisi durursa Postfix mail almaya devam etsin; filtre arızası yüzünden tüm mail trafiğini durdurmak, tarama yapmamaktan çok daha pahalıdır. Postfix tarafındaki diğer parametreleri ve kısıtlama zincirini Postfix main.cf yapılandırması yazısında bulabilirsin.

    Entegrasyonun çalıştığını doğrulamak için standart GTUBE test dizesini kullan:

    # Bu dizeyi içeren mail her zaman yüksek skor almalı
    echo "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X" \
      | spamc -R | head -n 5
    

    Kendi Kurallarını Yazmak#

    SpamAssassin'in gerçek gücü, kendi trafiğine özgü kurallar yazabilmendir. Bir kural üç satırdan oluşur: eşleşme (header, body, full ya da uri), skor ve açıklama.

    # /etc/spamassassin/99-firmaniz.cf
    
    # Konu satırında Türkçe kredi spam'i kalıbı
    header  LOCAL_KREDI_SPAM  Subject =~ /kredi\s*(basvuru|onay|firsat)/i
    score   LOCAL_KREDI_SPAM  3.5
    describe LOCAL_KREDI_SPAM Konu satırında tipik kredi spam kalıbı
    
    # Gövdede kısaltılmış bağlantı + aciliyet kalıbı birlikte
    body    LOCAL_ACIL_LINK   /son\s*24\s*saat/i
    score   LOCAL_ACIL_LINK   1.5
    describe LOCAL_ACIL_LINK  Aciliyet baskısı içeren gövde ifadesi
    
    # Kendi alan adımızdan geldiğini iddia eden ama dışarıdan gelen mail
    header  LOCAL_SAHTE_ICERIDEN  From =~ /\@firmaniz\.com/i
    meta    LOCAL_SPOOF  (LOCAL_SAHTE_ICERIDEN && !ALL_TRUSTED)
    score   LOCAL_SPOOF  4.0
    describe LOCAL_SPOOF Dışarıdan gelen ama iç alan adı iddia eden mail
    

    meta kuralları, birden fazla sinyalin birlikte görüldüğü durumu puanlamanı sağlar ve yanlış pozitifi ciddi biçimde azaltır. Tek başına "kendi alan adımdan geliyor" bir sinyal değildir; "kendi alan adımdan geliyor ama güvenilir ağdan gelmiyor" ise güçlü bir sahtecilik göstergesidir. Aynı sorunu DNS katmanında çözmek istersen e-posta spoofing önleme yazısındaki SPF ve DMARC yaklaşımı daha kalıcı bir savunma sunar.

    Kural yazdıktan sonra mutlaka söz dizimini denetle ve tek bir mail üzerinde dene:

    # Söz dizimi kontrolü (hata varsa satır numarasıyla bildirir)
    spamassassin --lint
    
    # Bir maili tara ve hangi kuralların tetiklendiğini gör
    spamassassin -t < /tmp/ornek-mail.eml | grep -A 20 "Content analysis details"
    

    --lint çıktısı boşsa kuralların temizdir. Bir satırda hata varsa SpamAssassin o dosyadaki tüm kuralları yok sayabilir, bu yüzden bu adımı asla atlama.

    Bayes Eğitimi ve Beyaz Liste Yönetimi#

    Bayes sınıflandırıcısı, senin gerçek trafiğinden öğrenir ve zamanla en değerli tekil sinyal hâline gelir. Otomatik öğrenme (bayes_auto_learn) açık olsa bile elle eğitim yapmak sonucu belirgin biçimde iyileştirir.

    # Junk klasöründeki mailleri spam olarak öğret
    sa-learn --spam --progress /var/mail/vhosts/firmaniz.com/ali/Maildir/.Junk/cur/
    
    # Gelen Kutusu'ndaki temiz mailleri ham olarak öğret
    sa-learn --ham --progress /var/mail/vhosts/firmaniz.com/ali/Maildir/cur/
    
    # Öğrenilen örnek sayısını gör
    sa-learn --dump magic | grep -E "nspam|nham"
    # 0.000  0  1240  0  non-token data: nspam
    # 0.000  0  1876  0  non-token data: nham
    
    # Yanlış öğretilen bir maili geri al
    sa-learn --forget < /tmp/yanlis-ogretilen.eml
    

    İki sınıfın örnek sayısını dengede tutmaya çalış; 10:1 gibi bir orana çıkarsan sınıflandırıcı baskın sınıfa doğru kayar. Bayes veritabanının sağlığını periyodik olarak kontrol etmek de faydalıdır: sa-learn --force-expire eski jetonları temizler ve veritabanının şişmesini engeller.

    Beyaz ve kara liste yönetimi ise local.cf içinden yapılır:

    # Her zaman güven (dikkatli kullan — spoofing'e açıktır)
    whitelist_from_rcvd  *@musteri.com  mail.musteri.com
    
    # Basit beyaz liste (yalnızca From başlığına bakar, kolay taklit edilir)
    whitelist_from  [email protected]
    
    # Her zaman spam say
    blacklist_from  *@bilinen-spam-alani.example
    

    whitelist_from yerine mümkün olduğunca whitelist_from_rcvd kullan; ikincisi hem gönderen adresini hem de mailin gerçekten hangi sunucudan geldiğini kontrol eder. Sadece From başlığına bakan bir beyaz liste, saldırganın taklit etmesi için birebir davetiye niteliğindedir.

    Sık Yapılan Hatalar ve Performans Tuzakları#

    1. sa-update çalıştırmamak. Kural setleri güncellenmezse SpamAssassin bir yıl sonra bugünün spam kalıplarını tanımaz. Günlük cron kur.
    2. spamd yerine doğrudan spamassassin çağırmak. Her mail için Perl yorumlayıcısı ve tüm kural seti yeniden yüklenir; yoğun bir sunucuda CPU tavan yapar. Her zaman spamc üzerinden konuş.
    3. --lint atlamak. Tek bir hatalı kural satırı, o dosyadaki tüm kuralları devre dışı bırakabilir ve hiçbir hata mesajı görmezsin.
    4. report_safe 1 bırakmak. Kullanıcılar spam maili ek olarak alır, orijinali okumak için eki açmak zorunda kalır.
    5. trusted_networks tanımlamamak. SpamAssassin, kendi sunucunun ilettiği maili dışarıdan gelmiş gibi değerlendirir ve Received başlığı zincirini yanlış yorumlar.
    6. Ağ testlerini kapatmak. skip_rbl_checks 1 yazmak CPU tasarrufu sağlar ama doğruluk oranını ciddi biçimde düşürür; RBL kontrolleri en ucuz ve en etkili sinyallerdendir.

    Performans tarafında bilmen gereken tek şey şu: SpamAssassin, Rspamd'a kıyasla belirgin biçimde daha fazla CPU ve RAM tüketir çünkü kuralları sırayla ve Perl içinde çalıştırır. Günde birkaç bin mailin üzerine çıkan bir sunucuda bu fark hissedilir hâle gelir; o noktada Rspamd kurulumu yazısındaki alternatifi değerlendirmek mantıklıdır. Paylaşımlı hosting kullanıyor ve sunucu düzeyinde ayara erişemiyorsan, cPanel e-posta filtreleri ile kullanıcı bazında benzer kurallar tanımlayabilirsin.

    Sıkça Sorulan Sorular#

    SpamAssassin ücretsiz mi#

    Evet, SpamAssassin Apache Software Foundation çatısı altında geliştirilen açık kaynaklı bir projedir ve Apache Lisansı ile ücretsiz dağıtılır. Kurulum, kullanım ve kural setlerinin güncellenmesi için herhangi bir ücret ödemezsin. Bazı üçüncü parti kural setleri ya da ticari kara liste servisleri ayrı abonelik isteyebilir, ancak temel çekirdek ve resmi kural kanalları tamamen ücretsizdir.

    required_score değerini kaça ayarlamalıyım#

    Varsayılan 5.0 değeri çoğu kurulum için dengeli bir noktadır ve iyi bir başlangıçtır. Kritik iş yazışması alan kutularda yanlış pozitif riskini azaltmak için 6.0-6.5 aralığına çıkabilirsin. Eşiği 4.0'ın altına indirmeyi ancak spam'i silmek yerine karantinaya alıyorsan düşün; aksi hâlde meşru bültenlerin ve otomatik bildirimlerin kaybolma ihtimali ciddi biçimde artar. Değiştirmeden önce en az iki hafta skor dağılımını izle.

    Meşru mailler spam'e düşüyor, nereden başlamalıyım#

    Sorunlu mailin ham hâlini alıp spamassassin -t < mail.eml komutundan geçir; çıktının "Content analysis details" bölümü hangi kuralın kaç puan verdiğini satır satır gösterir. Sebep genellikle gönderenin SPF veya DKIM kaydının eksik olması, IP'sinin bir kara listede bulunması ya da Bayes filtresinin yeterince ham örnek görmemesidir. Tek bir kural sürekli sorun çıkarıyorsa o kuralın skorunu local.cf içinde düşürebilirsin.

    Bayes veritabanını sıfırlayabilir miyim#

    Evet, sa-learn --clear komutu tüm öğrenilmiş verileri siler ve sınıflandırıcıyı sıfırdan başlatır. Bunu yalnızca veritabanı ciddi biçimde bozulduğunda ya da yanlış eğitim yüzünden filtre tutarsız davrandığında yap; sonrasında yeniden eğitim için birkaç yüz örnek gerekir. Tek bir maili yanlış öğrettiysen tüm veritabanını silmene gerek yok, sa-learn --forget ile sadece o maili geri alabilirsin.

    SpamAssassin yerine ne kullanmalıyım#

    Yeni bir kurulum yapıyor ve yüksek hacim bekliyorsan Rspamd güçlü bir alternatiftir; kuralları paralel çalıştırdığı için aynı donanımda çok daha fazla mail işler ve maili kabul etmeden reddedebilir. Bulut tabanlı bir çözüm istiyorsan gelen mailleri filtreleyen harici geçit servisleri de vardır. Ancak var olan SpamAssassin kurulumun sorunsuz çalışıyor ve hacmin donanımını zorlamıyorsa taşınmak için teknik bir zorunluluk yoktur.

    Kural yazdım ama çalışmıyor, nasıl kontrol ederim#

    İlk adım her zaman spamassassin --lint çalıştırmaktır; söz dizimi hatası varsa satır numarasıyla bildirir ve o dosyadaki diğer kurallar da devre dışı kalmış olabilir. Lint temizse kuralı test maili üzerinde spamassassin -t ile dene ve tetiklenen semboller arasında adını ara. Servisi yeniden yüklemeyi unutma; spamd kuralları bellekte tuttuğu için systemctl reload spamassassin çalıştırmadan yeni kuralın etkili olmaz.

    Kapanış#

    SpamAssassin'i işe yarar hâle getiren şey kurulum değil bakımdır. Aklında tutman gereken dört alışkanlık şunlar: sa-update için günlük bir cron kurmak, her kural değişikliğinden sonra spamassassin --lint çalıştırmak, Bayes filtresini iki sınıftan dengeli örneklerle beslemek ve trusted_networks değerini kendi sunucularınla doğru tanımlamak. Yanlış pozitif geldiğinde tahmin yürütmek yerine maili spamassassin -t ile taramayı refleks hâline getirirsen, çoğu şikâyeti birkaç dakikada kapatırsın.

    Bu yığını kendin kurup yönetmek istiyorsan VDS ve sanal sunucu paketlerimizde tam root erişimiyle çalışabilirsin. Filtre ve MTA kurulumuyla uğraşmadan gönderim yapmak istersen SMTP sunucu paketlerimiz spam filtresi kurulu teslim edilir; sunucu bakımını devretmek istersen sunucu yönetimi hizmetimiz kural güncellemelerini de üstlenir. Yalnızca posta kutusu ihtiyacın varsa kurumsal e-posta çözümümüzde filtreleme zaten hazır gelir.

    SpamAssassinSpam FiltresiPostfix

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.