免费注册 查看新帖 |

Chinaunix

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

[Mail] Procmail + formail 实现邮件过滤/对/etc/aliases的支持 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-07 14:22 |只看该作者 |倒序浏览
procmail是和sendmail配合的功能强大的MDA,可以根据procmailrc的条件对邮件进行过滤,论坛里已经有了很多这方面的介绍,就不多说了。
说说这几天实现的一个procmail的小功能吧,还是邮件过滤,对alluser邮件组的发送许可进行限定。
每个公司都有自己的邮件列表,通常只允许公司内部或特定的少数人发给alluser,我的思路是:
受到abel帖子的启发,在/etc/aliases中设置:
    alluser:"|procmail -t /etc/procmailrcs/all_allowed.rc"
这样发往alluser的信件会通过all_allowed.rc来启用procmail进行处理。
##这里应首先在/etc/smrsh中建立procmail的链接,做法
    ln -s /usr/bin/procmail procmail
这样sendmail就能直接通过smrsh调用procmail了。
另外建立一个aliases给所有用户备用,以后通过rc file将给alluser的信转发给新建的这个aliases.
    youralluser::include:/etc/mail/list/youralluser
编辑/etc/mail/list/youralluser,里面按行存放单个用户或其他的aliases.

接着建立我们的rc fiel. /etc/procmailrcs/all_allowed.rc.
   ##按照man procmailrc, /etc/procmailrcs是默认的存放rc file的目录,但/etc下并无此目录,新建即可。开始我将rc file放在另外的目录中,无法生效,后来放在/etc/procmailrcs中就好了,原因待查。

rc file:
##/etc/procmailrcs/testp1.rc
SHELL=/bin/sh
VERBOSE=yes   
LOGABSTRACT=all  
LOGFILE=/tmp/proc.log  ##为测试建立

:0 H
* ? formail -x"FROM" -x"FROM:" -x"Sender:"| egrep -is -f /etc/procmailrcs/accfile  #accfile是允许发信的人的列表
! youralluser@yourdomain

:0 H
/dev/null

在这个文件中,H是对信件头进行检查,* 开始条件语句,? 在开始的位置对后面出现的字符串等进行匹配。

该rc file顺利执行,但收到信后能在Received中看到 for youralluser@yourdomain 的信息,若有人直接往这个信箱发信还是不能很好避免,所以又对rc file进行了修改:
:0 H
* ? formail -x"FROM" -x"FROM:" -x"Sender:"| egrep -is -f /etc/procmailrcs/accfile  #accfile是允许发信的人的列表
! user1@yourdomain youralluser@yourdomain

在! 后添加了一个有效的邮箱,比如管理员的,这样发给youralluser的信能顺利转发,而且在Received中也看不到for 的内容了。

但这个rc file还是有问题的,因为发件人并不是和accfile中的用户名完全匹配,只要有部分匹配也被认为是matched,所以又对该rc file进行修改,使其精确匹配。
:0 H
* ? formail -x"FROM" -x"FROM:" -x"Sender:"| egrep -s "(user1|user2|user3)" ##允许发信的用户,数目应该不多,故可作此选择
! user1@yourdomain youralluser@yourdomain

但对此rc file还是不满意,仍希望通过匹配文件中的数据来过滤发件人,只是还未找到办法。

以上是对初探procmail后的一点认识,欢迎大家拍砖,指出不足,让我们共同进步!

论坛徽章:
0
2 [报告]
发表于 2005-07-08 08:36 |只看该作者

Procmail + formail 实现邮件过滤/对/etc/aliases的支持

补充:
:0 H
* ? formail -x"FROM" -x"FROM:" -x"Sender:"| egrep -is -f /etc/procmailrcs/accfile  #accfile是允许发信的人的列表
! youralluser@yourdomain

应在此添加一条:
* ^From.*@yourdomain
首先判断是否为本地用户,然后判断是否是允许发信的用户。

论坛徽章:
0
3 [报告]
发表于 2005-07-08 11:46 |只看该作者

Procmail + formail 实现邮件过滤/对/etc/aliases的支持

?  $ 在procmailrc中分别有定义
:0:
后的那个 : 也有定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP