Postfix verwendet falsche IP Adressen beim Versenden

Dieses Thema im Forum "Installation und Konfiguration" wurde erstellt von seraphim, 20. Juli 2011.

  1. seraphim

    seraphim New Member

    Hallo
    ich hab nen Debian Lenny mit Dovecot und BIND nach Anleitung aufgesetzt und nun das Problem, dass Postfix die falsche IP nimmt um EMails abzusenden.
    Ich habe 10 IP Adressen zu meinem Server und für jede von denen ist eine Domain aktiv. Das Problem ist nun, dass Postfix eine beliebige IP für das Versenden nutzt, wodurch dann der RDNS auf die IP nicht mit dem Hostnamen in der Absender Mail Adresse überein stimmt. Anbieter wie AOL und auch einige andere verweigern bei falschen rDNS Einträgen die Annahme, was für mich dann ein Problem darstellt.

    Wie kann ich Postfix dazu bringen die IP passend zum Hostnamen des Absenders aus der hosts Datei zu verwenden?
     
  2. Till

    Till Administrator

    Postfix versendet normalerweise nur über eine IP Adresse. Das sollte die des Hostnamns des Servers sein (wg. rdns / spam), der Absender spielt dabei keine Rolle. Wenn mehrere IP-Adressen auf die Netzwerkkarte gebunden sind, dann setzt Du mit:

    smtpd_bind_address = 123.123.123.123

    die IP Adresse in der Postfix main.cf, die dem Hostnamen des Servers entspricht und die auch als rdns gesetzt sein sollte.
     
  3. seraphim

    seraphim New Member

    Postfix Bind Sender Domain To Dedicated Outgoing IP Address » KutuKupret
    Die Anleitung habe ich grad befolgt jedoch keinen Erfolg gehabt. Postfix meckert auch nicht beim restart, aber die IP ist immer noch falsch...

    Den letzten Schritt mit den
    versteh ich noch nicht ganz, die smtp_bind_address sind doch schon in der master.cf festgelegt :/
     
  4. seraphim

    seraphim New Member

    Postfix Bind Sender Domain To Dedicated Outgoing IP Address » KutuKupret
    Die Anleitung habe ich grad befolgt jedoch keinen Erfolg gehabt. Postfix meckert auch nicht beim restart, aber die IP ist immer noch falsch...

    Den letzten Schritt mit den
    versteh ich noch nicht ganz, die smtp_bind_address sind doch schon in der master.cf festgelegt :/

    //Edit: sry für Doppelpost bitte ersten löschen

    Hab das mit dem Regex nun hinbekommen, weiß nun auch warum es nicht funzt: in den Debian Lenny Repos is 2.5.5 die aktuelle Version, unterstützt wird das ganze aber ers ab 2.7... und 2.8 is die aktuelle stable...
     
    Zuletzt bearbeitet: 20. Juli 2011
  5. Till

    Till Administrator

    Du musst sie in der main.cf festlegen, nicht der master.cf

    Solch ein setup wie in dem Tutorila beschrieben ist nicht üblich und macht Dir unter umständen mehr Probleme als es hilft. Ändere die Einstellungen bitte mal so wie ich es Dir gesagt habe, denn das ist das übliche Setup für hosting Server und Deine Sendeprobleme sind damit behoben.
     
  6. seraphim

    seraphim New Member

    Hab alles aus dem tutorial rückgängig gemacht, funktioniert aber nicht (ja ich habe Postfix neu gestartet).

    Was mich aber ebenfalls irritiert:
    main.cf:
    postconf -d | grep tls
    Woran liegt das?

    Übrigends ist mir aufgefallen, dass ich via telnet zwar nicht als open Relay zur Verfügung stehe (was ja auch gut ist), jedoch ich ohne Probleme als Absenderadresse eine nicht existierende xyz@meinedomain.net EMail Adresse verwenden kann um EMails an lokale Empfänger zu senden. Da mein Setup bisher ein Standardsetup war und ich alles wieder in den Urzustand gebracht habe könnte es sein, dass dies eine Lücke ist die einer Schließung bedarf.

    Sys: Debian Lenny
    ISPConfig 3.0.3.3

    Die Sache mit der absendenden IP lasse ich für das erste ruhen, dazu müsste ich Postfix komplett erst auf 2.8 bringen wozu mir grad der Nerv fehlt.
    AOL nimmt inzwischen meine EMails an, lag daran dass die absendende IP gar keinen rDNS Eintrag hatte.

    Dennoch: Wie kann ich die obige Lücke schließen?
     
  7. Till

    Till Administrator

    Du verwendest den falschen Befehl zum abfragen der Postfix Configuration. Der korrekte Befehl ist:

    postconf -n | grep tls

    Das ist keine Lücke sondern ganz normal bei SMTP. Lies Dir mal die RFC's durch. Bei email ist es wie die normale Post auch, da kann man beliebige Absender drauf schreiben, der "Briefkasten" kontrolliert das nicht.

    Wenn Du bei Postfix strnege Checks einstellen willst, kannst Du unter anderem diese Optionen in dre recipient_restrictions einfügen:

    reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_recipient_domain,reject_non_fqdn_recipient,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_unknown_recipient_domain

    Siehe auch:

    http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions

    Und dann kannst Du auch noch sender restrictions einrichten:

    http://www.postfix.org/postconf.5.html#smtpd_sender_restrictions
     
  8. seraphim

    seraphim New Member

    Und wie kann ich eine Identifizierung gegenüber dem Postfix erzwingen? Mit der wäre diese Möglichkeit ja ausgeschlossen da keiner mehr ohne Mail Account auf dem System generell Mails versenden könnte.
     
  9. Till

    Till Administrator

    Es kann niemand ohne mail account über das System mails verschicken (stichwort open relay). Das ist immer standardmäßig so konfiguriert, du hast es daher wahrscheinlich nur falsch getestet. Wenn Du dieses feature testen willst, musst Du dich mit einem externen mailclient mit dem Server verbinden (nicht webmail und nicht aus dem lokalen netz, falls Dein Server in einem privaten lokalen Netz steht) und dann eine email an eine externe Emailadresse versenden (z.b. einen gmail account). dann woird der server diesen Versuch unterbinden, wenn Du Dich nicht vorher per smtp-auth mit Benutzername und Passwort authentifiziert hast.
     
  10. seraphim

    seraphim New Member

    Ich glaub du verstehst nit was ich meine, ich rede nicht vom Dasein als open relay sondern von folgendem Szenario:
    ich (über Internet) -> telnet auf port 25
    ich gebe als absender eine adresse xyz@domain.net an, domain.net gehört zu dem Server
    ich gebe als ziel root@domain.net an, mail wird an root@domain.net gesendet. Als Absender wird xyz@domain.net anzeigt -> eine unechte Absenderadresse kann ohne jedes Hindernis unter beliebigem Präfix EMails an lokale Empfänger senden.
     
  11. Till

    Till Administrator

    Antwort siehe Post #7 in diesem Thread.
     
  12. miglosch

    miglosch New Member

    Noch mal zurück zum Thema...

    Ich habe im Moment ein massives Problem mit nicht zugestellten Mails, weil die PTR Einträge für zwei meiner drei IPs nicht existieren.

    Postfix scheint sich trotz festgelegter IP via smtpd_bind_address = 123.123.123.123 einfach irgendeine IP für den Versand zu schnappen.

    Ich habe die Zeile
    Code:
    -o smtpd_bind_address=94.102.209.252
    in der master.cf eingetragen, mal sehen, ob das einen Effekt hat. :confused:
     
  13. Brainfood

    Brainfood Member

    in der /etc/postfix/master.cf gilt:

    Code:
    127.0.0.1:10025 inet n - - - - smtpd
            -o content_filter=
            -o local_recipient_maps=
            -o relay_recipient_maps=
            -o smtpd_restriction_classes=
            -o smtpd_client_restrictions=
            -o smtpd_helo_restrictions=
            -o smtpd_sender_restrictions=
            -o smtpd_recipient_restrictions=permit_mynetworks,reject
            -o mynetworks=127.0.0.0/8
            -o strict_rfc821_envelopes=yes
            -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
            [B]-o smtpd_bind_address=127.0.0.1[/B]
    
    in der /etc/postfix/main.cf

    kommt nicht smtpd_ sondern smtp_ rein

    Code:
    smtp_bind_address = xxx.xxx.xxx.xxx
    smtp_bind_address6 = ::
    
     
  14. miglosch

    miglosch New Member

    Danke... (neues Problem...)

    Hallo und vielen Dank für die Antwort.

    Im ersten Moment konnte ich mit der Antwort nichts anfangen, aber wer (genau) lesen kann ist bekanntlich im Vorteil... ;)
    Die Einträge in der main.cf und der Master.cf sind entsprechend angepasst, nur habe ich inzwischen ein anderes Problem...

    Im mail.warn tauchen folgende Einträge auf:
    Code:
    Apr 23 17:07:07 ispc amavis[17083]: (!)DENIED ACCESS from IP XXX.XXX.XXX.XXX, policy bank ''
    leider habe ich bislang nichts gefunden, was mir wirklich weiterhilft. Ein Ansatz aus dem englischsprachigen HOWTOFORGE erwähnt, dass man die Server-IP in der main.cf mit
    Code:
    -o mynetworks=[external_ip]
    eintragen kann, dafür dann aber andere nette Fehlermeldungen im Log findet.

    Dieser Eintrag spricht sogar davon, dass man scheinbar keine Mails mehr versenden kann, wenn man die in der main.cf eine IP auf SMTP bindet...
    Kann ja nicht sein, oder?
     
  15. Brainfood

    Brainfood Member

    Einmal zu Verständnis:

    smtp = definiert den Client/Server Modus (dient nur für den Verkehr zwischen Mailservern)
    smtpd = (daemon) definiert den Server Modus (für Enduser)

    Mailsender (smtp) (beliebiger Quellport) -> Mailserver1 (smtpd) (25/465/587) = Mailserver1 (smtp) (25) <- Weiterleitung -> Mailserver2 (smtp) (25) => lokales Postfach => POP3/IMAP (Mailempfänger) (110/143/993/995)

    Beim smtpd definierst du alle möglichen Arten der Authentifizierung, z.b. Mailsender muss sich anmelden (SMTP-AUTH), kann verschlüsselte Leitungen benutzen (SMTPS/Submission 465/587 mit SSL/TLS) usw ...

    Beim smtp (Client/Server-Modus) entfallt das Ganze, was auch logisch ist, denn sonst müsste dein Mailserver per "Account" auf sämtlichen Fremd-Mailservern eingerichtet/autorisiert werden um Mails zustellen zu können.

    schau ich meine /etc/postfix/main.cf mal durch, springen mir diese Einträge ins Auge:

    Code:
    smtpd_banner = $myhostname ESMTP
    # TLS parameters
    smtpd_tls_cert_file = /etc/postfix/smtpd.cert
    smtpd_tls_key_file = /etc/postfix/smtpd.key
    smtpd_use_tls = yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtpd_sasl_auth_enable = yes
    broken_sasl_auth_clients = yes
    smtpd_sasl_authenticated_header = yes
    ### ### ### PLITC ### ### ###
    smtpd_recipient_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf,
            reject_unauth_destination,
            reject_invalid_hostname,
            reject_non_fqdn_sender,
            reject_non_fqdn_recipient,
            reject_unknown_sender_domain,
            reject_unknown_recipient_domain,
    	reject_unverified_recipient,
            reject_rbl_client dnsbl.ahbl.org,
            reject_rbl_client cbl.abuseat.org,
            reject_rbl_client dul.dnsbl.sorbs.net,
            reject_rbl_client bl.spamcop.net,
            reject_rbl_client zen.spamhaus.org
    ###
    ### ### ### PLITC ### ### ###
    smtpd_tls_security_level = may
    smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
    smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
    smtpd_client_message_rate_limit = 100
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    #
    smtpd_tls_exclude_ciphers = SSLv2, aNULL, ADH, eNULL
    #
    smtpd_tls_ciphers = high
    #
    strict_rfc821_envelopes = yes
    #
    smtpd_helo_required = yes
    smtpd_helo_restrictions = reject_invalid_hostname
    dagegen die smtp (Client/Server Modus) Einträge:

    Code:
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    smtp_bind_address6 = 2a01:XXXX:XXXX:XXXX::10
    smtp_helo_name = $myhostname
    Um deinen Mailserver also nicht unbrauchbar zu machen, sollten niemals solche Einträge wie:

    Code:
    #
    # smtp_use_tls = yes
    # smtp_enforce_tls = yes
    # smtp_tls_enforce_peername = no
    #
    aktiv sein ;)

    Mit smtp_bind_address bzw smtp_bind_address6 legt du fest, unter welcher Absender-IP deine Mails verschickt werden. (smtp Client/Server Modus)

    Meine Kisten haben jeweils immer nur 1 IPv4 Adresse, jedoch mehrere IPv6 Adressen, damit nun nicht wahllos per "Zufall" über irgendeine IPv6 Adresse die Daten verschickt werden, kannst du den Client/Server-Modus darauf binden.

    Schließlich möchte man nicht zwangsläufig "vielen" IPv6 Adressen den selben PTR / ReverseDNS Namen geben.

    Vergisst man smtp_bind_address/smtp_bind_address6 zu setzen, kann schnell der eigene Mailserver auf Blacklisten laden - siehe RFC 2544

    127.0.0.1 (localhost) dient nur für die Zwischenschichten (AMAVIS/ClamAV) Viren-Check/Spam-Filter und Konsorten ...

    Mit mynetworks erlaubst du Mailsendern, auch ohne smtpd Kriterien, den direkten Verstand von Mails.

    Packst du also deine "öffentliche" IP Adresse rein, könnte ein Angreifer mit gehacktem Webaccount ein Script laufen lassen, was deine externe Schnittstelle aufgreift und SPAM verschleudert.

    Das selbe gilt für jeglichen Traffic von diesen freigeschalteten IPs, sprich Port-Forwarding per rinetd usw.

    mynetworks ist wirklich mit Vorsicht zu genießen und sollte nur von glaubwürdigen Client-IPs verwendet werden.

    Da ich unteranderem Sun Server verwende und die "stinkendalten" ALOM/ILOM Versionen kein SMTP-AUTH unterstützen, wurden diese per mynetworks freigeschaltet.

    Nach dem ISPConfig Perfect Setup läuft der ganze Mailverkehr nur über Port 25, es bedarf also etwas nachträglicher Handarbeit um Postfix über 465/587 den Clients anbieten zu können (erste Anhaltspunkte habe ich dir mit den oben genannten Config-Einträgen gegeben)

    Viele Provider/Internetcafés etc. blockieren aus Prinzip den Traffic über Port SMTP 25 und wünschen einfach den SMTP-AUTH Zwang unter 465/587 (sofern der Ziel-Mailserver dafür fit ist :D )
     
    Zuletzt bearbeitet: 6. Mai 2013
  16. Brainfood

    Brainfood Member

    vi /etc/postfix/master.cf

    Code:
    # ==========================================================================
    smtp      inet  n       -       -       -       -       smtpd
    ### ### ### PLITC ### ### ###
    submission inet n       -       -       -       -       smtpd
      -o syslog_name=postfix/submission
      -o smtpd_tls_security_level=encrypt
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    #  -o milter_macro_daemon_name=ORIGINATING
    smtps     inet  n       -       -       -       -       smtpd
      -o syslog_name=postfix/smtps
      -o smtpd_tls_wrappermode=yes
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    #  -o milter_macro_daemon_name=ORIGINATING
    ### ### ### PLITC ### ### ###
    #
    pickup
    
    ...
    
    amavis unix - - - - 2 smtp
            -o smtp_data_done_timeout=1200
            -o smtp_send_xforward_command=yes
    
    127.0.0.1:10025 inet n - - - - smtpd
            -o content_filter=
            -o local_recipient_maps=
            -o relay_recipient_maps=
            -o smtpd_restriction_classes=
            -o smtpd_client_restrictions=
            -o smtpd_helo_restrictions=
            -o smtpd_sender_restrictions=
            -o smtpd_recipient_restrictions=permit_mynetworks,reject
            -o mynetworks=127.0.0.0/8
            -o strict_rfc821_envelopes=yes
            -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
            -o smtpd_bind_address=127.0.0.1
    Port TCP 465/587 per ISPConfig Firewall freischalten.

    Ein paar Konfig-Tipps findet du auch bei mir unter: Mini-HowTos
     
    Zuletzt bearbeitet: 6. Mai 2013
  17. ramsys

    ramsys Member

    Man kann ja im Multiserver-Setup direkt bei der Installation von Postfix die Verwendung eines SMTP-Relay angeben (Internet mit Smarthost/Satellite System) oder die Standard-Installation auswählen (Internet Site) und später im ISPConfig3 einen Relayhost mit Benutzer und Passwort eintragen.

    Was sind hier genau die Unterschiede bzw. gibt es eine empfohlene Vorgehensweise?
     
  18. Brainfood

    Brainfood Member

    Bei der "reinen" Postfix-Installation (apt-get install postfix) immer Internet Site verwenden.

    Die ISPConfig3 Installation überschreibt sowieso die /etc/postfix/main.cf

    Nach erfolgreichem ISPConfig Setup solltest du eigentlich -> dann "ausschließlich" nur die Einstellungen per Interface abändern.

    ... manuelle Anpassungen sind Geschmackssache ...

    Persönlich fummel ich mir manuell immer recht viel die Configs zurecht (musst in jedem Multi-Server-Setup dann immer, bei einem ISPConfig3 Update/grade, ein Backup ... der zuvor geänderten Inhalte ... im Petto haben)
     
    Zuletzt bearbeitet: 13. Mai 2013
  19. ramsys

    ramsys Member

    Okay, vielen Dank. Ich hatte das hier Forum aber auch schon anders gelesen, daher nochmal die Rückfrage.

    Wenn ich in ISPConfig3 -> Serverkonfiguration den Relayhost angebe, muss dieses Postfach auf dem Mailserver ja angelegt sein. Bei der direkten Eingabe der IP in den Configfiles benötigt es keine Authentifizierung. Dann wäre das der wesentliche Unterschied?
     
  20. Brainfood

    Brainfood Member

    Genau

    Als Beispiel 1:

    Code:
    relayhost = auth.smtp.hauptserver.de
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
    smtp_sasl_security_options = noanonymous
    Der RelayHOST (hauptserver.de) wird über die SASL AUTH gefahren ...

    Du kannst natürlich auch ein externes / "offenes" Relay benutzen:

    Beispiel2:

    Code:
    (Server2)
    smtpd_banner = mx2
    relayhost = mx1
    
    (Server1)
    hat SMTP_AUTH an, aber die IP von mx2 als mynetworks=(IP von mx2) eingetragen
    Im Bespiel 2 muss also kein Postfach mit aktivem AUTH gegen SASL/MAPS/Dovecot etc. authentifiziert werden ...
     
    Zuletzt bearbeitet: 13. Mai 2013

Diese Seite empfehlen