- 论坛徽章:
- 0
|
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后的一点认识,欢迎大家拍砖,指出不足,让我们共同进步! |
|