Manfred: Postfix - Relay access denied - Recipients could not be reached

Hallo,

in den letzten Wochen habe ich so ziemlich das halbe Internet umgegraben und zwischenzeitlich hats auch funktioniert, aber jetzt gehts wieder nicht mehr und ich werd noch wahnsinnig:

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:

--------------------------------------------------------------
Your message did not reach some or all of the intended recipients.

Subject: Das ist der Betreff blablabla
      Sent: 23.03.2004 07:56

The following recipient(s) could not be reached:

'empfaengername@gmx.net' on 23.03.2004 07:56
            554 empfaengername@gmx.net: Relay access denied
---------------------------------------------------------------

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.

Ich suche also eine Möglichkeit, daß ich Postfix so konfiguriere, daß ich an alle irgenwas@irgendwas.tdl verschicken kann, wenn ich über SMPT-Requires-Authentication oder POP-before-SMTP im Mailprogramm eine Mail versende. Dabei darf der Server aber auf keinen Fall ein Open Relay werden.

Könnt ihr mir einen Tipp geben, was ich dazu in der main.cf bzw. in anderen Postfix-Configs eintragen muß?

Viele Grüße
Manfred

Hier noch die main.cf:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/local/postfix
mail_owner = postfix
default_privs = autoresp
myhostname = pirgendeinenummer.pureserver.info
mydomain = hauptdomain.com
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, $mydomain, smtp.$mydomain
mynetworks_style = host
local_recipient_maps = $alias_maps unix:passwd.byname
in_flow_delay = 0
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
fast_flush_domains = $relay_domains
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
     PATH=/usr/bin:/usr/X11R6/bin
     xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
manpage_directory = /usr/local/man
sample_directory = /usr/local/conf/postfix-sample
readme_directory = /usr/local/postfix-readme
canonical_maps = hash:/etc/postfix/canonical
virtual_maps = hash:/etc/postfix/virtual
relocated_maps = hash:/etc/postfix/relocated
transport_maps = hash:/etc/postfix/transport
sender_canonical_maps = hash:/etc/postfix/sender_canonical
masquerade_exceptions = root
masquerade_classes = envelope_sender, header_sender, header_recipient
inet_interfaces = all
masquerade_domains = beispieldomain1.de, beispieldomain2.de
smtpd_sender_restrictions = hash:/etc/postfix/access
smtpd_client_restrictions =
strict_rfc821_envelopes = no
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = no
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/key.pem
smtpd_tls_cert_file = /etc/postfix/cert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

  1. Hi,

    um Gottes Willen!!!
    Du musst keine Domain als Relay-Domains eintragen!
    Also ich hab bei mir qmail laufen, weil ich das persönlich besser finde, aber das tut hier nichts zur Sache, ich hoffe nur, dass ich nicht zuviel vom der Config aus qmail hier einspeise...

    Folgendes zum Verständnis:
    In Relay-Domains stehen die Domains, für die du Emails relayen willst! Also ausschließlich DEINE. Andernfalls machst du ja ein Open-Relay und ebnest einen Weg für SPAM & Co.

    Schau mal in Deiner /etc/postfix/access, ob Du dort eingetragen bist. Der Eintrag erst erlaubt Dir das Senden von Emails via SMTP.

    Ganz nebenbei, die hast den Eintrag...

    inet_interfaces = all

    zweimal drinne, tut aber nichts zur Sache.

    Versuch´s doch mal, andernfalls müssen wir mal weitersehen :o)

    Gruss,
    Stefan

    1. Hallo,

      erstmal danke für deine schnelle Antwort.
      Ich habe jetzt in die Access-Datei zuerst

      meinedomain.de OK

      reingeschrieben und das dann mit

      postmap access

      kompiliert. Hat leider nicht funktioniert, habs dann mit

      meinedomain.de permit

      versucht und wieder kompiliert, funktioniert aber auch nicht. Habe ich da einen Denkfehler, ist die Syntax falsch oder stimmt vielleicht noch etwas anderes nicht?

      MfG
      Manfred

      1. Hmm, ich dachte die Kiste läuft schon fertig.
        Geht es denn um ein Problem beim Kompilieren oder um eines mit der Konfiguration??

        Ich vermute letzteres...

        Postfix unterscheidet ja zwei Dinge (analog zu qmail):
        1. An wen es EMails zustellt.
        2. Für wen es EMails sendet.

        1. bezieht sich dabei auf lokale Postfächer, d.h. Postfächer, für die auch auf Deinem System ein User eingerichtet ist...

        2. bezieht sich darauf, wer EMails senden darf, aber niemals darauf, an wen diese geht. Es ist immer erlaubt an ALLE zu senden, sofern der Server der anderen Seite dies nicht verbietet...

        Nun ist die Frage, an welcher Ecke es hängt.
        Ich vermute, dass du keine Emails senden kannst, d.h. Fall 2.
        Dazu hier dieser Link: http://www.postfix.org/basic.html#relaying

        Gruss Stefan

        1. hmm, stimmt, mein Problem ist wahrscheinlich, daß der Eintrag, _WER_ an alle senden darf nicht stimmt.. und genau das ("an alle beliebigen senden") geht ja auch nicht. Empfangen funktioniert und an lokal senden funktioniert auch.

          Jetzt ist nur noch die Frage in welche Datei ich was genau eintragen muß, damit ich festlegen _WER_ senden darf.

          Ich nehme mal an, daß das die Datei access ist.
          Und in die habe ich

          meinedomain.de permit

          reingeschrieben, was aber nicht funktioniert hat.
          Die Frage ist also, in welcher Datei der erlaubte Absender stehen muß und wie die Syntax ist.

          Mfg
          Manfred

          1. Hallo,

            hab den Fehler gefunden, Postfix war nicht mit SASL kompiliert.

            Danke,
            Manfred

  2. 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)