On 10/15/20 10:45 PM, Andrey Lelikov wrote:
On 10/14/20 7:21 PM, Dominic Raferd wrote:


The X-Original-To header is normally added by the postfix delivery
agent (local, smtp, virtual etc). Are you sure it isn't being stripped
by something bespoke in your system?

Ok, I should have made myself more clear. Postfix obviously can add X-Original-To header and this header can be propagated to the delivery agent (dovecot). But. When it is set up the "regular" way, not with amavisd relaying the (filtered) mail.

With amavisd this logic is broken. Here is what happens:

A single mailbox [email protected] exist for the domain domain.xxx . I send the message to an address [email protected] .

Expected result - message is delivered to [email protected] with [email protected] .

Observed result - either on X-Original-To header or [email protected]


The lifetime of message:


1. Message is received by postfix smtpd process. cleanup receives message and sends it to amavisd.

Note: the postfix settingĀ enable_original_recipient is ignored at this point. The X-Original-To is not added to the message being sent to amavisd. Don't know why, could be part of content_filter logic

Oct 14 21:33:41 mail postfix/submission/smtpd[21036]: connect from unknown[5.181.209.236] Oct 14 21:33:41 mail postfix/submission/smtpd[21036]: Anonymous TLS connection established from unknown[5.181.209.236]: TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X255
19 server-signature RSA-PSS (2048 bits) server-digest SHA256
Oct 14 21:33:41 mail postfix/submission/smtpd[21036]: 4CBLdx20P9z3xGP: client=unknown[5.181.209.236], sasl_method=PLAIN, [email protected] Oct 14 21:33:41 mail postfix/cleanup[20982]: 4CBLdx20P9z3xGP: message-id=<[email protected]> Oct 14 21:33:41 mail postfix/qmgr[5574]: 4CBLdx20P9z3xGP: from=<[email protected]>, size=587, nrcpt=1 (queue active) Oct 14 21:33:41 mail postfix/submission/smtpd[21036]: disconnect from unknown[5.181.209.236] ehlo=2 starttls=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=8


2. amavisd gets the message. Te recipient is already [email protected] with original recipient passed as ORCPT=rfc822;[email protected]\r\n

Oct 14 21:33:41 mail amavis[21032]: Net::Server: 2020/10/14-21:33:41 CONNECT TCP Peer: "[127.0.0.1]:51998" Local: "[127.0.0.1]:10026" Oct 14 21:33:41 mail amavis[21032]: (21032-01) SMTP> 220 [127.0.0.1] ESMTP amavisd-new service ready Oct 14 21:33:41 mail amavis[21032]: (21032-01) SMTP< EHLO mail.lelik.us\r\n Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP> 250 2.1.0 Sender <[email protected]> OK Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP< RCPT TO:<[email protected]> ORCPT=rfc822;[email protected]\r\n Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP [127.0.0.1]:10026 /var/lib/amavis/tmp/amavis-20201014T213341-21032-JCBsztrH: <[email protected]> -> <[email protected]> Received: from mail.lelik.us ([127.0.0.1]) by mail.lelik.us (mail.lelik.us [127.0.0.1]) (amavisd-new, port 10026) with ESMTP for <[email protected]>; Wed, 14 Oct 2020 21:33:41 +0300 (MSK) Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP> 354 End data with <CR><LF>.<CR><LF>


3. amavisd does a lot of magic on message

Oct 14 21:33:41 mail amavis[21032]: (21032-01) sql: preparing and executing (11 args): INSERT INTO msgs (partition_tag, mail_id, secret_id, am_id, time_num, time_iso, sid, policy, client_addr, size, host) VALUES (?,?,?,?,?,?,?,?,?,?,?)
Oct 14 21:33:41 mail amavis[21032]: (21032-01) sql commit
Oct 14 21:33:41 mail amavis[21032]: (21032-01) Checking: 9PZLryXflv1x ORIGINATING [5.181.209.236] <[email protected]> -> <[email protected]> Oct 14 21:33:41 mail amavis[21032]: (21032-01) 2822.From: <[email protected]> Oct 14 21:33:41 mail amavis[21032]: (21032-01) headers CLUSTERING: NEW CLUSTER <[email protected]>: score=-1, tag=0, tag2=0, local=1, bl=, s=, mangle= Oct 14 21:33:41 mail amavis[21032]: (21032-01) header encoded (all-ASCII): X-Virus-Scanned: Debian amavisd-new at mail.lelik.us Oct 14 21:33:41 mail amavis[21032]: (21032-01) header: X-Virus-Scanned: Debian amavisd-new at mail.lelik.us\n Oct 14 21:33:41 mail amavis[21032]: (21032-01) header encoded (all-ASCII): Received: from mail.lelik.us ([127.0.0.1])\n by mail.lelik.us (mail.lelik.us [127.0.0.1]) (amavisd-new, port 10026)\n with ESMTP\n id 9PZLryXflv1x\n for <[email protected]>;\n Wed, 14 Oct 2020 21:33:41 +0300 (MSK) Oct 14 21:33:41 mail amavis[21032]: (21032-01) header: Received: from mail.lelik.us ([127.0.0.1])\n\tby mail.lelik.us (mail.lelik.us [127.0.0.1]) (amavisd-new, port 10026)\n\twith ESMTP id 9PZLryXflv1x for <[email protected]>;\n\tWed, 14 Oct 2020 21:33:41 +0300 (MSK)\n Oct 14 21:33:41 mail amavis[21032]: (21032-01) smtp session: setting up a new session Oct 14 21:33:41 mail amavis[21032]: (21032-01) new socket using IO::Socket::IP to [127.0.0.1]:10025, timeout 35


4. amavisd re-submits the message to postfix, to another smtpd process on port 10025 (filtered pickup) , to the same recipient and with the same ORCPT

Oct 14 21:33:41 mail postfix/10025/smtpd[20989]: connect from localhost[127.0.0.1] Oct 14 21:33:41 mail amavis[21032]: (21032-01) connected to [127.0.0.1]:10025 successfully Oct 14 21:33:41 mail amavis[21032]: (21032-01) rw_loop sent 102> MAIL FROM:<[email protected]> BODY=7BIT\r\nRCPT TO:<[email protected]> ORCPT=rfc822;[email protected]\r\nDATA\r\n Oct 14 21:33:41 mail postfix/qmgr[5574]: 4CBLdx69N3z40j7: from=<[email protected]>, size=1812, nrcpt=1 (queue active) Oct 14 21:33:41 mail postfix/10025/smtpd[20989]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP> 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 4CBLdx69N3z40j7 Oct 14 21:33:41 mail amavis[21032]: (21032-01) switch_to_client_time 480 s, smtp response sent Oct 14 21:33:41 mail amavis[21032]: (21032-01) rmdir_recursively: /var/lib/amavis/tmp/amavis-20201014T213341-21032-JCBsztrH/parts, excl=1 Oct 14 21:33:41 mail postfix/amavis/smtp[20987]: 4CBLdx20P9z3xGP: to=<[email protected]>, orig_to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.68, delays=0.07/0/0.04/0.58, 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 4CBLdx69N3z40j7)
Oct 14 21:33:41 mail postfix/qmgr[5574]: 4CBLdx20P9z3xGP: removed

This is where original envelope to information is lost forever. amavisd re-sends it as ORCPT=rfc822;[email protected] header, but postfix smtpd just ignores it. I do not know why (checked obvious things like DSN not being disabled). The cleanup and pipe get only regular "to" address.

5. postfix queues and submits it to dovecot. original_from is lost at this point.

Oct 14 21:33:41 mail postfix/qmgr[5574]: 4CBLdx69N3z40j7: from=<[email protected]>, size=1812, nrcpt=1 (queue active) Oct 14 21:33:41 mail postfix/10025/smtpd[20989]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 Oct 14 21:33:41 mail amavis[21032]: (21032-01) ESMTP> 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 4CBLdx69N3z40j7 Oct 14 21:33:41 mail amavis[21032]: (21032-01) switch_to_client_time 480 s, smtp response sent Oct 14 21:33:41 mail amavis[21032]: (21032-01) rmdir_recursively: /var/lib/amavis/tmp/amavis-20201014T213341-21032-JCBsztrH/parts, excl=1 Oct 14 21:33:41 mail , delay=0.68, delays=0.07/0/0.04/0.58, 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 4CBLdx69N3z40j7)
Oct 14 21:33:41 mail postfix/qmgr[5574]: 4CBLdx20P9z3xGP: removed
Oct 14 21:33:42 mail postfix/pipe[20990]: 4CBLdx69N3z40j7: to=<[email protected]>, relay=dovecot, delay=0.15, delays=0.01/0/0/0.14, dsn=2.0.0, status=sent (delivered via dovecot service)
Oct 14 21:33:42 mail postfix/qmgr[5574]: 4CBLdx69N3z40j7: removed

No way I'm going to read/hack postfix sources. I still see adding a header inside amavisd as the easiest fix. So, I'll repeat my question:

I'm using a debian system, and my understanding is that it is possible
to add a hook to amavis/conf.d/something that would modify actions
inside add_forwarding_header_edits_common without hacking original
script in /usr/sbin ?

Thanks!



Reply via email to