Pythontr

husonet | Tarih: 08.09.2014

SpamAssassin konfigürasyonu

Mail sunucu için spam filtre konfügürasyonu

Bütün kurulumlarınızı yaptıktan sonra spam filtre özelliğimizi kullanabiliriz.

#spamc paketini kuralım.
aptitude install spamc

Öncelikle işlemlerimizi yaptıracağımız kullanıcı ve grubumuzu oluşturalım.

# groupadd spamd
# useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd
# mkdir /var/log/spamassassin
# chown spamd:spamd /var/log/spamassassin


Sonrasında postfix için master.cf konfigürasyonumuzu yapalım

smtp      inet  n       -       n       -       -       smtpd -o content_filter=spamfilter
587 inet n - n - - smtpd -o content_filter=spamfilter

# spammasssin
spamfilter unix - n n - - pipe
flags=Rq user=spamd argv=/usr/bin/spamfilter.sh -oi -f ${sender} ${recipient}



Filter bash scriptimizi yazalım.
Basit
vim /usr/bin/spamfilter.sh
#!/bin/bash
#
# spamfilter.sh
#
# Simple filter to plug SpamAssassin into the Postfix MTA
#
# Modified by Jeremy Morton
#
# This script should probably live at /usr/bin/spamfilter.sh
# ... and have 'chown root:root' and 'chmod 755' applied to it.
#
# For use with:
# Postfix 20010228 or later
# SpamAssassin 2.42 or later

# Note: Modify the file locations to suit your particular
# server and installation of SpamAssassin.
# File locations:
# (CHANGE AS REQUIRED TO SUIT YOUR SERVER)
SENDMAIL=/usr/sbin/sendmail
SPAMASSASSIN=/usr/bin/spamc

logger <<<"Spam filter piping to SpamAssassin, then to: $SENDMAIL $@"
${SPAMASSASSIN} | ${SENDMAIL} "$@"

exit $?


chown spamd:spamd /usr/bin/spamfilter.sh
chmod 755 /usr/bin/spamfilter.sh

SpamAssassin Konfigürasyonu. 3.x versiyonunu kullandığım için baz olarak 3.x alınmıştır.
vim /etc/spamassassin/local.cf
# Spam olarak belirlenen mailin konu kısmına SPAM yazdırılır versiyon 3.0 dan itibaren SCORE etiketide eklenmiştir.
rewrite_header Subject *****SPAM***** (_SCORE_)

# İleti spam olarak etiketlenmiş ise, orjinal iletinin kullanıcıya eklenti olarak gönderilir. Bu tanım ile kullanıcının iletiyi doğrudan görmesini engellenir.
report_safe 1

# Her ileti için tekrar eden mail sayısına göre puanlama yapılır bu belirtilen puan ile spam olarak yakalama işlemi yapılır. Bu sayıyı arttırmamaya dikkat etmek lazım spam yakalama zorlaşabilir.
required_score 3.0

# içeriye dayalı spam tespit etmeyi aktifleştirir. Thomas Bayesian adlı matamatikçi tarafından geliştirilen bir yöntemdir, spam olan bir ileti içerisindeki karakterler ve işaretler bir başka mail içerisinde de geçiyorsa muhtemelen o ileti de spamdır, mantığına göre çalışır. Bu yöntem daha önce gelen iletileri esas alarak, olasılık hesaplarıyla, bir sonraki iletinin spam olup olmadığını tahmin ederek işler.
use_bayes 1
bayes_auto_learn 1


skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0


Spam olan mailleri kullanıcıların spam klasörüne taşıyan betiğimizi yazalım.
vim /root/scripts/spammove.sh

#!/bin/sh

SPAMFILE=$(find /var/spool/postfix/virtual/ -regextype posix-extended -regex '.*/[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+/cur.*' -name '*' -type f -exec grep -l 'X-Spam-Flag: YES' {} \;)

for file_name in $SPAMFILE
do

directory=$(echo $file_name | sed 's/cur.*/\.Junk/g')
directory_root=$(echo $file_name | sed 's/cur.*//g')
if ! [ -d "$directory" ]; then
maildirmake $directory
chown spamd:spamd $directory
chmod 777 -Rf $directory
echo INBOX.Junk >> $directory_root/courierimapsubscribed
fi

echo $file_name >> $directory/courierimapuiddb
#echo "$file_name"
target=$(echo $file_name | sed 's/cur/\.Junk\/cur/g')
#echo "$target"
mv $file_name $target
done


Bunuda istediğimiz bir zaman diliminde çalışacak bir cron a ekleyebiliriz. Ben her 3 dakika da bir çalışsın istedim.
*/3 * * * * sh /root/scripts/spammove.sh


Kaynaklar: http://belgeler.org/howto/antispam-spamassasin.html