免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7525 | 回复: 23
打印 上一主题 下一主题

[Mail] 分享:小弟maildrop过滤心得,另有问题请教各位大大! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-31 16:18 |只看该作者 |倒序浏览
该贴内容已被楼主更改,详情请见楼下!

[ 本帖最后由 leo4364088 于 2007-6-5 10:49 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-31 16:23 |只看该作者
该贴内容已被楼主更改,详情请见楼下!

[ 本帖最后由 leo4364088 于 2007-6-5 10:44 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-05-31 17:34 |只看该作者
该贴内容已被楼主更改,详情请见楼下!

[ 本帖最后由 leo4364088 于 2007-6-5 10:45 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-06-01 10:45 |只看该作者
白名单中的
Maildir
都要加VHOME

论坛徽章:
0
5 [报告]
发表于 2007-06-04 09:36 |只看该作者
谢谢vyouzhi,我后来仔细想了想,也觉得是这样的。现在正在实验中,希望能顺利通过测试。

论坛徽章:
0
6 [报告]
发表于 2007-06-04 11:31 |只看该作者
楼主能不能分享一下你具体的过滤方法啊?我正在做一个qmail上过滤垃圾邮件的设计~但是试了好多都出不来~能不能给我说说你的具体方法~谢谢了~!

论坛徽章:
0
7 [报告]
发表于 2007-06-05 10:30 |只看该作者
那小弟就来献丑一下了,由于技术水平有限,若有错误的地方,敬请指出,谢谢!

首先,我是用SA对邮件进行打分,超过一定分数就做好SPAM标示。SA过滤规则可参考http://www.thismail.org/bbs/forumdisplay.php?fid=10

然后,交给maildrop处理。下面以liutao@goldtelecom.cn为例:

# touch /home/vpopmail/domains/goldtelecom.cn/.qmail-default
# chown vpopmail:vchkpw /home/vpopmail/domains/goldtelecom.cn/.qmail-default
# chmod 600 /home/vpopmail/domains/goldtelecom.cn/.qmail-default
# vi /home/vpopmail/domains/goldtelecom.cn/.qmail-default
| preline /usr/local/bin/maildrop .mailfilter

# touch /home/vpopmail/domains/goldtelecom.cn/.mailfilter
# chown vpopmail:vchkpw /home/vpopmail/domains/goldtelecom.cn/.mailfilter
# chmod 600 /home/vpopmail/domains/goldtelecom.cn/.mailfilter
# vi /home/vpopmail/domains/goldtelecom.cn/.mailfilter

HOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`
VSPAM=`/home/vpopmail/bin/vuserinfo -d spam@$HOST`

`test -d $VHOME/Maildir/`
if( $RETURNCODE != 0 )
{
to /dev/null #无主邮件直接删除
}
else
{
exception {
include $VHOME/.mailfilter #引用个人用户过滤规则
}
}
if ( $SIZE < 262144 ) #如果邮件小于256KB,执行如下操作
{
exception {
xfilter "/usr/bin/spamc -f -u $EXT@$HOST"
}
}
if (/^X-Spam-Flag: YES/)
{
cc "$VSPAM/Maildir/." #如果标示为垃圾邮件,抄送一份给spam@goldtelecom.cn
to "$VHOME/Maildir/.Trash/." #如果标示为垃圾邮件,投递到用户垃圾箱
EXITCODE=0
}
else
{
to "$VHOME/Maildir/." #其余邮件直接投递到收件箱
}

# touch /home/vpopmail/domains/goldtelecom.cn/liutao/.mailfilter
# chown vpopmail:vchkpw /home/vpopmail/domains/goldtelecom.cn/liutao/.mailfilter
# chmod 600 /home/vpopmail/domains/goldtelecom.cn/liutao/.mailfilter
# vi /home/vpopmail/domains/goldtelecom.cn/liutao/.mailfilter

#黑名单部分,发信人来信直接删除
if(/^From:.*bad@abc.net/)
{
to "/dev/null"
}
if(/^From:.*bad@test.com/)
{
to "/dev/null"
}
#白名单部分,发信人来信转移到收件箱
if(/^From:.*good@abc.net/)
{
to "$VHOME/Maildir/."
}
if(/^From:.*good@test.com/)
{
to "$VHOME/Maildir/."
}
##自定义部分,如果主题含有应聘字眼,转移到收件箱(由于自定义规则比较麻烦,请参考楼下:)
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB=~/.*应聘*/ )
{
to "/home/vpopmail/domains/goldtelecom.cn/liutao/Maildir/."
}

论坛徽章:
0
8 [报告]
发表于 2007-06-05 10:30 |只看该作者
一、邮件来源

如果邮件来源包括test.com:
if(/^From:.*test.com*/ || /^From:.*test.com*/ || /^From:.*TEST.COM*/)

如果邮件来源不包括test.com:
if(/^From:!.*test.com*/ || /^From:!.*test.com*/ || /^From:!.*TEST.COM*/)

如果邮件来源是user@test.com:
if(/^From:.*user@test.com>/ || /^From:.*user@test.com>/ || /^From:.*USER@TEST.COM>/)

如果邮件来源不是user@test.com:
if(/^From:!.*user@test.com>/ || /^From:!.*user@test.com>/ || /^From:!.*USER@TEST.COM>/)

如果邮件来源以user开始:
if(/^From:*user*.>/ || /^From:*user*.>/ || /^From:*USER*.>/)

如果邮件来源以test.com结束:
if(/^From:.*test.com>/ || /^From:.*test.com>/ || /^From:.*TEST.COM>/)

如果邮件来源包括test.com(区分大小写):
if(/^From:.*test.com*/)

如果邮件来源不包括test.com(区分大小写):
if(/^From:!.*test.com*/)

如果邮件来源是user@test.com(区分大小写):
if(/^From:.*user@test.com>/)

如果邮件来源不是user@test.com(区分大小写):
if(/^From:!.*user@test.com>/)

如果邮件来源以user开始(区分大小写):
if(/^From:*user*.>/)

如果邮件来源以test.com结束(区分大小写):
if(/^From:.*test.com>/)

二、邮件接收者

如果邮件接收者包括:
if(/^To:.*test.com*/ || /^To:.*test.com*/ || /^To:.*TEST.COM*/)

如果邮件接收者不包括test.com:
if(/^To:!.*test.com*/ || /^To:!.*test.com*/ || /^To:!.*TEST.COM*/)

如果邮件接收者是user@test.com:
if(/^To:.*user@test.com>/ || /^To:.*user@test.com>/ || /^To:.*USER@TEST.COM>/)

如果邮件接收者不是user@test.com:
if(/^To:!.*user@test.com>/ || /^To:!.*user@test.com>/ || /^To:!.*USER@TEST.COM>/)

如果邮件接收者以user开始:
if(/^To:*user*.>/ || /^To:*user*.>/ || /^To:*USER*.>/)

如果邮件接收者以test.com结束:
if(/^To:.*test.com>/ || /^To:.*test.com>/ || /^To:.*TEST.COM>/)

如果邮件接收者包括test.com(区分大小写):
if(/^To:.*test.com*/)

如果邮件接收者不包括test.com(区分大小写):
if(/^To:!.*test.com*/)

如果邮件接收者是user@test.com(区分大小写):
if(/^To:.*user@test.com>/)

如果邮件接收者不是user@test.com(区分大小写):
if(/^To:!.*user@test.com>/)

如果邮件接收者以user开始(区分大小写):
if(/^To:*user*.>/)

如果邮件接收者以test.com结束(区分大小写):
if(/^To:.*test.com>/)

三、邮件主题

如果邮件主题包括:发票
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB=~/.*发票*/)

如果邮件主题不包括:发票
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB=~/!.*发票*/)

如果邮件主题是:发票
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB==/发票/)

如果邮件主题不是:发票
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB!=/发票/)

如果邮件主题以“发票”开始:
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB=~/^发票*/)

如果邮件主题以“发票”结束:
if(/^Subject:.*/)
{
SUBJECT=$MATCH
}
if($SUBJECT ne "")
{
NSUB=`/usr/sbin/maildecode $SUBJECT`
}
if($NSUB=~/.*发票/)

四、邮件长度

如果邮件长度 >= 1024KB
if($SIZE >= 1024)

如果邮件长度 < 1024KB
if($SIZE < 1024)

五、事后操作

拒收
to "/dev/null"

移动到收件箱
to "$VHOME/Maildir/."

移动到垃圾箱
to "$VHOME/Maildir/.Trash"

论坛徽章:
0
9 [报告]
发表于 2007-06-05 10:34 |只看该作者
现在有个问题,就是执行/home/vpopmail/domains/goldtelecom.cn/.mailfilter脚本的时候,只能执行到 include $VHOME/.mailfilter , 也就是说 , 并没有执行 if ( $SIZE < 262144 ) 后的操作。
我想可能是脚本有问题,望各位老大悉心指点。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2007-06-05 10:55 |只看该作者
如果邮件来源包括test.com:
if(/^From:.*test.com*/ || /^From:.*test.com*/ || /^From:.*TEST.COM*/)

==> 這個也只能從 Mail Header 中來看,不代表就一定是 Envelope Sender
==> 要我來用這個 test.com 一定寫成一個變數且忽略大小寫, Ex:
WHITE_LIST=`cat list_file1|tr '\n' '|'`
BLACK_LIST=`cat list_file2|tr '\n' '|'`

if (/^From:.*($WHILE_LIST).*/    <== 這裏是 : D , 連在一起,因為轉成表情符號, 意指忽略大小寫

這邊通常我都是用 mysql 而不是由 file 而來,如此 user 做 White/Black List 的 增/刪/修 都會容易處理許多
其他就同理了,不管是 To, Subject 等等的,用這類的東西最好先把 變數的使用方法及語法的定義等都看清楚,可以
節省自己許多事的

Ex: 我的 mysql + procmail 例子:

  1. MYSQL="mysql -h $host -u abel -pXXXXX $DB"

  2. WHITE_LIST=`echo "SELECT WHITE_NAME FROM WHITE_LIST WHERE USERNAME='$LOGNAME' AND instr(lower('$FROM'),lower(WHITE_NAME)) or instr(lower(WHITE_NAME),lower('$SUBJ') )"| $MYSQL |  tr '\n' '|' ; echo "jklrjkljrkl295jljkfa"`
  3. :0 H
  4. * $($WHITE_LIST)
  5. $ORGMAIL

复制代码

只要郵件表頭 (header) 中 From/Subject 含了 mysql 取出來的字,那就算是白名單
夠簡單吧,不過這可是要經過無數的焠練才能理解

[ 本帖最后由 abel 于 2007-6-5 11:02 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP