批量添加Spamassassin规则

   如果要添加一大堆Spamassassin规则,一个一个写起来非常痛苦,在网上看到一个专门来处理Spamassassin自定义规则的脚本。
原文地址:http://bbs.nettf.net/forums/index.php?showtopic=51798

脚本文件
# cat add-spam-rules.sh

#!/bin/sh
#
# Add spam rule script
# compile by Liu Hongguang
# 2006/03/03
# Website: http://www.nettf.net
PAHT=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

BODYFILE=body_spam.list
SUBJECTFILE=subject_spam.list
RULEFILE=Custom_rules.cf
RULENUM=500
DEFAULTHIT=2

DATE=`date '+%Y/%m/%d %H:%M'`
echo "#" > $RULEFILE
echo "# Create date: $DATE " >> $RULEFILE
echo "#" >> $RULEFILE

cat $SUBJECTFILE | awk \
'{
if ($1=="") next; #如果内容为空则跳过
if ($2=="" || $2<=0) $2='$DEFAULTHIT'; #当分数为空的时候则设置分数为默认的DEFAULTHIT
if (i=="")
i='$RULENUM'; #定义起始规则号为RULENUM
else
i++; #规则号自动加1
print "";
print "header CN_SUBJECT_"i" Subject =~ /"$1"/";
print "describe CN_SUBJECT_"i" Subject contains \""$1"\"";
print "score CN_SUBJECT_"i" "$2;
}' >> $RULEFILE

LINE=`sed '/^$/d' $SUBJECTFILE | wc -l | tr -d "\ "` #得到$SUBJECTFILE文件的行书
RULENUM=`expr $RULENUM + $LINE` #定义起始规则号不从默认的500开始而从新的开始

cat $BODYFILE | awk \
'{
if ($1=="") next;
if ($2=="" || $2<=0) $2='$DEFAULTHIT';
if (i=="")
i='$RULENUM';
else
i++;
print "";
print "body CN_BODY_"i" /"$1"/";
print "describe CN_BODY_"i" Body contains \""$1"\"";
print "score CN_BODY_"i" "$2;
}' >> $RULEFILE

echo "Done!"
exit 0


标题文件
# cat subject_spam.list
特价机票        3
机票特价        3
代开发票        5.5

正文文件
# cat body_spam.list
加盟热线        5.5
财税咨询        5.5
所有票据        5.5

    文件中前面为内容,后面的数字是评分,当内容匹配,就添加后面的评分,内容和数字之间用<TAB>来隔开,执行add-spam-rules.sh就可以生成Custom_rules.cf,然后把这个文件复制到/usr/share/spamassass目录,重新加载Amavisd即可。 

分享到