
Ich habe einen Mailserver mit Postfix, Roundcube und Dovecot eingerichtet. Alles funktioniert gut – fast.
In meinem Land gibt es einen beliebten kostenlosen E-Mail-Dienst namens inbox.lv. Und dieser hat eine Anti-Spam-Regel eingerichtet, die besagt, dass, wenn ein neuer Server versucht, ihnen E-Mails zu senden, dieser zunächst für 10 Minuten auf die graue Liste gesetzt wird und der Server dann aufgefordert wird, die E-Mail erneut zu senden. Klingt fair.
Wenn Sie jedoch Postfix zum Senden ausgehender E-Mails verwenden (entweder von Roundcube oder Thunderbird), wird die Nachricht nicht in die Warteschlange gestellt. Stattdessen wird sie sofort mit einem Fehler zurückgegeben. Es gibt auch einen Protokolleintrag (Zeilenumbrüche/Abstände habe ich zur besseren Lesbarkeit hinzugefügt; IP- und E-Mail-Adressen aus Datenschutzgründen geschwärzt):
May 31 23:17:18 21 postfix/smtpd[24814]: NOQUEUE: reject: RCPT from unknown[MY.IP.ADDRESS.HERE]:
450 4.1.1 <[email protected]>: Recipient address rejected: unverified address:
host mx1.inbox.lv[194.152.32.74] said: 450 4.7.1 <unknown[SERVER.IP.ADDRESS.HERE]>:
Client host rejected: greylisted, please retry in 597 seconds (in reply to RCPT TO command);
from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.1.216]>
Alle Warteschlangeneinstellungen bleiben auf den Standardeinstellungen. Die Postfix-Version ist 2.10.1.
Warum passiert das und wie kann ich Postfix dazu bringen, die Nachrichten in die Warteschlange zu stellen und es in 10 Minuten erneut zu versuchen?
Hinzugefügt:Postfix-Konfiguration (anonymisiert):
[root@myserver etc]# postconf mail_version
mail_version = 2.10.1
[root@myserver etc]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 100000000
milter_default_action = accept
mydestination = localhost
mydomain = mydomain.lv
myhostname = mydomain.lv
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = $smtpd_milters
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = reject_unverified_recipient
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mydomain.lv/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mydomain.lv/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = d1.lv d2.lv d3.lv d4.lv
virtual_mailbox_limit = 0
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
[root@myserver etc]# postconf -M
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
smtps inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
[root@myserver etc]#
Antwort1
Sie haben Postfix so konfiguriert, dass es eine Verbindung zu Remote-Zielen herstellt, um diese nach Empfängern zu fragen - als VoraussetzungVorSie akzeptieren alles in Ihre lokale Warteschlange.
smtpd_recipient_restrictions =
reject_unverified_recipient
Auf einem allgemeinen Mailserver ist dies für alles ungeeignetAberDomänen, die sich unter Ihrer Kontrolle befinden oder mit deren Betreibern Sie eine Vereinbarung haben.
Wenn Sie Remote-Server fragen, ob sie bestimmte Benutzer haben, ohne E-Mails zuzustellen, werden viele Server die Kommunikation mit Ihnen einstellen. Bevor sie nicht wissen, was Sie senden, können sie nicht leicht feststellen, ob Sie ein Spammer sind, der versucht, eine Liste seiner nächsten Opfer zu löschen, oder jemand, der E-Mails zustellen möchte.
Die einfachste Änderung, um dieses Problem auszuräumen und Ihr ursprüngliches Problem zu lösen:
smtpd_recipient_restrictions =
permit_sasl_authenticated
,
reject_unauth_destination
, reject_unverified_recipient
Da die Einschränkungen in der angegebenen Reihenfolge verarbeitet werden, sind Ihre authentifizierten Benutzer und nicht damit verbundene Relay-Anfragen (die ohnehin abgelehnt werden) davon ausgenommen. Auf diese Weise können Sie reject_unverified_recipient
eingehende Nachrichten weiterhin durchsetzen (wobei Dovecot Adressen vermutlich ohne Verzögerung bestätigt). Aber ohne Remote-Server über Empfänger zu belästigen, für die Sie zu einem Zeitpunkt noch keine E-Mails haben. Sie müssen jedoch komplexer vorgehen, wenn Sie die Funktion auch für Ihre Benutzer aktivieren möchten, die sich gegenseitig Nachrichten schreiben. Die Datei ADDRESS_VERIFICATION_README in Ihrer Postfix-Dokumentation ist … etwas alt, sollte Ihnen aber dennoch einen allgemeinen Überblick geben.
Ich empfehle grundsätzlich die Verwendung von master.cf (das zumindest in jüngerer Zeit mit geeigneten Vorlagen geliefert wird), um teilweise getrennte SMTP-Instanzen einzurichten, eine auf Port 25 für die allgemeine Internetnutzung, eine auf Port 465 für obligatorisch authentifizierte Benutzereingaben. Auf diese Weise können Sie auf einigermaßen wartungsfreundliche Weise unterschiedliche Regeln für einzelne Dienste durchsetzen, was die Aufgabe, Relay-Verkehr anders als eingehenden Verkehr zu behandeln, weiter erleichtert.