Postfix verwendet falsche IP Adressen beim Versenden

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?
 

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.
 

seraphim

New Member

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
Don’t forget to create ip aliasing for each ip address in smtp_bind_address
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:

Till

Administrator
versteh ich noch nicht ganz, die smtp_bind_address sind doch schon in der master.cf festgelegt :/

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.
 

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:
# 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
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

postconf -d | grep tls
smtp_enforce_tls = no
smtp_sasl_tls_security_options = $smtp_sasl_security_options
smtp_sasl_tls_verified_security_options = $smtp_sasl_tls_security_options
smtp_starttls_timeout = 300s
smtp_tls_CAfile =
smtp_tls_CApath =
smtp_tls_cert_file =
smtp_tls_dcert_file =
smtp_tls_dkey_file = $smtp_tls_dcert_file
smtp_tls_enforce_peername = yes
smtp_tls_exclude_ciphers =
smtp_tls_fingerprint_cert_match =
smtp_tls_fingerprint_digest = md5
smtp_tls_key_file = $smtp_tls_cert_file
smtp_tls_loglevel = 0
smtp_tls_mandatory_ciphers = medium
smtp_tls_mandatory_exclude_ciphers =
smtp_tls_mandatory_protocols = SSLv3, TLSv1
smtp_tls_note_starttls_offer = no
smtp_tls_per_site =
smtp_tls_policy_maps =
smtp_tls_scert_verifydepth = 9
smtp_tls_secure_cert_match = nexthop, dot-nexthop
smtp_tls_security_level =
smtp_tls_session_cache_database =
smtp_tls_session_cache_timeout = 3600s
smtp_tls_verify_cert_match = hostname
smtp_use_tls = no
smtpd_client_new_tls_session_rate_limit = 0
smtpd_enforce_tls = no
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_starttls_timeout = 300s
smtpd_tls_CAfile =
smtpd_tls_CApath =
smtpd_tls_always_issue_session_ids = yes
smtpd_tls_ask_ccert = no
smtpd_tls_auth_only = no
smtpd_tls_ccert_verifydepth = 9
smtpd_tls_cert_file =
smtpd_tls_dcert_file =
smtpd_tls_dh1024_param_file =
smtpd_tls_dh512_param_file =
smtpd_tls_dkey_file = $smtpd_tls_dcert_file
smtpd_tls_exclude_ciphers =
smtpd_tls_fingerprint_digest = md5
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_tls_loglevel = 0
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_exclude_ciphers =
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_received_header = no
smtpd_tls_req_ccert = no
smtpd_tls_security_level =
smtpd_tls_session_cache_database =
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_wrappermode = no
smtpd_use_tls = no
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?
 

Till

Administrator

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

postconf -n | grep tls

Ü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.

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
 

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.
 

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.
 

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.
 

miglosch

New Member
Noch mal zurück zum Thema...

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.

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:
 

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 = ::
 

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?
 

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:

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:

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?
 

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:

ramsys

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

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?
 

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:

Werbung

Top