后缀 – 如何创build真正的基于用户的限制规则?

我有一个邮件服务器(后缀2.9.6)启动并运行15-20用户,只有一个单一的域内部使用,让我们称之为xyz.mail.lan

用户是:

[email protected] [email protected] [email protected][email protected] 

没有外部中继,或从互联网接收邮件是必要的。 它现在正常工作。

我的目标是限制用户互相发送邮件。

例如:

  • user1被允许发送邮件到:user2,user3,user4,user5
  • 用户2只能发送邮件给:user1,user3
  • user3被允许发送邮件到:user1,user5
  • user5被允许发送邮件到:user1,user4

我不会有超过20个用户,所以我不介意如果我的手必须为每个用户设置丑陋的规则

如果你想快速和肮脏的解决scheme(由于用户很less),没有外部脚本/守护进程(只使用后缀和地图),看看后缀限制类 。 在该页面中,您应该看到示例如何使用该function。 总之, 每个class级都会有你想要的限制

对于您的情况,首先您将在smtpd_*_restriction添加此检查表,例如smtpd_recipient_restriction

 smtpd_recipient_restriction = ... other restriction.... check_sender_access hash:/etc/postfix/sender_rules smtpd_restriction_classes = user1_rule, user2_rule, user3_rule,... user1_rule = check_recipient_access hash:/etc/postfix/rules/user1 user2_rule = check_recipient_access hash:/etc/postfix/rules/user2 user3_rule = check_recipient_access hash:/etc/postfix/rules/user3 so on... 

/ etc / postfix / sender_rules的内容

 user1 user1_rule user2 user2_rule user3 user3_rule ... others ... 

最后是/ etc / postfix / rules / userX的内容(其中X是1 …用户数)

在/ etc /后缀/规则/ USER1

 user2 OK user3 OK user4 OK user5 OK 

在/ etc /后缀/规则/用户2

 user1 OK user3 OK 

而其他…

由于你的用例非常特殊,标准的Postfix查找方法不适合你,所以我会考虑使用Postfix的内容检查 。

通常它用于反垃圾邮件/病毒过滤,但是由于您可以将自己的Perl /任何脚本连接到它,所以您可以使用您喜欢的语言创build一个小脚本,如果应该传递邮件或不。

在伪代码中,类似

 if ($mailfrom == "user2" && ($rcptto == $user3 || $rcptto == $user5)) { yes_pass_the_mail(); } 

应该做。 看看有关过滤的Postfix文档。