如何在Postfix中将发件人地址强制为“ logged-in-user@example.org”?


15

我已经使用SMTP AUTH(端口587上的STARTTLS)设置了Postfix服务器。我所有的用户都在“ example.org”域中。我要强制将发件人地址设置为“ logged-in-user@example.org”。

我了解到可以使用main.cf选项来实现

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

使用如下的login_maps文件:

a@example.org a
b@example.org b
c@example.org c
...

(另请参见使用SMPT AUTH阻止发件人地址欺骗),但这意味着每次有新用户时,我都必须编辑login_maps文件。我不需要如此灵活的映射:它应该始终为“ logged-in-user@example.org”。有没有更简单的选择?

Answers:


14

首先,通过输入命令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

这应该工作正常。


太棒了。正是我想要的!
克里斯·勒彻

3
对于Ubuntu用户,您可以使用获得postfix pcre sudo apt-get install postfix-pcre。也许对大多数人来说这是显而易见的。
NeilMonday

没有办法在正则表达式或引用$myhostname变量中忽略域吗?在这里您可以看到Postfix能够通过电子邮件的用户部分搜索查找表...
Jaime Hablutzel

我相信您会反斜杠转义'。域名中的字符,因此将其解释为文字匹配:/^(.*)@example\.org$/
Arnon

否则,这将与“ test @ exampleXorg”以及“ test@example.org”匹配,这可能并非预期的行为。
阿农

6

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

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

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

这意味着您的用户名始终是您的完整电子邮件地址(login-in-user@example.org)-不允许从该地址发送其他任何现有的用户名-并且您不必每次都更新其他Postfix配置文件添加用户。

这可能在配置了多个域的服务器上使用。仅允许用户john.doe@example.com从该地址发送,而不能从john.doe@example.org(不同的用户和电子邮件,不同的人)发送。在这种情况下,用户名john.doe将是不明确的。

另外,根据您的配置,必须指向此文件的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或(更好)pcre作为类型。特别是如果一个名为“虚拟”的文件已经用于其他用途(例如,用于virtual_alias_maps,如官方Postfix示例所示),则应将另一个文件用于登录映射。

从:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

至:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

0

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


假设,我可以在此处使用“ regexp:”(?)如何指定这样的正则表达式,即用户“ a”可以作为“ a@example.org”发送但不能作为“ b@example.org”发送?
克里斯·勒彻

@sonstabo,如果您包括配置示例,那就太好了
Jaime Hablutzel,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.