postfix只允许部分账户给一个特定别名发邮件
 
all@是公司邮件服务器的一个别名,代表所有账号,也就是给所有人群发邮件的地址.公司要求只允许少数人可以发.
 
实现方法如下:
 
:原理
检查MAIL FROM:阶段的邮件地址,假如匹配规则中的地址,则应用相应的限制原则,否则按默认的规则。
 
:修改配置文件
# vim /etc/postfix/main.cnf                         # 修改以下内容
###########################################################
# maildrop setting
maildrop_destination_recipient_limit = 1

smtpd_restriction_classes = local_only, local_only1
local_only = check_recipient_access hash:/etc/postfix/npc/npc.list,reject
local_only1 = check_sender_access hash:/etc/postfix/npc/npc.users,reject

# smtpd related config
smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/npc/npc.users,
check_sender_access hash:/etc/postfix/npc/local_senders,
check_recipient_access hash:/etc/postfix/npc/local_recipients,

permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
# check_policy_service inet:127.0.0.1:10030
##################################################################


:创建列表文件
# mkdir npc;cd npc                    # 创建一个统一的目录,存放列表文件.(可有可无)
# vim local_recipients                  # 检查收件人的列表
all@ local_only1              # 如果收件人是all@,则用local_only1规则处理
 
# vim local_senders                            # 检查发件人的列表
aaa@ local_only              # 如果收件人是aaa,则用local_only规则处理
bbb@ local_only
ccc@ local_only
ddd@ local_only
 
# vim npc.list                              # 如果收件人是all,就允许.(配置文件里面默认设置是拒绝)
all@ OK 
 
# vim npc.users                          # 如果是这个列表里面的账号,总是允许,第一条规则设置的
aaa@ OK
bbb@ OK
ccc@ OK
ddd@ OK 
 
:检查流程
第一条:先检查发件人.如果在npc.users,不收限制
第二条:检查发件人,local_senders中则用local_only处理->根据smtpd_restriction_classes定义的local_only规则类,会再检查收件人,如果是all@,则允许.
第三条:检查收件人,如果在local_recipients中则用local_only1处理->根据smtpd_restriction_classes定义的local_only1规则类,会再检查发件人.如果发件在npc.users,则允许.否则拒绝.
第四条之后的自行google.有的我也说不太清楚….:)
 
重要的事屡清楚这几个文件的关系.