Moin!
Auf meinem Root-Server (Linux, Suse 8.1, bei 1&1) habe ich Postfix installiert. Das funktioniert auch einwandfrei, ich kann Mails empfangen und lokal an andere in Postfix eingetragene User Mails verschicken.
Wenn ich aber an eine Mail an eine Mailadresse senden will, die nicht auf meinem Server liegt (z.B. irgendeinname@irgendeinedomain_aussermeiner.de), dann bekomme ich die Mail mit folgender Meldung sofort wieder zurück:
Logisch. Postfix ist standardmäßig zu konfiguriert, dass es kein Open Relay ist, und das ist auch gut so.
Du kannst lokal Mails versenden, weil Postfix die Erlaubnis für die eigene IP 127.0.0.1 erteilt. Wenn du von sonst irgendwo Mails versenden willst, brauchst du ebenfalls eine Erlaubnis.
Dafür sind die "smtpd_*_restrictions" zuständig. Die entscheiden, ob Postfix die Mail überhaupt annimmt (und dann weiterleitet), oder nicht. Das ist auch der Ansatzpunkt für Spamfilterung (da hast du durchaus noch Nachholbedarf).
Ich fasse deine jetzige Konfiguration mal zusammen.
Allgemeine Definitionen sind:
myhostname = pirgendeinenummer.pureserver.info
mydomain = hauptdomain.com
mydestination = $myhostname, localhost.$mydomain, $mydomain, smtp.$mydomain
mynetworks_style = host
local_recipient_maps = $alias_maps unix:passwd.byname
fast_flush_domains = $relay_domains
Und Erlaubnis zum Senden haben:
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions = hash:/etc/postfix/access
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_data_restrictions =
So ist deine (vervollständigte) Auflistung der Restriktionen.
Sie hat folgende Wirkung:
smtpd_client_restrictions - Basierend auf der sendenden IP-Adresse passiert: Garnichts.
smtpd_helo_restrictions - Basierend auf dem HELO-String passiert: Garnichts.
smtpd_sender_restrictions - basierend auf der Angabe MAIL FROM passiert: Müll. Deine Hash-Angabe ist hier falsch.
smtpd_recipient_restrictions - basierend auf der Empfänger-Mailadresse passiert: Erlaubnis wird erteilt, wenn der Sender sich mit SMTP-Auth angemeldet hat. Erlaubnis wird verweigert, wenn die Empfängeradresse bei dir nicht existiert.
smtpd_data_restrictions - basierend auf dem Inhalt der Mail passiert: nichts.
Summe:
Du darfst deinen Mailserver benutzen, wenn du dich mit SASL (SMTP-Auth) angemeldet hast, oder wenn die Zieladresse eine existierende deines Mailservers ist.
Soweit ich das verstanden habe, muß ich alle Domains, an die ich senden will, als Relay_domains eintragen, aber ich kann doch nicht wissen, an welche Domains ich jemals eine Mail schicken will, oder jedesmal die Domain eintragen.
Falsch verstanden! Um Gottes Willen!
Beschäftige dich mit SASL. Du hast einige Einträge dazu schon in deiner Konfig drin, das ist gut. Du mußt aber noch zu den einzelnen Benutzernamen Passworte anlegen.
Dazu sind die Kommandos saslpasswd und sasldblistusers gut.
Was die Konfiguration angeht:
Die Reihenfolge der smtpd_*_restrictions wird, wie oben gelistet, durchlaufen. Man kann sehr viele verschiedene Prüfoptionen an jede einzelne Stelle des Vorgangs hängen, und damit schon an einer frühen Stelle entscheiden, dass man die Mail nicht will.
Postfix kennt dazu drei Ergebnisse. Zuerst einmal "DUNNO" (ob die Mail angenommen wird, ist noch nicht entschieden), sowie "OK" (Mail annehmen) und "REJECT" (Mail ablehnen).
In der Reihenfolge der Auflistung werden jetzt nacheinander alle Optionen bei den smtpd_*_restrictions durchlaufen, solange die Mail DUNNO ist. Wenn eine Option zu einem REJECT oder OK führt, wird abgebrochen, und die Mail akzeptiert.
Es ist typischerweise so, dass alle Prüfungen in smtpd_recipient_restrictions stehen. Denn die Prüfungen können auch dort noch alle Parameter (Sender, Empfänger, einliefernde IP,...) abprüfen, das muß nicht vorher geschehen.
Meine Konfiguration in diesem Bereich:
smtpd_client_restriction =
Wer aus meinem eigenen Netzwerk kommt, darf
permit_mynetworks,
Eine Liste von IPs, die entweder explizit senden dürfen, oder auch explizit nicht (White/Blacklist)
check_client_access hash:/etc/postfix/client_access,
Die DNS-Blacklisteneinträge dürfen nicht senden - deshalb sind sie ja da drin.
reject_maps_rbl
smtpd_helo_restriction =
smtpd_sender_restrictions =
Wer Mail von nichtexistenten Domains sendet, will spammen oder hat es zu eilig.
reject_unknown_sender_domain,
Wer zu blöd ist, einen vollständigen Senderdomainnamen anzugeben, will spammen
reject_non_fqdn_sender
smtpd_recipient_restrictions =
Wer sich mit SMTP-Auth angemeldet hat, darf senden
permit_sasl_authenticated,
Wer lokale IPs hat, darf senden
permit_mynetworks,
Wer kaputte, unvollständige, unbekannte Hostnamen/Sendernamen/Empfängernamen hat, will spammen
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
Pipelining muß man anmelden
reject_unauth_pipelining,
Schon wieder?
permit_mynetworks,
Wenn die Mail nicht an ein Ziel geht, für die der Server zuständig ist, dann ablehnen
reject_unauth_destination,
Gewisse Mailadressen müssen ankommen nach RFC: postmaster, hostmaster, webmaster...
check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
Nochmal die White/Blacklist
check_client_access hash:/etc/postfix/client_access,
Wer in DNS-Blaclists drinsteht, darf nicht senden
reject_maps_rbl,
Geht die Mail an eine der Relay-Domains?
check_relay_domains
Übernimm diese Konfig nicht blind. Informiere dich, was die einzelnen Parameter machen.
Im Prinzip läßt sich dein Problem mit deiner _aktuellen_ main.cf lösen, indem du einfach SMTP-Auth konfigurierst und zum Einsatz bringst. Dabei könnte es sein, dass du deinen smtpd aus dem chroot-Gefängnis rauslassen mußt (das machst du in der master.cf), damit dieser die SASL-DB lesen kann, oder du kopierst diese in das chroot hinein (ich hab auf chroot verzichtet, war einfacher).
- Sven Rautenberg
Among the maxims on Lord Naoshige's wall, there was this one: "Matters of great concern should be treated lightly."
Master Ittei commented, "Matters of small concern should be treated seriously."
(Hagakure: The Way of the Samurai)