Linux'ta Bogofilter ve YoSucker Kullanarak Yahoo Hesabımızdaki Mektupları Spam'sız Okumak
Ocak 2004
İlker Fıçıcılar
İstenmeyen Epostalar (spam) giderek artan bir sorun. Bu sorunu
gidermeye yönelik çözümler ise, spam yollayanların sürekli yeni
taktik ve yöntem değiştirmeleri sebebiyle ilgi istiyor.
Bu çözümlerden Bayesian Filtre kullananlar neyin spam
olup neyin olmadığını kendi kendilerine öğrendikleri için daha az
bakım isteyen ve daha başarılı bir yöntem olarak öne çıkıyor.
Linux'ta, C ile yazıldığı için işlemciye yük getirmeyen Bogofilter
adlı program bayesian filtreleme ile spam ayıklama için oldukça
ideal bir çözüm.
Web tabanlı yahoo eposta hizmeti kendi spam ayıklama
uygulamasına sahip olmasına karşın, anlaşmalı olduğu firmaların
reklamlarını filtrelemeden gönderiyor. Bunun yanında, kendi
uygulaması Türkçe spam'ları her zaman yakalayamayabiliyor. Bizim
burada amacımız ise, Yahoo'nun sayfasına web tarayıcı ile hiç
bağlanmadan, YoSucker adlı programla mektupları kendi
bilgisayarımıza çekip bogofilter ile filtreledikten sonra,
istediğimiz bir mektup okuyucu programla (sylpheed, evolution,
kmail, pine, elm, ... vs.) epostalarımızı temiz temiz okumak.
YoSucker programını şuradan edinebiliriz:
http://yosucker.sourceforge.net/
YoSucker'ı kurduktan sonra, kılavuzunda belirtildiği biçimde
Yahoo hesabımız için ayarlarımızı yapmalı, ve yahoo kimlik ve
parolamızı gerektiği gibi şifreleyerek mektup alma denemesi
yapmalıyız. Her şey yolundaysa mektuplar /var/spool/mail veya
muadili bir sistem eposta klasörüne gelmiş olmalıdır. Bir sonraki
adımda, YoSucker'ın ayar dosyasını pipe kullanacak şekilde
değiştireceğiz.
Bogofilter programını da şu adresten indirebiliyoruz:
http://bogofilter.sourceforge.net/
Bogofilter'ı sorunsuz kurduktan sonra, eğitmemiz gerekli. Bunu,
root kullanıcısı ile yapalım. Ayıklama veritabanı, kullanıcının
~/.bogofilter/ klasöründe tutulacağından, ve YoSucker'ı da
olasılıkla root haklarıyla crontab'dan çalıştırmak isteyeceğimizden
bu işimizi kolaylaştıran bir tercih.
Eğitim için bir miktar (100 civarı daha iyi olur), spam epostaya
gereksiniminiz var. Bu epostaları size gelenlerden seçmeniz daha
iyi olur, bu şekilde size gelen epostalara daha iyi uyum sağlanmış
olacak. Aynı miktarda da temiz epostayı da edindikten sonra,
bogofilter'ı -s ve -n parametreleri ile kullanarak
eğitiyoruz. Örneğin:
bogofilter -s < spamli_bir_eposta.txt
ya da:
cat /tmp/spamli_epostalar_klasörü/* | bogofilter -s
Bu -s parametresi ile spamli mektupların neye benzediğini öğrettik.
Benzer şekilde temiz epostaları da -n ile öğretelim:
bogofilter -n < temiz_bir_eposta.txt
ya da:
cat /tmp/temiz_epostalar_klasörü/* | bogofilter -n
Bundan sonra ise -t veya -T parametresiyle bir
epostanın spam olup olmadığını sorup öğrenebiliriz:
bogofilter -t < bu_spam_mi.txt
Sonuç olarak eğer spam değilse
N 0.056494
gibi bir sonuç getirecek. N spam olmadığını,
0.056494 sayısı ise spam olma olasılığını (0.0 ile 1.0
arasında) gösteriyor.
Komutun döndürdüğü ERRORLEVEL ise 1 ( yazıyla
bir ). Bogofilter bir spam tesbit programı olduğundan, spam
bulduğu zaman herşey yolunda anlamında 0 ERRORLEVEL ile
çıkarken, spam bulamadığında bunu başarısızlık addedip 1
hata koduyla çıkıyor. Bu noktayı script yazarken karıştırmamak, ve
unutmamak gerekli: Spam ise 0, değilse 1. Yani alıştığımızın
tersi.
Bogofilter, filtreden geçirdiği epostalara X-Bogosity
adlı bir başlık ekliyor. Ama biz kolaylık olması için, bununla
yetinmeyip spam'li mektupların Subject: başlıklarına da bir işaret
koyalım. Bunun için şöyle bir filtre scripti yazmamız yeterli:
#!/bin/bash
#
kullanici="ilker"
mektupkutusu="/var/mail/$kullanici"
ds=`date +%H%M%S`
ds="/tmp/mektup-$ds.tmp"
cat - |/usr/local/bin/bogofilter -p -d /root/.bogofilter/ > "$ds"
if [ $? -ne 0 ];then
cat "$ds"| sed "s/charset=us-ascii/charset=iso-8859-9/g" >> "$mektupkutusu"
else
cat "$ds"| sed "s/charset=us-ascii/charset=iso-8859-9/g;\
s/^Subject: /Subject: #### SPAM #### /g" >> "$mektupkutusu"
fi
rm "$ds" 2>/dev/null
Bu scriptte size özel yerleri değiştirmeyi unutmamalısınız
(kullanici="ilker" veya /root/.bogofilter/ gibi). Bu bash shell
scripti /usr/local/bin gibi uygun bir yere, filtrele gibi
bir adla kaydedebiliriz. Dosyayı çalıştırılabilir yapmayı da
unutmamalı:
chmod u=rwx,go=rx /usr/local/bin/filtrele
ya da:
chmod 755 /usr/local/bin/filtrele
Script kısaca mektubun spam olup olmadığına bakıyor ve spam ise
mektubun "Subject:" kısmını "Subject: #### SPAM #### " biçiminde
değiştiriyor. Böyle konu başlıklı bir epostayı da daha sonra
herhangi bir mektup okuma programıyla filtreleyip istediğimiz bir
posta kutusuna veya çöpe atmamız mümkün. Bu arada script, hazır eli
değmişken yahoo'dan gelen mektupların Türkçe sorununu da
gideriveriyor: (sed "s/charset=us-ascii/charset=iso-8859-9/g;).
Şimdi bu filtrele scriptini YoSucker ile ilişkilendirelim.
İlgili YoSucker conf dosyasında şu değişiklikleri yapıyoruz:
OUTFILE=/usr/local/bin/fitrele
PIPE=1
Evet, hepsi bu. Artık YoSucker'ın çektiği her eposta spam
ayıklamasına tabii tutulacak. Spam'li epostaların konu
başlıklarında ise "#### SPAM ####" yazıyor olacak.
Bogofilter, veritabanı yeterli değil ise mektupları yanlış
sınıflandırabilir. Bunun gibi durumlarda, yeni gelen epostalarla
bogofilterınızı biraz daha eğitmelisiniz. Ya da bir başka çözüm
olarak, bogofilter'ın her yeni mektupla kendisini kendi kendine
eğitmesini sağlayabilirsiniz. Bunun için filtrele scriptimizde,
bogofilter'a -u parametresini de eklememiz yeterli. Yalnız
bu özelliği kullanmazdan önce man bogofilter ile
bogofilter'ın kılavuzunu okumanızda, ve oradaki uyarılara dikkat
etmenizde yarar var.
Spam'siz günler dileğiyle...
Ocak 2004
İlker FIÇICILAR
Ek bilgi için:
http://www.spam.org.tr/bogofilter-tr.htm
http://www.spam.org.tr/
http://anti-spam.ku.edu.tr/
İlgili Benzer Yazılar:
Arama önerileri:
antispam,
nospam,
spam abuse,
istenmeyen eposta engelleme,
reklam engelleme,
Kaynak gösterecekler için referans:
"AntiSpam Amaçlı Bogofilter Kullanımı, ve Yahoo'dan POP3 Kullanmadan Email Çekme",
İlker Fıçıcılar,
http://www.KlavyeMonitor.com/yahoo_anti_spam_bogofilter_linux.html
|