iRedMail:域别名不适用于某些外部邮件(变音符号/punycode)

iRedMail:域别名不适用于某些外部邮件(变音符号/punycode)

成功为我的主域设置 iRedMail 服务器后,我尝试按照此处的步骤将我的辅助域添加为别名:https://docs.iredmail.org/sql.add.alias.domain.html

这还没有起作用,所以我另外将辅助域添加到 /etc/postfix/main.cf 中:

virtual_alias_domains = domain2.tld
virtual_alias_maps = hash:/etc/postfix/virtual

注意:我没有删除 virtual_alias_maps 下的任何现有 mysql 条目。

并将映射输入到 /etc/postfix/virtual 中,然后执行“postmap /etc/postfix/virtual”:

@domain2.tld     @domain1.tld

这是在服务器内部进行的。[电子邮件保护]可以发送到[电子邮件保护]用户 2 将在其邮箱中收到邮件。外部电子邮件在发送到以下地址时仍会到达:[电子邮件保护]

不幸的是,它无法处理发送到辅助域的外部邮件。在我的 /var/logs/mail.log 中,我发现以下几行:

postfix/smtpd[5541]: NOQUEUE: reject: RCPT from mail-oi1-x231.google.com[2607:f8b0:4864:20::231]: 451 4.3.5 <[email protected]>: Recipient address rejected: Server configuration problem; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-oi1-x231.google.com>

和:

postfix/smtpd[5644]: warning: problem talking to server 127.0.0.1:12340: Connection timed out

Dovecot 正在监听 12340 端口:

dovecot    513      root   67u  IPv4  17087      0t0  TCP 127.0.0.1:12340 (LISTEN)

在我的鸽舍日志中我反复发现以下行:

dovecot: quota-status: Error: quota-status: Client sent invalid recipient address: Invalid character in path

在对不同的外部邮件托管商进行进一步测试后,我发现发送到辅助域的 4 封邮件中有 2 封能够到达。GMail 和 Hotmail 没有到达,我公司的 Exchange 和其他一些网络提供商能够到达。

这就是我陷入困境的地方。我怀疑有以下两种情况:要么我只是错过了一个必要的配置,这似乎很有可能,因为我以前从未在 Debian 上设置过邮件服务器,要么 dovecot 错误是由我的辅助域引起的。辅助域包含一个变音符号 (ä/ö/ü),我很清楚这可能会导致一些问题。因此,我还拥有该域的 punycode 格式变体。因此,每当我将带有变音符号的辅助域添加到配置中时,我也会添加它的 punnycode 版本,假设它可以解决这方面的任何问题。

iRedMail/postfix/dovecot/whateverelseisinvolved 似乎可以很好地处理 punnycode/umlauts,这似乎只是取决于发件人,因为只有一半的邮件会丢失(发件人不会收到错误)。有人猜到原因吗?或者我可以检查哪些日志来深入研究这个问题?我是不是只是忘记配置一些显而易见的东西了?

任何朝着正确方向的推动都会受到高度赞赏。

问候,Snot

====基本信息====

  • iRedMail版本:1.4.0 MARIADB版
  • Linux/BSD 发行版名称和版本:Debian GNU/Linux 10 (buster) - 10.10
  • 使用数据库:MySQL(MariaDB)
  • Web 服务器:Nginx

====编辑====

至于基础设置;在全新安装 Debian 10 后,我按照本指南中的步骤进行操作https://www.linuxbabe.com/mail-server/debian-10-buster-iredmail-email-server

任何与指南不同的具体配置都已在帖子中提及。我还颁发了一份证书,其中包含主域名和二级域名的 punnycode。

以下是启动时的各种日志:

/var/log/mail.log:

Aug 14 14:24:36 s postfix/postfix-script[1637]: warning: symlink leaves directory: /etc/postfix/./makedefs.out
Aug 14 14:24:37 s amavis[573]: starting. /usr/sbin/amavisd-new at host.domain1.tld amavisd-new-2.11.0 (20160426), Unicode aware, LC_ALL="C", LANG="en_US.UTF-8"
Aug 14 14:24:37 s postfix/postfix-script[1819]: starting the Postfix mail system
Aug 14 14:24:37 s postfix/master[1821]: daemon started -- version 3.4.14, configuration /etc/postfix
Aug 14 14:24:39 s amavis[1915]: Net::Server: Group Not Defined.  Defaulting to EGID '121 121'
Aug 14 14:24:39 s amavis[1915]: Net::Server: User Not Defined.  Defaulting to EUID '113'
Aug 14 14:24:39 s amavis[1915]: No ext program for   .F, tried: unfreeze, freeze -d, melt, fcat
Aug 14 14:24:39 s amavis[1915]: No ext program for   .zoo, tried: zoo, unzoo
Aug 14 14:24:39 s amavis[1915]: No decoder for       .F   
Aug 14 14:24:39 s amavis[1915]: No decoder for       .zoo 
Aug 14 14:24:39 s amavis[1915]: Using primary internal av scanner code for clamav-socket
Aug 14 14:24:39 s amavis[1915]: Found secondary av scanner clamav-clamscan at /usr/bin/clamscan

/var/log/dovecot/dovecot.log:

Aug 14 14:24:26 s dovecot: master: Dovecot v2.3.4.1 (f79e8e7e4) starting up for pop3, imap, sieve, lmtp (core dumps disabled)
Aug 14 14:24:43 s dovecot: stats: Error: (stats-reader): didn't reply with a valid VERSION line: EXPORT#011global
Aug 14 14:24:43 s dovecot: stats: Error: (stats-reader): didn't reply with a valid VERSION line: EXPORT#011global

grep postfix /var/log/syslog:

Aug 14 14:24:36 s postfix/postfix-script[1637]: warning: symlink leaves directory: /etc/postfix/./makedefs.out
Aug 14 14:24:37 s postfix/postfix-script[1819]: starting the Postfix mail system
Aug 14 14:24:37 s postfix/master[1821]: daemon started -- version 3.4.14, configuration /etc/postfix

我已经在 postfix main.cf 中禁用了配额功能并启用了 SMTPUTF8,除了在启动时在 mail.log 中增加了一行之外,没有明显变化:

Aug 14 14:59:46 s amavis[571]: starting. /usr/sbin/amavisd-new at host.domain1.tld amavisd-new-2.11.0 (20160426), Unicode aware, LC_ALL="C", LANG="en_US.UTF-8"

不幸的是,行为仍然相同。在进一步分析日志后,我意识到似乎来自提供商的邮件是通过 punycode 发送的(即使我专门将其发送到带有变音符/非 ASCII 字符的域)。另一方面,GMail 实际上将邮件发送到包含变音符的域(非 punycode,即使我在收件人邮件地址中专门使用 punycode 格式)。所以,我要么需要教我的服务器处理非 ASCII 字符,要么需要教 Google 通过 punycode 发送。或者教我的服务器将变音符转换为 punycode。选项 2 显然不是真正的选项,所以是 1 或 3。

来自非 GMail 托管邮件的 mail.log 条目:

postfix/amavis/smtp[2300]: 4Gn0zh0z4FzLnSJ: to=<[email protected]>, orig_to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10024, delay=4, delays=0.1/0/0.01/3.9, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 4Gn0zm04JHzLxc0)

来自 GMail 邮件的 mail.log 条目:

Aug 14 15:06:44 s postfix/smtpd[2281]: warning: problem talking to server 127.0.0.1:12340: Connection timed out
Aug 14 15:06:44 s postfix/smtpd[2281]: NOQUEUE: reject: RCPT from mail-ot1-x32b.google.com[2607:f8b0:4864:20::32b]: 451 4.3.5 <user@dömain2.tld>: Recipient address rejected: Server configuration problem; from=<[email protected]> to=<user@dömain2.tld> proto=ESMTP helo=<mail-ot1-x32b.google.com>

答案1

由于我仍然看不到完整的解决方案(Postfix 中的地址重写可能会起作用,但这将是这个故事的悲伤结局),我正在答案中收集我的诊断步骤:

  • 获得有效的配置,例如通过命令转储postfix -n以及postfix -M邮件服务器是否确保清楚了解不同服务(主要是 amavis)的集成方式。

  • 分别测试本地部分、非地址标头和域名中的非 ASCII 字符(以通过 Punycode 编码的 A 标签开头,如xn--,以及直接包含非 ASCII 字母的 Unicode 字符)

  • 在 Postfix 中保持SMTPUTF8禁用状态 - Dovecot 尚未完全支持处理可以通过这种方式接收的邮件,并且它既不是必需的,也不一定有助于解决 amavis 中的问题。

  • amavis 有一个$log_level设置(在 Debian 中,大概在 中/etc/amavis/conf.d/),可能会作为您的一部分归零邮件系统分配

  • 如果你可以选择切换,请将 amavis 作为前队列运行过滤器(而不是后队列 smtpF过滤器可能会或可能不会揭示更有用的错误或行为。

  • amavis 修复了一些特定于 mariadb 的 SQL+Unicode 问题在您使用的 2.11 版本之后,数据库日志中可能会出现有用的错误 - 或者可以通过比较配置了功能相同的 postgres 后端的相同堆栈来排除(postgres 不共享 MySQL&MariaDB 的 Unicode 功能/错误)

相关内容