如何在 Postfix 中强制发件人地址为“[email protected]”?

如何在 Postfix 中强制发件人地址为“[email protected]”?

我已经设置了一个带有 SMTP AUTH(端口 587 上的 STARTTLS)的 Postfix 服务器。我的所有用户都在域“example.org”中。我想强制将发件人地址设置为“[电子邮件保护]“。

我了解到这可以通过 main.cf 选项实现

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

使用如下的 login_maps 文件:

[email protected] a
[email protected] b
[email protected] c
...

(也可以看看使用 SMPT AUTH 阻止发件人地址欺骗),但这意味着每次有新用户时我都必须编辑 login_maps 文件。我不需要如此灵活的映射:它应该始终是“[电子邮件保护]“。有没有更简单的选择?

答案1

首先,通过输入命令postconf -m并查找其中的行来检查您安装的 Postfix 是否支持 pcre pcre。一旦您验证了您有 pcre 支持,您可以执行以下操作:

/etc/postfix/login_maps.pcre

/^(.*)@example\.org$/   ${1}

main.cf

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

这应该可以正常工作。

答案2

其他答案中提到的正则表达式与电子邮件地址的用户部分匹配(登录用户@example.org)。以下是一些附加信息。

要使用完整的电子邮件地址作为用户名,请使用以下正则表达式(例如/etc/postfix/login_map):

/^(.*)$/   ${1}

这意味着您的用户名始终是您的完整电子邮件地址([电子邮件保护]) - 不允许从该地址发送其他现有用户名 - 并且您不必在每次添加用户时更新额外的 Postfix 配置文件。

这可能用于配置了多个域的服务器上。用户[电子邮件保护]只允许从该地址发送,但不允许从[电子邮件保护](不同的用户和电子邮件,不同的人)。用户名约翰·多伊在这种情况下会产生歧义。

此外,根据您的配置,必须指向此文件的 smtpd_sender_login_maps 设置可能位于 master.cf(而不是 main.cf)中。官方Dovecot 文档中有以下示例(如果您使用 SASL/submission):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

在此示例中,应调整设置以指向正确的文件并使用正则表达式或(更好的)pcre 作为类型。特别是如果名为“virtual”的文件已用于其他用途(例如virtual_alias_maps,如 Postfix 官方示例所示),应使用另一个文件进行登录映射。

从:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

到:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

答案3

您可以在标题上使用正则表达式组合,如下所示:http://www.akadia.com/services/postfix_uce.html? 然后您可以结合正则表达式如 [*@example.org] 来确保只有来自 example.org 的发件人。

相关内容