Ich versuche, Postfix so einzurichten, dass E-Mails nur weitergeleitet werden, wenn sie vom lokalen Host kommen, UND nur, wenn sie an eine bestimmte Domäne gehen. Sobald ich jedoch einen Relay-Server angegeben habe, wird alles (außer der lokalen Zustellung) dorthin weitergeleitet. Ich dachte, ich hätte die Einschränkungen falsch gesetzt, also bin ich schließlich auf „alles ablehnen“ gegangen und es geht trotzdem durch. Ich frage mich, ob mynetworks
alles umgangen wird, ich habe undefined mynetworks
. Leitet trotzdem alles weiter.
An dieser Stelle postconf -n
ergibt sich:
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
Ich habe zunächst eher etwas wie das hier versucht (um zu zeigen, was anders ist):
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
Ich bin ratlos. Keine Transporttabelle. Postfix 2.11.0 (Ubuntu 14.04).
Antwort1
Ein Relay-Server ist in der Terminologie von Postfix ein Server, an den Postfix alle nicht lokalen E-Mails sendet (Postfix würde beispielsweise im internen Firmennetzwerk den Haupt-E-Mail-Server des Unternehmens als Relay definieren und daher überhaupt nicht versuchen, Zielserver zu kontaktieren). Dieser Server dient zum Senden von E-Mails und wird von derrelayhost
Richtlinie.
Postfix weiß, welche Domänen ihm gehören, durch die Konfiguration dermydestination
Richtlinie. Domänen in dieser Liste werden lokal zugestellt (sofern sie über einen korrekten MX-Eintrag verfügen).
Gastgeber inmynetworks
dürfen E-Mails von überall nach überall senden. Daher sollten Sie hier nur Netzwerke festlegen, denen Sie vertrauen (nur lokaler Host oder internes Netzwerk). Es wird gesagt, dass Postfix E-Mails von diesen Hosts an das Internet weiterleitet. Dies ist die Standardeinstellung, die in smtpd_relay_restrictions
(oder smtpd_recipient_restrictions
vor v2.10) mit dem permit_mynetworks
Wert festgelegt wurde. Wenn Sie den Parameter vollständig aus der Postfix-Konfiguration entfernen permit_mynetworks
, hat dieser mynetworks
Parameter keine Wirkung.
Richtlinierelay_domains
steuert, für welche nicht lokalen Domänen Postfix E-Mails aus der ganzen Welt akzeptiert. Dies wird normalerweise verwendet, wenn Ihr Postfix Backup-MX für eine Domäne ist.
In Ihrem Fall sollte die Konfiguration also mynetworks
leer sein (wenn leer nicht möglich ist, verwenden Sie eine interne IP, die in Ihrem Netzwerk nicht verwendet wird, z. B. 10.10.10.10).ODERentfernen permit_mynetworks
von smtpd_client_restrictions
.
relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587
Antwort2
Das hier habe ich endlich zum Laufen gebracht. Der Schlüssel war default_transport = error
, sodass alles, was nicht mit dem Relay übereinstimmt, einfach zurückgewiesen wird. Danke @Marki555, dass du mich dazu gebracht hast, über die SMTP-Einstellungen hinauszudenken.
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
Ein weiterer guter Postfix-Debugging-Tipp: Eine lokale Bounce-Nachricht (d. h. Relay sofort abgelehnt) enthält noch immer den Namen des Relay-Hosts, obwohl der Relay-Host nicht berührt wurde!
Ich habe mir auch angesehen master_service_disable = inet
, aber so viele Dinge handhaben das lokale Senden von E-Mails durch die Verbindung mit localhost:25, dass es nicht wirklich praktikabel war.