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

我已经build立了SMTP AUTH的Postfix服务器(端口587上的STARTTLS)。 我所有的用户都在域名“example.org”。 我想强制发件人地址为“[email protected]”。

我知道这可以通过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文件。 我不需要这样一个灵活的映射:它应该始终是“[email protected]”。 有更简单的select吗?

你需要在Postfix中编译的正则expression式。 或者分配已经包括pcre。 postconf -m应该在其中显示一个pcre行。 然后你可以这样做:

/etc/postfix/login_maps.pcre

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

main.cf

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

应该按预期正常工作。 如果不让我知道,以便在需要时进行编辑。

另一个答案中提到的正则expression式匹配电子邮件地址的用户部分( logged-in-user @ example.org)。 这是一些额外的信息。

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

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

这意味着您的用户名永远是您的完整电子邮件地址( [email protected] ) – 不允许其他现有用户名从该地址发送 – 而且您不必每次更新一个额外的Postfixconfiguration文件添加一个用户。

这可能会在configuration了多个域的服务器上使用。 用户[email protected]只能从该地址发送,而不能从[email protected] (不同的用户和电子邮件,不同的人)发送。 用户名john.doe在这种情况下是不明确的。

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

 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 

在这个例子中,应该调整设置以指向正确的文件,并使用regex或(better)pcre作为types。 特别是如果一个名为“virtual”的文件已经被用于其他目的(例如virtual_alias_maps,正如Postfix的官方示例所示 ),另一个文件应该用于login映射。

从:

 smtpd_sender_login_maps=hash:/etc/postfix/virtual 

至:

 smtpd_sender_login_maps=pcre:/etc/postfix/login_map 

你可以在头上使用正则expression式的组合,如下所示: http : //www.akadia.com/services/postfix_uce.html ? 然后你可以像[*@example.org]一样使用regexp来确保只有example.org的发件人。