我有一个邮件服务器(postfix 2.9.6),有 15-20 个用户正在运行,仅供内部使用,只有一个域名,我们称之为 xyz.mail.lan
用户是:
[email protected]
[email protected]
[email protected]
…
[email protected]
无需外部中继,也无需从互联网接收邮件。目前运行良好。
我的目标是限制用户互相发送邮件。
例如:
- 用户 1 仅被允许发送邮件给:用户 2、用户 3、用户 4、用户 5
- 用户 2 仅被允许发送邮件给:用户 1、用户 3
- 用户3 仅被允许发送邮件给:用户1、用户5
- …
- 用户 5 仅被允许发送邮件给:用户 1、用户 4
我的用户不会超过 20 个,因此我不介意为每个用户制定丑陋的规则。
答案1
如果你想要一个快速而肮脏的解决方案(因为用户很少)并且没有外部脚本/守护进程(只使用 postfix 及其映射),请查看后缀限制类。在该页面中,您应该会看到该功能如何工作的示例。简而言之,每个班级都有自己的一套限制正如你想要的那样。
对于您的情况,首先您将添加此检查表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/postfix/规则/用户1
user2 OK
user3 OK
user4 OK
user5 OK
/etc/postfix/规则/用户2
user1 OK
user3 OK
还有其他人……
答案2
由于您的用例非常特殊,并且标准 Postfix 查找方法不适合您,因此我会考虑使用 Postfix内容检查。
通常它用于反垃圾邮件/病毒过滤,但由于您可以将自己的 Perl/任何脚本连接到它,因此您可以使用您喜欢的语言创建一个小脚本,并让它回答 Postfix 是否应该传递邮件。
用伪代码来说,类似
if ($mailfrom == "user2" && ($rcptto == $user3 || $rcptto == $user5)) {
yes_pass_the_mail();
}
应该可以。查看 Postfix 文档中有关过滤的内容。