注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

邮件过滤工具Procmail  

2014-08-29 09:34:25|  分类: 邮件系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        fetchmail是对邮件系统的一个全面加密方案.
        procmail是效率极高的邮件过滤系统,来源于德国程序员的贡献.

        Procmail用于过滤电子邮件。它可以预整理或者预处理您的大量的来信。您可以用它从邮件列表中挑选中想要的邮件、剔除垃圾邮件、自动回复等等。

       Procmail一般用来和fetchmail、mutt、sendmail搭配使用。Procmail只是个工具,对于它,我们只要大致的明白的它的配置规则即可。

      下面就配置文件,并加以说明。

       我的Procmail配置文件:.procmailrc

#################################
#
# charry[at]charry.org
#
#################################

LOGFILE=$HOME/.pmlog
UMASK=000

# 变量定义,这里只是一部分,其他的请参考mannual
NULL=/dev/null
SPAM=/tmp/spam
JUNK=$HOME/Mail/junk
FOO=$HOME/Mail/foo

##### General filter ######

# 标题中带有Ultimate的邮件,保存到$SPAM中
:0b
* ^Subject:.*Ultimate.*
$SPAM

# 标题中带有xxx movie的邮件保存到$SPAM中
# 这里我为什么没有写Subject,因为缺省查找的就是邮件头
# 以下同
:0b
* .*xxx movie.*
$SPAM

# 把标题中带有xxx girl的邮件,拷贝到$FOO中,并且删除(即放到$NULL中)
# 之所以这样做,是因为这样备份的邮件才能被mutt打开,注意,下面的规
# 则只针对”标题”中带有xxx girl的邮件
:0
* .*xxx girl.*
{
:0 c
$FOO

:0
$NULL
}

# 如果标题中包含sex,则保存到$JUNK中
:0b
* ^Subject:.*sex.*
$JUNK

# 如果正文中包含”合肥山舟”,则保存到$JUNK中
:0Bb
* .*合肥山舟.*
$SPAM

# 如果标题中包含software,则保存到$JUNK中
:0b
* ^Subject:.*software.*
$JUNK

# 如果标题中包含foo.com,则保存到$JUNK中
# 经过测试foo.com和foo\.com都可以过滤
# 因为.即表示任意字符,而\.只是表示一个点,前者的范围其实更大
:0b
* ^Subject:.*foo\.com.*
$JUNK

# 正文中带有如下字样的,保存到$SPAM中
:0Bb
* ^Enlarge your penis up.*
$SPAM

# 正文中带有http://reg.sms.ac字样的,保存到$SPAM中
:0Bb
* .*http:\/\/reg\.sms\.ac.*
$SPAM

# 正文中带有http://www.23idc.com字样的,保存到$SPAM中
:0Bb
* .*http:\/\/www\.23idc\.com.*
$SPAM

# 标题中含有Nude Pictures的
:0b
* ^Subject:.*Nude Pictures.*
$SPAM

# 正文中包含Nude Pictures的
:0Bb
* .*Nude Pictures.*
$SPAM

# 正文中包含increase your size的
:0Bb
* .*increase your size.*
$SPAM

# 正文中包括”赚钱”的保存到$JUNK中
:0B:
* .*赚钱.*
$JUNK

# 如果邮件的正文中包含”Visit our site:”则保存到$JUNK中
:0B:
* .*our site:.*
$JUNK

# 如果邮件的正文中包含”Visit our website:”则保存到$JUNK中
:0B:
* .*our website:.*
$JUNK

# 拒收hotmail的邮件
#:0
#* $ ^From:.*\@hotmail\.com
#$NULL

# 拒收 yahoo.com 但收取 yahoo.com.tw
#:0
#* $ ^From:.*\@yahoo\.com
#* $ !^From:.*\@yahoo\.com\.tw
#$NULL

# 把Cron Daemon的错误挡掉
:0
* ^From:.*Cron Daemon.*
$NULL

# 记录所有邮件地址
:0 c:
| formail -zxFrom: -zxTo: -zxCc: >>tmp/capture

概要
看了上面的例子,估计你已经大概的了解了Procmail的配置方法了,下面我少许的说明一下。标准的格式如下:

:0 [参数] [: [锁定文件]
零或者多个条件(每个一行)
动作

下面是个例子

:0:
* ^(From|Cc|To).*sohu
sohu

第 二行是它的条件行,它以星号开头,后面是一个正则表达式(regular expression)。在本例中,它表示所有以From或者Cc或者To打头的,并且后面跟着一些字符,然后再跟着’sohu’的字样。如果某个邮件的 一部分匹配了这样的条件,则执行下面的动作。在这里表示把它放到一个名为’sohu’的文件中。

正则表达式
正则表达式区分大小写,比如Charry和charry不同。
点’.'匹配任何任何字符,除了新行符(newline)。比如:.harry匹配charry, xharry, pharry等等。
字符后面跟一个星号(*),表示它将出现0或者多次。比如char*y匹配chay,chary,charry,charrrrrrrrrrrrrrrry。可以想象:.*将匹配任何长度的字符串。
字符后面跟一个加号(+),表示它将出现1或者多次。字符后面跟一个问号(?)表示它将出现0或者1次。你可以用括号把字符括起来作为一个整体,比如:B(ob)+表示:Bot, Bobobob等等。
Part [abcd]匹配:Part a, Part b, Part c, Part d
[^aeiou]+匹配所有非元音单词。这里的^表示‘非’
Bob|Joe表示Bob或者Joe
^表示匹配开头,$表示匹配结尾。注意这里^和上面的那个^意义不同。
更多信息请参考专门的正则表达式(regular expression)文档
规则(意译)
我们来看个例子:

# israeline是个邮件列表的名字
:0: # 最后一个冒号表示锁定文件
* ^To:.*israeline
israel # 把所有的邮件放入’israel’文件中

有一件事情必须知道,不要在匹配条件行中加注释,否则这些注释也会被当成匹配条件

下 面我们看一下什么是‘锁文件’(lockfile)。假设几乎在同时,有两份israeline的邮件发来。有很大的可能性,系统会启动两个 Procmail,而它们都会尝试着去写‘israel’文件。不用我说,你也会知道后果如何,为了避免错误,我们可以用lockfile。这样,第一个 Procmail会锁定israel,这样只有它才能有写的权限。其他的Procmail只能等待第一个完成它的操作。

假设你的大学同 学Bob喜欢给你发一些网上找的有趣的东西,这些信件通常以“joke”,“funny”作主题。而你却不想把这些邮件和你的工作相关的信件混在一起,你 希望把这些信件转发到一个不同的邮箱中,同时你不想把Bob发来的工作相关的信件也被转发。你可以用下面的规则,它用了两个匹配条件。

:0 # 转发邮件到nishizhu@gmail.com
* ^From.*bob
* ^Subject:.*(joke|funny)
! nishizhu@gmail.com

在动作行的开头加一个“!”表示转发邮件。你可能注意到这里没有在From后面加一个冒号(:),因为有的邮件头中,From后面没有冒号(:),所以为了安全起见,你最好不加那个冒号(:)。既然这里是转发邮件,所以我们就不需要锁定文件了。

我在测试中发现,对于标题中带有中文的,类似的匹配并不起作用,不知道是我的写法有误还是Procmail的bug。对于邮件正文的匹配正常,可以处理中文。
下面我们来看一个复杂的例子:

:0: # 转发
* ^From.*bob
* ^Subject:.*(joke|funny)
{
:0 c
! nishizhu@gmail.com

:0
| lpr -Pacsps
}

在动作行,我们用了一个嵌套的块。它可以被看作另一个.procmailrc文件,在这个块中,我们又可定义任意个匹配条件,不过,必须要求其父条件也成立。

第一个条件表示转发邮件,这里用到了一个参数‘c’,它其实是copy的缩写。因为一份邮件通常会被送到第一个匹配条件的目的地,所以这里用‘c’允许我们为一份邮件加上两个匹配条件。

我们把邮件送到一个程序中,得用管道号(|),它的意思是说,把邮件作为下面的这个程序的输入。这里我们把匹配的邮件用打印机acsps打印出来。

我们再来看一个例子

:0 bc: # 打包压缩
* ^To:.*junk
| gzip >> junk-archive.gz

假 如我们有个邮件列表或者邮件用来保存一些垃圾。我们可以把它的邮件正文打包压缩,供以后查阅。这里我们用了两个参数,’b'表示下面的动作行只对信件的正 文起作用,并不对信件的头起作用。’c'表示我们只是copy一份邮件并对它作相应的处理。然后把邮件传递到下一个规则中。我们之所以这样做,是因为:我 们只想在压缩包中保存邮件的正文,而在邮箱(mail inbox)中,我们希望它没什么变化。

其他
对于更为详细的Procmail的介绍,请参考它的联机文档。Procmail的联机文档分为不同的几个部分:

$man procmail
# 程序的基本介绍,参数介绍,在最后还有一些例子

$man procmailrc
# .procmailrc格式的详细介绍。

$man procmailex
# 若干个.procmailrc的例子

$man procmailsc
# 加权过滤,高级的过滤规则。
最新版的Procmail在:  ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

官方网站:http://spamassassin.apache.org/
中国反垃圾邮件联盟:http://anti-spam.org.cn/ 《=提供适合中国国情的黑名单和白名单
垃圾邮件中文规则集:www.ccert.edu.cn/spam/sa/Chinese_rules.cf

spamassassin主要采用IP白名单黑名单、贝叶斯学习技术。
spamassassin的每一个规则给邮件评分(正分或负分),累计分数如果超过一定的阈值,则判断为垃圾邮件
spamassassin可以放置于邮件系统的MTA位置,也可以放置于MDA位置。sendmail通过调用其他软件而间接调用spamassassin:如 MIMEdefang、milter-spamc、spamass-milt
MDA调用spamassassin,可能导致对一份邮件多次检查(如多个收件人的邮件)。如procmail,使用方法则在procmail的配置文件中添加规则即可。


所有配置文件:
=============================================================
- /usr/share/spamassassin/*.cf: 系统配置文件,在系统升级时自动覆盖
- /var/lib/spamassassin/*/*.cf: 系统配置文件,运行sa-update导致自动覆盖
- /etc/mail/spamassassin/*.cf: 系统管理员定义的全局配置文件
- /etc/mail/spamassassin/*.pre: 插件配置
- /usr/share/spamassassin/user_prefs.template: 用户规则模版
- /etc/mail/spamassassin/user_prefs.template:   用户规则模版
- $USER_HOME/.spamassassin/:
- $USER_HOME/.spamassassin/user_prefs: 用户的规则文件
- $USER_HOME/.spamassassin/bayes*   用户的贝叶斯数据库

//总之:/etc/mail/spamassassin/   ~/.spamassassin/ 《=用得上的目录
//主配置文件:/etc/mail/spamassassin/local.cf


添加黑名单、白名单规则:添加到local.cf (在anti-spam.org.cn的spamassassin指南中有)
=============================================================
header   RCVD_IN_CASA_CBLLESS eval:check_rbl('CBLLESS','cblless.anti-spam.org.cn.','127.0.8.5')
describe RCVD_IN_CASA_CBLLESS Relay has be listed in CASA CBL-, http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CBLLESS net
score    RCVD_IN_CASA_CBLLESS 4.0


添加中文垃圾邮件过滤规则:
=============================================================
下载中文规则:wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
这个规则会定期更新,最好通过crontab执行自动更新


配置procmail调用spamassassin:/etc/procmailrc
=============================================================
:0fw:spamassassin.lock
* < 256000
| /usr/bin/spamc

:0 w
! -oi -f "$@"

/etc/mail/spamassassin/local.cf   spamassassin的配置指南
=============================================================
# 垃圾邮件阈值(规则打分的合计)
required_score           7.5
# 修改垃圾邮件的主题
rewrite_header subject         *****SPAM*****
# 将垃圾邮件作为附件传递给收件人
report_safe             0
# 启用贝叶斯技术
use_bayes               1
# 启用贝叶斯自动学习
bayes_auto_learn              1
# Enable or disable network checks
skip_rbl_checks         1
use_razor2              0
use_dcc                 0
use_pyzor               0
# Mail using languages used in these country codes will not be marked
#as being possibly spam in a foreign language.
ok_languages            all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales              all


启动服务:service spamassassin start

  评论这张
 
阅读(281)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017