Problem mit address verification, virtual_aliases und mydestination hinter NAT

Vitali Quiering vitali at quiering.com
Fr Mär 15 16:06:42 CET 2019


Moin,

ich habe hier ein Problem dem ich noch nicht auf die Schliche kommen konnte. Vielleicht hat von euch ja jemand eine Idee.

Beschreibung meines Setups
Wir haben in einem RZ eine große Groupware als zentrale E-Mail Lösung mit sehr vielen Domains. Außerhalb des RZ betreiben wir eine Menge Mailserver mit klassischem Dovecot, Postfix, AMaViS Geraffel. Der Postfix setzt unter bestimmten Umständen den Transport in Richtung der Groupware was überwiegend Mails für schlagende Herzen sind. Auf den Mailservern selbst bleiben Mails liegen die bspw. maschinell abgeholt und verarbeitet werden.

Ich habe hierfür transport_maps genutzt.

mysql-transport-maps.cf
> SELECT COALESCE(
>   (
>         SELECT 'dovecot' FROM virtual_users
>         LEFT JOIN virtual_domains ON virtual_users.domain_id = virtual_domains.id
>         WHERE concat(virtual_users.user,'@',virtual_domains.name) = '%s' LIMIT 1 ),
>   (
>         SELECT 'smtp' FROM virtual_aliases
>         LEFT JOIN virtual_domains ON virtual_aliases.domain_id = virtual_domains.id
>         WHERE concat(virtual_aliases.source,'@',virtual_domains.name) = '%s' LIMIT 1),
>   (
>         SELECT 'local' FROM virtual_domains
>         WHERE 'localhost' = (SELECT SUBSTRING_INDEX('%s','@',-1)) LIMIT 1),
>   (
>         SELECT 'smtp:[ip.adresse.der.groupware]:25' FROM virtual_domains
>         WHERE name = (SELECT SUBSTRING_INDEX('%s','@',-1)) LIMIT 1),
>         'smtp') AS user;


Das funktionierte wunderbar, bis wir einige der externen Mailserver in unser RZ geholt haben.

Jetzt habe ich das Problem festgestellt, dass bei einem Alias smtp als transport verwendet wird. Eigenartigerweise wird mydestination nicht respektiert bzw. die virtual_domains. Es wird also, um die Adresse des Empfängers (Alias) zu überprüfen, eine SMTP Verbindung zu der öffentlichen IP des Mailserver hergestellt die dann wieder auf dem Mailserver selbst endet. Dies resultiert in der Meldung die wir alle lieben “greeted me with my own hostname”.

Auf den externen Mailserver und im RZ läuft die Version 3.1.8-0+deb9u1.

Log des fehlgeschlagenen Versuches bei dem Server im RZ
> Mar 15 15:28:53 mx-local postfix/postscreen[112663]: CONNECT from [ip.adresse.des.versenders]:38170 to [10.0.0.11]:25
> Mar 15 15:28:53 mx-local postfix/postscreen[112663]: PASS OLD [ip.adresse.des.versenders]:38170
> Mar 15 15:28:53 mx-local postfix/smtpd[112664]: connect from mx.example.com[ip.adresse.des.versenders]
> Mar 15 15:28:54 mx-local postfix/smtpd[112664]: 15B023FDF5: client=mx.example.com[ip.adresse.des.versenders]
> Mar 15 15:28:54 mx-local postfix/cleanup[112670]: 15B023FDF5: message-id=<8529D5D9-70FE-41A4-9187-A2259D35269A at example.com>
> Mar 15 15:28:55 mx-local postfix/qmgr[112638]: 15B023FDF5: from=<user1 at example.com>, size=2351, nrcpt=1 (queue active)
> Mar 15 15:28:55 mx-local postfix/postscreen[112663]: CONNECT from [10.0.0.1]:36536 to [10.0.0.11]:25
> Mar 15 15:28:55 mx-local postfix/smtpd[112664]: disconnect from mx.example.com[ip.adresse.des.versenders] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
> Mar 15 15:28:55 mx-local postfix/postscreen[112663]: PASS OLD [10.0.0.1]:36536
> Mar 15 15:28:55 mx-local postfix/smtpd[112664]: connect from unknown[10.0.0.1]
> Mar 15 15:28:55 mx-local postfix/smtp[112671]: warning: host mx.example.net[externe.ip.des.servers]:25 greeted me with my own hostname mx.example.net
> Mar 15 15:28:55 mx-local postfix/smtp[112671]: warning: host mx.example.net[externe.ip.des.servers]:25 replied to HELO/EHLO with my own hostname mx.example.net
> Mar 15 15:28:55 mx-local postfix/smtp[112671]: 15B023FDF5: to=<user2 at example.net>, relay=mx.example.net[externe.ip.des.servers]:25, delay=1.8, delays=1.7/0.01/0.13/0, dsn=5.4.6, status=bounced (mail for example.net loops back to myself)
> Mar 15 15:28:55 mx-local postfix/smtpd[112664]: disconnect from unknown[10.0.0.1] ehlo=1 quit=1 commands=2
> Mar 15 15:28:55 mx-local postfix/cleanup[112670]: C302F3FFDA: message-id=<20190315142855.C302F3FFDA at mx.example.net>
> Mar 15 15:28:55 mx-local postfix/qmgr[112638]: C302F3FFDA: from=<>, size=4707, nrcpt=1 (queue active)
> Mar 15 15:28:55 mx-local postfix/bounce[112676]: 15B023FDF5: sender non-delivery notification: C302F3FFDA
> Mar 15 15:28:55 mx-local postfix/qmgr[112638]: 15B023FDF5: removed
> Mar 15 15:28:56 mx-local postfix/smtp[112671]: C302F3FFDA: to=<user1 at example.com>, relay=mx.example.com[ip.adresse.des.versenders]:25, delay=0.22, delays=0.01/0/0.14/0.08, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as E9ABCD840A5)
> Mar 15 15:28:56 mx-local postfix/qmgr[112638]: C302F3FFDA: removed


Log des erfolgreichen Versuches bei dem Server außerhalb des RZ
> Mar 15 15:46:05 mx postfix/postscreen[27628]: CONNECT from [ip.adresse.des.versenders]:37494 to [ip.adresse.des.empfaengers]:25
> Mar 15 15:46:05 mx postfix/postscreen[27628]: PASS OLD [ip.adresse.des.versenders]:37494
> Mar 15 15:46:05 mx postfix/smtpd[27629]: connect from mx.example.com[ip.adresse.des.versenders]
> Mar 15 15:46:05 mx postfix/smtpd[27629]: 9F28D5F824: client=mx.example.com[ip.adresse.des.versenders]
> Mar 15 15:46:05 mx postfix/cleanup[27634]: 9F28D5F824: message-id=<D5793ECA-36A4-43BA-B036-4C699EDAF278 at example.com>
> Mar 15 15:46:05 mx postfix/qmgr[22574]: 9F28D5F824: from=<user1 at example.com>, size=2390, nrcpt=1 (queue active)
> Mar 15 15:46:05 mx postfix/smtpd[27629]: disconnect from mx.example.com[ip.adresse.des.versenders] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
> Mar 15 15:46:05 mx postfix/smtpd[27638]: connect from localhost[127.0.0.1]
> Mar 15 15:46:05 mx postfix/smtpd[27638]: B5D675F83B: client=localhost[127.0.0.1]
> Mar 15 15:46:05 mx postfix/cleanup[27634]: B5D675F83B: message-id=<D5793ECA-36A4-43BA-B036-4C699EDAF278 at example.com>
> Mar 15 15:46:05 mx postfix/qmgr[22574]: B5D675F83B: from=<user1 at example.com>, size=1497, nrcpt=1 (queue active)
> Mar 15 15:46:05 mx postfix/smtpd[27638]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
> Mar 15 15:46:05 mx amavis[28645]: (28645-20) Passed CLEAN {RelayedOpenRelay}, [ip.adresse.des.versenders]:37494 [ip.adresse.des.versenders] <user1 at example.com> -> <alias1 at example.org>, Queue-ID: 9F28D5F824, Message-ID: <D5793ECA-36A4-43BA-B036-4C699EDAF278 at example.com>, mail_id: AEkFq9VYyvTL, Hits: -, size: 1226, queued_as: B5D675F83B, 78 ms
> Mar 15 15:46:05 mx postfix/smtp[27635]: 9F28D5F824: to=<alias1 at example.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.11, delays=0.03/0/0/0.08, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as B5D675F83B)
> Mar 15 15:46:05 mx postfix/qmgr[22574]: 9F28D5F824: removed
> Mar 15 15:46:05 mx postfix/smtp[27639]: B5D675F83B: to=<user2 at alias.example.org>, orig_to=<alias1 at example.org>, relay=alias.example.org[ip.ip.ip.ip]:25, delay=0.1, delays=0.01/0/0.07/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as CAEA45F87A)
> Mar 15 15:46:05 mx postfix/qmgr[22574]: B5D675F83B: removed


Zu guter Letzt noch meine postconf
> address_verify_sender = double-bounce at mx.example.net
> alias_database = hash:/etc/aliases
> alias_maps = hash:/etc/aliases
> amavisd_milter = inet:10.0.1.10:8899
> append_dot_mydomain = no
> biff = no
> bounce_queue_lifetime = 3d
> broken_sasl_auth_clients = yes
> disable_vrfy_command = yes
> dovecot_destination_recipient_limit = 1
> inet_interfaces = all
> inet_protocols = ipv4
> local_destination_concurrency_limit = 20
> mailbox_size_limit = 0
> maximal_queue_lifetime = 3d
> message_size_limit = 500000000
> milter_default_action = accept
> milter_protocol = 2
> mydestination = $myhostname, localhost.$mydomain, localhost
> myhostname = mx.example.net
> mynetworks = 127.0.0.0/8 10.0.2.10 10.0.2.1 10.0.2.2 10.0.2.3 10.0.2.4
> myorigin = /etc/mailname
> non_smtpd_milters = inet:localhost:8891
> postscreen_access_list = permit_mynetworks
> postscreen_dnsbl_action = enforce
> postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org*2 bl.spamcop.net spam.dnsbl.sorbs.net=127.0.0.6
> postscreen_dnsbl_threshold = 3
> postscreen_greet_action = enforce
> readme_directory = no
> receive_override_options = no_address_mappings
> recipient_delimiter = +
> relayhost =
> smtp_header_checks = pcre:/etc/postfix/anonymize_headers.pcre
> smtp_mime_header_checks = pcre:/etc/postfix/anonymize_headers.pcre
> smtp_tls_security_level = may
> smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
> smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
> smtpd_client_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_pipelining reject_rbl_client bl.spamcop.net
> smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access.cidr
> smtpd_enforce_tls = yes
> smtpd_milters = inet:localhost:8891
> smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unknown_recipient_domain,reject_unverified_recipient
> smtpd_sasl_auth_enable = yes
> smtpd_sasl_authenticated_header = yes
> smtpd_sasl_path = private/auth
> smtpd_sasl_type = dovecot
> smtpd_tls_auth_only = yes
> smtpd_tls_cert_file = /etc/letsencrypt/live/mx.example.net/fullchain.pem
> smtpd_tls_key_file = /etc/letsencrypt/live/mx.example.net/privkey.pem
> smtpd_tls_mandatory_ciphers = high
> smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 , RC4
> smtpd_tls_mandatory_protocols = SSLv3, TLSv1
> smtpd_tls_security_level = may
> smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
> transport_maps = mysql:/etc/postfix/mysql-transport-maps.cf
> unverified_recipient_reject_code = 550
> unverified_recipient_reject_reason = 'Recipient address rejected'
> virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
> virtual_gid_maps = static:5000
> virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
> virtual_uid_maps = static:5000


Meine Fragen
1. Warum wird überhaupt eine smtp Verbindung aufgebaut, wenn ich die Domain doch in den virtual_domains definiert habe?
2. Warum verhält sich Postfix korrekt, wenn die externe IP dem System bekannt ist?
3. Wie kann ich virtual_aliases wieder korrekt nutzen?

Vielen Dank für alle die bis hier gelesen haben und vorab auch vielen Dank für eure Hilfe.

Vitali
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20190315/222c7f50/attachment-0001.html>


Mehr Informationen über die Mailingliste Postfixbuch-users