阻止电子邮件到后缀中不存在的地址

我们有postfix设置作为网关过滤和中继邮件到我们的Exchange服务器。 没有设置LDAP,有没有办法让我定义一个有效的地址列表,所以postfix可以拒绝所有对我们的域,而不是一个有效的用户或别名?

即,我想指定一个有效的电子邮件列表。 如果RCPT TO不属于这些电子邮件,则拒绝。 我计划使用fail2ban防火墙closures这些IP一个小时作为惩罚目录收获攻击企图。

这最终变得非常简单。

简而言之:

  1. 使用PowerShell从交换中导出电子邮件地址列表。
  2. 清理这个列表,这样它可以被映射。
  3. 创build一个validation收件人列表的规则。

具体而言:在Exchange EMS中,运行以下命令:

Get-Mailbox -Resultsize Unlimited | Ft EmailAddresses 

如果您的电子邮件列表很大,那么您可能希望对这个命令less一点宽容,并获得一个CSV文件。 这对我来说是有效的,因为我们只有大约50个,使用Sublime Text和正则expression式很容易将其削减。

使用此列表,我从列表中删除了除SMTP地址以外的所有内容,每行只留下一行。

接下来,在Sublime中,我在地址之后的每行添加了“OK”。 例:

 [email protected] OK 

然后,我将它作为/ etc / postfix / access-inbound复制到Postfix服务器

然后,我运行以下命令:

 root@gateway:/etc/postfix/# postmap /etc/postfix/access-inbound 

这会在运行的目录中创buildaccess-inbound.db。 (注意上面!我在/ etc / postfix中做了这个)。

现在剩下的就是告诉Postfix使用这个文件来validation发件人。 我在smtpd_recipient_restrictions中做了这个。 请注意,下面的指令有很多东西在那里。 我把其他的configuration留在了上下文中。 首先,这个configuration比较发件人和whiltelist,然后执行该列入白名单的发件人的发送操作。 然后,它做所有其他检查。

最后,在底部,你会看到:

 check_recipient_access hash:/etc/postfix/access-inbound, 

这告诉后缀:“如果收件人在这个列表中,接受邮件”。 (实际上,它说:“如果收件人在这个列表中,按照列表中的内容来做,但是在这种情况下,我们所有有效的电子邮件都有一个”OK“的回应,因此前者更容易考虑n00b的search者) 。

最后,在底部,你看到拒绝 。 这意味着:“如果你已经到了所有这些检查的底部,并且上面的检查都没有给你一个”确定“来接受邮件,就拒绝它。

 smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/whitelist.cf, check_sender_access mysql:/etc/postfix/shortcircuit.cf, reject_unverified_recipient, reject_invalid_hostname, reject_unauth_pipelining, reject_unknown_recipient_domain, reject_unauth_destination, permit_mynetworks, permit_sasl_authenticated, check_recipient_access hash:/etc/postfix/access-inbound, reject