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)。

Postfix术语中的中继服务器是postfix将传送所有非本地电子邮件的服务器(例如公司内部networking中的postfix将公司的主电子邮件服务器定义为中继,所以它根本不会尝试联系目标服务器)。 这是为了发送电子邮件,并由relayhost指令控制器。

Postfix通过configurationmydestination指令知道哪些域是他的。 此列表中的域将在本地交付(如果它们具有正确的MXlogging)。

在我的mynetworks主机被允许从任何地方到任何地方发送电子邮件。 因此,您应该只在此设置您信任的networking(仅限本地主机或内部networking)。 据说postfix把来自这些主机的电子邮件转发到互联网。 这是默认设置,它在具有permit_mynetworks值的smtpd_relay_restrictions (或smtpd_recipient_restrictions之前的smtpd_recipient_restrictions)中设置。 如果您完全从postfix config中删除permit_mynetworks ,那么mynetworks参数将不会执行任何操作。

指令relay_domains控制非本地域名后缀接受整个世界的电子邮件。 这通常用于你的后缀为某个域的MX备份。


因此,在你的情况下,configuration应该有我的mynetworks空(如果不可能是空的,请使用一些内部IP,如10.10.10.10那样在networking中不使用) smtpd_client_restrictions删除smtpd_client_restrictions

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

这是我最后的工作。 关键是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 

另一个很好的postfixdebugging提示:即使中继主机没有被触摸,本地反弹消息(即,中继拒绝立即)仍然具有中继主机的名称!

我也研究了master_service_disable = inet ,但是通过连接到localhost:25来处理本地邮件发送的事情还不够多。