“未知用户”从单个服务器实例上的多个域的 Postfix 中退回

“未知用户”从单个服务器实例上的多个域的 Postfix 中退回

我正在设置一个 Ubuntu 服务器,并使用 Postfix 作为我的电子邮件帐户。该服务器将托管几个不同的域,我已为每个域设置了相应的虚拟服务器和主目录。在网络托管方面,一切都运行良好,但我遇到了我完全不明白的电子邮件问题。

假设我的主域名是 example1.com。最初我设置了一个用户“chris”,该用户可以在[电子邮件保护],但是当我回复该用户时,发件人地址是[电子邮件保护](出于演示目的更改了 IP)。在我使用过的其他服务器上,我的用户名实际上是一个电子邮件地址,所以我想将此用户更改为[电子邮件保护]我发现它确实运行得很好。我仍然可以接收电子邮件,而且现在当我回复时,使用的是正确的域名!

问题出现在我的下一个用户身上。我创建了“pat”,他们的域名是 example2.com。此用户可以像“chris”最初一样接收电子邮件,发件人电子邮件再次是内部“域”。但现在,当我将此用户名更改为“[电子邮件保护]“我收到邮件守护进程的回复,内容是:。This is the mail system at host ip-123-45-43-21.ec2.internal. I'm sorry to have to inform you that your message could not be delivered... <[email protected]>: unknown user: "pat"

9 个小时后,我的头发都快掉光了,我不知道自己在做什么。以下是我尝试过的各种组合(所有组合都显示相同的消息)– 每次尝试后我都会重新启动 postfix(并在适当newaliases的时候执行:

  • 花费数小时处理 DNS 记录(认为域名需要有所不同)
  • 修改 main.cf Postfix 配置文件(使用 和的不同组合更改mydestinations和 之类的内容)myorigin$mydomainexample1.com, example2.com
  • 设置别名(pat to[电子邮件保护]
  • 设置虚拟域映射()pat [email protected]

我查看了各种日志文件,但很难判断到底发生了什么。其中有一行...Relay access denied...,但我不知道那是来自我发送的测试电子邮件还是其他什么。时间戳很难确定,因为我从 Gmail 发送测试电子邮件和收到守护进程响应之间有几分钟的延迟。

最后,我将用户重新命名为“pat”,它可以再次接收电子邮件(感谢上帝),但发件人地址是错误的([电子邮件保护])。

我觉得这是一种非常常见的设置(单个服务器实例上的多个域),对于典型的网络管理员来说是一项简单的任务,但我已经浏览过数百个论坛、教程和问答帖子,它们都只关注一个域。

以下是我的各种配置文件和日志消息(请记住,这是经过 9 小时的反复修改后的结果,因此我确信存在潜在的冲突和残留)。有什么明显不对劲的地方吗?其他配置文件会更有帮助吗?

设置:AWS Lightsail、Ubuntu、Webmin、Postfix

/etc/postfix/main.cf

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ip-123-45-43-21.ec2.internal
alias_maps = hash:/etc/aliases
myorigin = localhost
mydestination = $myhostname, ip-123-45-43-21.ec2.internal, localhost.ec2.internal, localhost, localhost.$mydomain, $mydomain, example1.com, example2.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.1.0/24
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

virtual_alias_maps = hash:/etc/postfix/virtual

/etc/别名

...
pat: [email protected]

邮件日志(在我恢复为“pat”用户名之前)

Jul  7 21:24:04 ip-123-45-43-21 postfix/local[3842]: F19DA2EE6AF: to=<[email protected]>, relay=local, delay=0.27, delays=0.26/0/0/0.01, dsn=5.1.1, status=bounced (unknown user: "pat")
...
Jul  7 21:27:20 ip-123-45-43-21 postfix/smtpd[4829]: NOQUEUE: reject: RCPT from mail-lj1-f170.google.com[209.85.208.170]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-lj1-f170.google.com>

有人能用一些我能遵循和理解的简单方法给我指明正确的方向吗?

[email protected]最终,我希望[email protected](甚至[email protected]将来)能够从同一台服务器接收和发送电子邮件。

答案1

好的,感谢@yoonix(加上几个小时的故障排除),我能够想出一个可行的组合,并将为未来的用户所用。

对于其他遇到此问题的人来说,这对我有用,但您可能知道所有服务器都是不同的,并且您的里程肯定会有所不同。

  • 我使用我想要的完整电子邮件地址作为用户名。在我上面的例子中,这将是[email protected]
  • 然后我为“名称”创建一个别名,并将其指向我想要的文件。pat别名也是如此(当您创建用户时,此文件应该会自动创建,但您可以手动创建它)/var/mail/[email protected]
  • 我遇到了此文件的权限问题。我将进行更多故障排除,因为这可能是团队的问题,但我chmod已尝试过,666并且它正在运行。

现在我可以从正确的域接收和发送电子邮件。

我确信其他人会说更改该邮件文件的权限并不是666最好的方法——我当然同意他们的观点。如果我找到一种更好的方法来处理与默认设置兼容的用户组,660我会更新此答案。

相关内容