Postfix 转发所有电子邮件,不受限制

Postfix 转发所有电子邮件,不受限制

我正在尝试设置 Postfix,以便仅当邮件来自本地主机并且发往特定域时才转发邮件。但是,一旦我指定了中继服务器,所有内容(本地投递除外)都会发往那里。我以为我的限制错了,所以我最终选择“拒绝所有内容”,但邮件仍然会通过。想知道是否mynetworks会绕过所有内容,我未定义mynetworks。仍然会转发所有内容。

此时,postconf -n给出:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

我最初尝试的是更类似这样的东西(展示不同之处):

mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject

我不知所措。没有传输表。Postfix 2.11.0(Ubuntu 14.04)。

答案1

Postfix 术语中的中继服务器是 Postfix 将所有非本地电子邮件传送到的服务器(例如,公司内部网络中的 Postfix 会将公司的主电子邮件服务器定义为其中继,因此它根本不会尝试联系目标服务器)。这用于发送电子邮件,由relayhost指示。

Postfix 通过配置来知道哪些域是他的mydestination指令。此列表中的域名将在本地交付(如果它们具有正确的 MX 记录)。

主办方mynetworks允许从任何地方向任何地方发送电子邮件。因此,您应该在此处仅设置您信任的网络(仅限本地主机或内部网络)。据说 Postfix 会将这些主机上的电子邮件转发到互联网。这是默认设置,在v2.10smtpd_relay_restrictionssmtpd_recipient_restrictions之前版本中设置了该permit_mynetworks值。如果您permit_mynetworks从 Postfix 配置中完全删除该参数,则mynetworks该参数将不起作用。

指示relay_domains控制 Postfix 接受来自全世界哪些非本地域的电子邮件。这通常用于您的 Postfix 是某个域的备份 MX 的情况。


因此,在您的情况下,配置应该为mynetworks空(如果不能为空,请使用一些未在您的网络中使用的内部 IP,如 10.10.10.10)或者permit_mynetworks从......中去除smtpd_client_restrictions

relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587

答案2

这是我最终完成的工作。关键是default_transport = error,这样任何与中继不匹配的东西都会被退回。感谢@Marki555 让我思考 smtpd 设置以外的问题。

default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject

另一个很好的 Postfix 调试提示:本地反弹消息(即,立即拒绝中继)仍然包含中继主机的名称,即使中继主机没有受到影响!

我也研究过master_service_disable = inet,但是足够多的东西通过连接到 localhost:25 来处理本地邮件发送,所以它并不实用。

相关内容