Well, from reading the subject I feel I made an obvious mistake and I
lost something when I read the documentation. I asked many people and
tried ServerFault to no avail and I'm tired of banging my head against
the wall.

I'm trying to set up a very low traffic postfix mail server using:

- A Simple content filter
(http://www.postfix.org/FILTER_README.html#simple_filter). It's way
simpler than the advanced one and the traffic is low.
- dovecot as a delivery agent. (Because of maildir quotas and sieve filters)
- `always_bcc` to keep copies of every mail sent. (Bussiness rules)

My relevant configs are:

master.cf
----------

    smtp      inet  n       -       y       -       -       smtpd
            -o content_filter=filter:dummy
    pickup    unix  n       -       y       60      1       pickup
    cleanup   unix  n       -       y       -       0       cleanup
    qmgr      unix  n       -       n       300     1       qmgr
    tlsmgr    unix  -       -       y       1000?   1       tlsmgr
    rewrite   unix  -       -       y       -       -       trivial-rewrite
    bounce    unix  -       -       y       -       0       bounce
    defer     unix  -       -       y       -       0       bounce
    trace     unix  -       -       y       -       0       bounce
    verify    unix  -       -       y       -       1       verify
    flush     unix  n       -       y       1000?   0       flush
    proxymap  unix  -       -       n       -       -       proxymap
    proxywrite unix -       -       n       -       1       proxymap
    smtp      unix  -       -       y       -       -       smtp
    relay     unix  -       -       y       -       -       smtp
            -o syslog_name=postfix/$service_name
    showq     unix  n       -       y       -       -       showq
    error     unix  -       -       y       -       -       error
    retry     unix  -       -       y       -       -       error
    discard   unix  -       -       y       -       -       discard
    local     unix  -       n       n       -       -       local
    virtual   unix  -       n       n       -       -       virtual
    lmtp      unix  -       -       y       -       -       lmtp
    anvil     unix  -       -       y       -       1       anvil
    scache    unix  -       -       y       -       1       scache
    postlog   unix-dgram n  -       n       -       1       postlogd
    uucp      unix  -       n       n       -       -       pipe
      flags=Fqhu user=uucp argv=uux -r -n -z -a$sender -
$nexthop!rmail ($recipient)
    filter    unix  -       n       n       -       10      pipe
      flags=Rq user=filter null_sender=
      argv=/var/spool/filter/scripts/filter.sh -f ${sender} -- ${recipient}
    dovecot    unix  -       n       n       -       -       pipe
      flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -f
${sender} -d ${recipient}


----------

main.cf (relevant parts only)
----------

    always_bcc = seccopies@mydomain.example
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1

----------

/var/spool/filter/scripts/filter.sh
----------

    #!/bin/sh

    /usr/bin/cat | /var/spool/filter/scripts/mailfilter |
/usr/sbin/sendmail -G -i "$@"

    exit $?

----------

- All my users have emails in "(Initial).surname@mydomain.example" format
- There are security groups that act as roles and each one has emails
in "role@mydomain.example" format.
- Basically, a role email function as an alias to several users.

So, I can reuse the same Roles/Groups I use to set permissions, and
not using the users directly.

For example
- my user email is y.hernandez@mydomain.example
- I'm a member of role I.T.Department (informatics@mydomain.example)
- I'm a member of some other roles, but my main role is "I.T.Department"
- Because I'm a member of this group/role I have certain privileges,
as the other members and every mail sent to
informatics@mydomain.example will reach me and the other members.

So far, so good... But my boss wants that every mail I send uses the
informatics@mydomain.example (role) address instead of
y.hernandez@mydomain.example (user). i.e., that every mail sent uses
the principal role email, not the user email.

`/var/spool/filter/scripts/mailfilter` is an in-house made filter that
just does that (changes "from" addresses from "(Initial).surname@" to
"role@" checking an LDAP server).

It never fails (In case of any error condition, it just copies
standard input into standard output and no modification is made, so no
address change, but the mail is not lost).

The problem is, when I send an email, it delivers two copies to
seccopies@mydomain.example as seen in the logs, not one copy as
expected.

----------

    Dec 16 16:23:08 correo2 postfix/smtpd[32453]: connect from
informatica1.mydomain.example[10.128.159.15]
    Dec 16 16:23:08 correo2 postfix/smtpd[32453]: DD925380C87:
client=informatica1.mydomain.example[10.128.159.15],
sasl_method=LOGIN, sasl_username=y.hernandez@mydomain.example
    Dec 16 16:23:08 correo2 postfix/cleanup[32456]: DD925380C87:
message-id=<002401d91194$982edba0$c88c92e0$@mydomain.example>
    Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87:
from=<y.hernandez@mydomain.example>, size=2749, nrcpt=2 (queue active)
    Dec 16 16:23:09 correo2 postfix/pickup[32274]: AAFEF380C8D:
uid=110 from=<y.hernandez@mydomain.example>
    Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87:
to=<seccopies@mydomain.example>, relay=filter, delay=0.81,
delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter
service)
    Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87:
to=<y.hernandez@mydomain.example>,
orig_to=<informatics@mydomain.example>, relay=filter, delay=0.81,
delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter
service)
    Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: removed
    Dec 16 16:23:09 correo2 postfix/cleanup[32456]: AAFEF380C8D:
message-id=<002401d91194$982edba0$c88c92e0$@mydomain.example>
    Dec 16 16:23:09 correo2 postfix/qmgr[32275]: AAFEF380C8D:
from=<y.hernandez@mydomain.example>, size=2927, nrcpt=3 (queue active)
    Dec 16 16:23:10 correo2 dovecot:
lda(seccopies@mydomain.example)<32488><2DSfML3hnGPofgAA0V72BQ>:
msgid=<002401d91194$982edba0$c88c92e0$@mydomain.example>: saved mail
to INBOX
    Dec 16 16:23:10 correo2 postfix/pipe[32473]: AAFEF380C8D:
to=<seccopies@mydomain.example>, relay=dovecot, delay=1.1,
delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot
service)
    Dec 16 16:23:10 correo2 dovecot:
lda(seccopies@mydomain.example)<32490><Au2fML3hnGPqfgAA0V72BQ>:
msgid=<002401d91194$982edba0$c88c92e0$@mydomain.example>: saved mail
to INBOX
    Dec 16 16:23:10 correo2 postfix/pipe[32471]: AAFEF380C8D:
to=<seccopies@mydomain.example>, relay=dovecot, delay=1.1,
delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot
service)
    Dec 16 16:23:10 correo2 dovecot:
lda(y.hernandez@mydomain.example)<32489><BE2gML3hnGPpfgAA0V72BQ>:
msgid=<002401d91194$982edba0$c88c92e0$@mydomain.example>: saved mail
to INBOX
    Dec 16 16:23:10 correo2 postfix/pipe[32470]: AAFEF380C8D:
to=<y.hernandez@mydomain.example>, relay=dovecot, delay=1.1,
delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot
service)
    Dec 16 16:23:10 correo2 postfix/qmgr[32275]: AAFEF380C8D: removed
    Dec 16 16:23:11 correo2 postfix/smtpd[32453]: disconnect from
informatica1.mydomain.example[10.128.159.15] ehlo=1 auth=1 mail=1
rcpt=1 data=1 quit=1 commands=6

----------

uid=110 is "filter" user uid. "From" is only changed in the headers,
inside of the email, so it doesn't show on the logs.

Everything is running as it should be except this double delivery
detail. I haven't tried, but I am sure that if I remove dovecot from
the equation, it all works. But I lose the sieve rules and maildir
quotas. So...

Any idea of how I can fix it?

Reply via email to