Öyle bir seyir defteri…

Qmail+Qsheff ile Bogofilter kullanmak

08 Ağustos 2006 Salı, 13:22 | Gezegen

Sunucuda tüm kullanıcılara aynen uygulanacak genel bir spam filtresi ezelden beridir hoşuma gitmeyen bir fikir olmuştur. Ana soru : “Kime göre spam, neye göre spam?”. Spam “istenmeyen e-posta” tanımıyla baştan durumun ne kadar kişisel olduğunu ortaya koyuyor. Bir kullanıcı için spam olan bir e-posta, bir başkasının okumak istediği bir e-posta olabilir çünkü. “Eğitilebilir” spam filtreleri de bunun için var zaten, her kullanıcı kendi spam alışkanlıklarını kullandığı programa öğretsin diye. Tabii seçim her zaman size kalmıyor, kendinizi kollarınızı sıvamış buluyorsunuz :).

Bogofilter, C ile yazılmış, hızlı çalışan, sevdiğimiz bir arkadaşımız. Kendisini Qmail e-posta servisine monte etmeye giriştim. Anti-virüs tetiklemek ve e-posta eklerini/başlıklarını kontrol etmek için qsheff kullandığımızdan, ilk hedefim onun içinden direk çağırmak oldu. Son sürümü qsheff-II 2.1-r1’de bunu başaramadım; standart bir kabukla güzel güzel çalışan Bogofilter, qsheff içinden çağrıldığında hata kodu döndürüp durdu. Sonunda pes edip, Bogofilter’ı qsheff’ten önce çalıştırıp spam’leri işaretletme, qsheff’e de işaretlenmiş spam’leri sildirme yöntemine yöneldim. Çok “cici” bir senaryo değil. Qsheff virüs, beyaz liste, e-posta eklenti ve başlık kontrolünden geçirdikten sonra sadece kalan mesajlar spam filtresine girse çok daha verimli olur aslında.

Bogofilter paketinde, kurulum sonrası /etc dizini altına yerleşen bogofilter.cf-example isimli bir örnek dosyası bulunuyor. Onu örnek alarak bir bogofilter.cf dosyası oluşturuyoruz. Ayar dosyasının içinde öntanımlı ayarları görüyorsunuz zaten, özel olarak değiştirmek istedikleriniz varsa belirtebilirsiniz. spam_subject_tag satırı önemli bizim için, onun önündeki ## işaretini kaldırıp aktif hale getirmeniz gerekiyor. O satır, Bogofilter’ın spam bellediği e-postaların konu satırının başına ***SPAM*** ifadesini eklemesini sağlıyor. Öntanımlı gelen /var/spool/bogofilter dizininin sistemde var olduğuna ve tüm kullanıcılar tarafından okunabildiğine emin olun.

Bir sonraki adım, Bogofilter’ı sisteminize gelen e-postalardan özel olarak seçti(rdi)ğiniz bol bol spam ve spam olmayan e-posta ile beslemek. Hemen internete spam avına çıkmayın, önemli olan -sizin- sisteminize gelen spamlerden (ve spam olmayanlardan) oluşması. Mbox formatında topladığınız spam e-postaları,

# bogofilter -s < spam.mbox

Spam olmayan, kendinize ulaşmasını hasretle beklediğiniz e-postaları da,

# bogofilter -n < spamolmayan.mbox

komutu ile Bogofilter'a öğretebilirsiniz. 30-40 bin civarı spam, bir o kadar da (belki daha fazla) spam olmayan e-posta Bogofilter'ı eğitmek için genellikle yeterli oluyor. Eğer elinizde yeterince e-posta yoksa, aynı e-postaları tekrar tekrar Bogofilter'a öğretmeyi deneyebilirsiniz. Tamamen farklı birçok spam ile eğitmekten daha az verim alırsınız ama az sayıda e-posta ile bir kere eğitmekten daha iyi sonuç verecektir.

Artık Bogofilter'ı devreye almaya hazırız. Öncelikle mesaj alıp/vermekle görevli qmail servislerini durdurmamız gerekiyor.

# svc -d /service/qmail-smtpd
# svc -d /service/qmail-send

Standart bir qmail kurulumunda, qmail programları /var/qmail/bin altında yer alıyor. qmail-queue dosyası da qmail-qsheff dosyasına linklenmiş durumda. Yani qmail-queue çağrıldığında otomatik olarak qsheff çalışıyor ve o qmail'in kuyruk programını daha sonra kendisi çağırıyor. Biz devreye girmek için önce bu linki kaldırıyoruz.

# unlink /var/qmail/bin/qmail-queue

Ardından bogofilter'ı çağırdıktan sonra qsheff'i çalıştıracak bir bash betiğinden oluşan aşağıdaki içeriğe sahip qmail-queue dosyasını (herhangi bir editörle) hazırlıyoruz. -p parametresi, Bogofilter'a işlediği mesaj için sadece "bu spam (değil)" şeklinde sonuç bildiren bir hata kodu döndürmesi yerine, mesajın tamamını çıktı olarak vermesini söylüyor. -e parametresi de, mesajın spam olup olmadığına dair bir hata kodu döndürmesine gerek olmadığını belirtiyor. qsheff içinden çağırmadığımızdan, döndürülecek bir hata koduna göre işlem yapacak bir yazılımımız yok. Spam olan e-postaları, konu satırına ***SPAM*** yazarak işaretliyor.

#!/bin/sh
/usr/local/bin/bogofilter -e -p | /var/qmail/bin/qmail-qsheff

Yeni yarattığımız dosyanın haklarını da ayarlayalım :

# chmod 755 /var/qmail/bin/qmail-queue
# chown root:qmail /var/qmail/bin/qmail-queue

E-posta alışverişini tekrar başlatmaya hazırız :

# svc -u /service/qmail-smtpd
# svc -u /service/qmail-send

Bir süre işaretlenen (ve işaretlenmeyen) e-postaları gözlemeli; hatalı işaretlenenleri toplayıp Bogofilter'ı "bunlar spam değil" diyerek (bogofilter -n < spamdegil.mbox), spam olup aradan kaçırdıklarını da "bunlar da spam aslında" diye eğitmelisiniz (bogofilter -s < spam.mbox). Bogofilter'ın spam olarak işaretlediği e-postaları qsheff'in silmesini istiyorsanız, qsheff'e "konu satırında ***SPAM*** geçenleri sil" demeniz yeterli olacaktır. /usr/local/etc/qsheff-II/ dizini altındaki qsheff.conf ayar dosyasında enable_header_filter değerinin 1 olduğuna emin olun. Aynı yerdeki qsheff.rules dosyasına aşağıdaki satırı ekleyin :

h:(\*\*\*SPAM\*\*\*)

\ kaçış karakterini unutmayın, yoksa qsheff * karakterini wildcard olarak algılayıp birçok e-postaya haksız yere spam muamelesi gösterecektir :). Silme işleminden muaf tutmak istediğiniz e-posta gönderenleri, qsheff.ignore dosyasında belirtebilirsiniz.

Umarım bir sonraki adımda Bogofilter'ı qsheff içinden çağırabileceğim, o zaman tadından yenmeyecek.

Bir Yorum Yazın

You are logged in as . To logout, click here.