我建立了一个带有 PostFix 邮件服务器和加密网关的架构。
我正在通过中的参数将所有传出的 SMTP 流量(甚至从mydomain.com
发送到 的邮件mydomain.com
)中继到加密网关。relay_host
/etc/postfix/main.cf
邮件正在到达外部用户:例如,我可以回复发送至[email protected]
的邮件[email protected]
。
问题是答案没有传达给我的用户(由于无限的中继循环)。
此问题还会影响从内部用户发送到内部用户的邮件(即从@mydomain.com
TO @mydomain.com
)。此类流量经过以下路线:(1)客户端 -> (2)PostFix -> (3)加密网关 -> (4)PostFix -> 加密网关 -> PostFix -> 等(循环)。经过一定数量的跳转后,邮件将被加密网关自动删除,即未投递。
我如何告诉 PostFix 不要中继来自 10.0.0.66 的邮件,而是将它们直接发送到 Cyrus-IMAP(也托管在 10.0.0.13 上)?
答案1
我认为,这无法在一个 MTA 中实现。您需要另一个 MTA 来发送。
(2016/05/03)追加评论
我尝试在 master.cf(如下)中启用submission
端口(587/TCP)作为仅发送 smtpd,并relayhost
在 main.cf 中禁用。
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o myhostname=localhost
-o mydestination=localhost
-o local_recipient_maps=
-o relayhost=[nnn.nnn.nnn.nnn]
当我向提交端口发送一条消息时,它进入了 smtpd(25/TCP)的同一个队列,并被传送到本地假脱机(糟糕的结果)。
因此,我们不仅要分离 smtpd 进程,还必须分离队列和每个进程(cleanup
、qmgr
、smtp
、 ... master
)。在典型的 Linux 发行版中,我认为这很难实现。但是,我认为可以结合 postfix(25/TCP,spool)和另一个 MTA(587/TCP,仅发送,例如 sendmail)来实现。