博客统计信息

51cto推荐博客
用户名:trt2008
文章数:75
评论数:36
访问量:59576
无忧币:471
博客积分:1540
博客等级:6
注册日期:2008-02-04

我的技术圈(2)

更多>>
postfix 只允许指定的用户给特定的别名发送邮件
2010-10-12 17:31:26
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chlotte.blog.51cto.com/318402/404764

公司需求:只有公司高层才可以向全体员工发送邮件,除此之外,均无权向全体员工发送邮件。

公司高层邮箱:

wanglujing@ourgame.com

renlina@ourgame.com  

caiyanyan@ourgame.com

qinwen@ourgame.com   

shiwanting@ourgame.com 

 

全体员工邮箱:qtyg@ourgame.com

 

 

postfix相关概念如下,具体的请参考《postfix权威指南》,在第十一章 反垃圾邮件 中讲的很清楚,下面引用了其部分参数:

Smtmpd_restriction_classes

自定义规范等级的名称,列出管理员自定义的所有规范等级,每一组规范等级,都是由一系列UBE限制条件组成。

 

Check_client_access  客户端

 

Check_sender_access 发件人

 

Check_recipient_access 收件人

 

Check_recipient_access maptype:mapname

Check_recipient_access 指向一个含有邮件地址、网域名称、人名的访问表,用于对比客户端在RCPT TO命令中提供的收件地址,如果发现相符的索引键,则postfix执行相对应的值所提定的动作。

 

Check_sender_access maptype:mapname

Check_sender_access 指向一个含有邮件地址,网域名称,人名的访问表,用于对比客户端在MAIL FROM命令中提供的寄件人邮件地址,如果发现相符的索引键,则postfix执行相对应的值所指定的动作。

 

 

SMTP对话过程以各阶段对应的限制条件:

 

 

动作如下:

OK

通过当前过滤规则的检查,postfix继续检查下一组过滤规则。

REJECT

拒绝邮件.后面可以加上一段简短信息,说明拒绝的理由,这段信息会连同拒绝码一起返回给客户端,并且被记录在postfix日志文件中。

 

 

 

解决方法如下:

 

1,定义规范等级,名称分别为local_onlylocal_only1,修改main.cf(注:红色的代表新增加的)

[root@mail postfix]# vi main.cf

 

#youshengtao 2010-10-12

smtpd_restriction_classes = local_only, local_only1

local_only = check_recipient_access hash:/etc/postfix/plugin/plugin.list,reject

local_only1 = check_sender_access hash:/etc/postfix/plugin/plugin.users,reject

 

smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqd

n_recipient, reject_unlisted_recipient, check_sender_access hash:/etc/postfix/plugin/plugin.users, check_sender_access hash:/etc/postfix/plugin/local_senders, check_recipient_access hash:/etc/postfix/plugin/local_recipients, permit_mynetworks, permit_sasl_authenticated, rejec

t_unauth_destination, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_policy_service inet:127.0.0.1:10031

 

 

 

2,建立相关的目录,也可以不建目录,直接放在postifx目录下面,不过,为了以后维护方便,我还是建了一个目录。

[root@mail ~]# mkdir -p /etc/postfix/plugin

[root@mail ~]# cd /etc/postfix/plugin/

 

[root@mail plugin]# vi local_recipients

qtyg@ourgame.com local_only1

 

[root@mail plugin]# vi local_senders

wanglujing@ourgame.com local_only

renlina@ourgame.com    local_only

caiyanyan@ourgame.com  local_only

qinwen@ourgame.com     local_only

shiwanting@ourgame.com  local_only

 

[root@mail plugin]# vi plugin.list

qtyg@ourgame.com OK

 

[root@mail npc]# vi plugin.users

wanglujing@ourgame.com OK

renlina@ourgame.com    OK

caiyanyan@ourgame.com  OK

qinwen@ourgame.com     OK

shiwanting@ourgame.com OK

 

 

3,使用postmap将下列的文件转换成postfix可直接查询的格式。

postmap hash:/etc/postfix/plugin/plugin.list

postmap hash:/etc/postfix/plugin/plugin.users

postmap hash:/etc/postfix/plugin/local_senders

postmap hash:/etc/postfix/plugin/local_recipients

 

 

4,重载postfix后,邮件服务器正常工作,实现了我们需要的功能。

[root@mail npc]# service postfix reload

重新载入postfix:[确定]

 

 

 

备注:不要忘记第3,否则服务器会不能收发任何邮件,日志中会有如下提示:

Oct 12 13:55:15 mail postfix/smtpd[875]: fatal: open database /etc/postfix/plugin/recipient_list.db: No such file or directory

Oct 12 13:55:16 mail postfix/master[2266]: warning: process /usr/libexec/postfix/smtpd pid 875 exit status 1

Oct 12 13:55:16 mail postfix/master[2266]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

本文出自 “一个SA的工作和学习记录” 博客,请务必保留此出处http://chlotte.blog.51cto.com/318402/404764

分享至
更多
一键收藏,随时查看,分享好友!
hbxntc、cjxchen88、netkey
4人
了这篇文章
类别:linux技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2010-10-14 15:33:07
呵呵 这个很实用 又学一招 备份一个

2010-10-14 15:52:26
谢谢,这是前几天我们公司的一个需求.

2010-10-28 20:29:33
楼主,能否给点postfix的学习资料呢?
博主回复:
2010-11-03 11:42:09
推荐《postfix权威指南》

2011-01-16 02:29:34
你好,有遇到问题,公司现在有个需求是外部邮件可以单发到公司用户 ,但是不能发到群组(别名)如:all@test.com, 公司内部就都可以发
我按上面的方法做,把上面qtyg改成了test@test.com   把你文章中的几个特殊用户改成*@test.com 其他都一样 但是没有达到我要的效果   麻烦指教一下了 ,379362135 加我QQ吧,方便联系

2011-01-20 16:10:50
4楼的朋友
可在smtpd_recipient_restrictions参数中加入如下选项
check_client_access hash:/usr/local/etc/postfix/client_access,
check_recipient_access hash:/usr/local/etc/postfix/recipient_access,
client_access的内容为
.test.com   OK
recipient_access的内容为
all@test.com   REJECT
all2@test.com REJECT
所有的别名都写进去
当然postmap命令还是需要执行下的

2011-09-07 10:57:29
不错,学习了。

 

发表评论            

有奖门诊!前端开发专家戏说Ext江湖
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: