> No, it means that unless there is a more specific alias before, all
> those 4 aliases, whatever is the domain part amongst the domains you
> receive for, will be delivered to mainu...@maindomain.tld

> No, you need to deliver to vmail for all users, Dovecot will be
> responsible for placing emails into the right folders.

Now I got it to work and I understood the way it works finally! 
Thank you Archange and Uwe for helping along the way, please let me
know if there is anything else you would change since I intend to make
a proper guide for this entire setup as it is pretty basic and
versatile. I don't want to recommend bad practices so please let me
know if there is something I should change.

For anybody else who may look at this in the future, here are the
relevant config files that I ended up with:

#### /etc/mail/smtpd.conf ##########################################
pki mail.domain.tld cert "/etc/ssl/mail.domain.org.fullchain.pem"
pki mail.domain.tld key "/etc/ssl/private/mail.domain.tld.key"

# Junk filters, rspamd also for DKIM signing
filter check_dyndns phase connect match rdns regex { '.*\.dyn\..*',
'.*\.dsl\..*' } junk
filter check_rdns phase connect match !rdns junk
filter check_fcrdns phase connect match !fcrdns junk
filter rspamd proc-exec "filter-rspamd"

# Tables
table usermap file:/etc/mail/usermap
table credentials file:/etc/mail/credentials
table domains { domain.tld, second.tld, third.tld }

# Listen for incoming mail and send through filters
listen on all tls pki mail.domain.tld \
    filter { check_dyndns, check_rdns, check_fcrdns, rspamd }

# Listen for, authenticate and DKIM-sign outgoing mail requests
listen on all port submission tls-require pki mail.domain.tld \
    auth <credentials> filter rspamd

action "inbound" lmtp "/var/dovecot/lmtp" rcpt-to virtual <usermap>
action "outbound" relay helo mail.domain.tld

# Match incoming mail
match from any for domain <domains> action "inbound"
match for local action "inbound"

# Match outgoing mail
match from any auth for any action "outbound"
match for any action "outbound"
####################################################################

#### /etc/mail/usermap #############################################
abuse                                admin
hostmaster                           admin
postmaster                           admin
webmaster                            admin
www                                  admin
operator                             admin
security                             admin
root                                 admin
contact                              admin

cl...@domain.tld                     admin

admin                                ad...@domain.tld

ad...@domain.tld                     vmail
unic...@third.tld                    vmail
####################################################################
(This makes practically everything go to the inbox of ad...@domain.tld
 with the exception of unic...@third.tld which also gets its own
inbox)

#### /etc/mail/credentials #########################################
ad...@domain.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
cl...@domain.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
ad...@second.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
cont...@second.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
ad...@third.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
unic...@third.tld:$2b$09$blahblahhashgoeshereblahblahhashgoeshere
####################################################################
(Credentials are needed for every inbox and for every sender. In my
case only ad...@domain.tld and unic...@third.tld have inboxes, so the
others are just other identities that I can use to send emails from.)

#### /etc/rsmapd/local.d/dkim-signing.conf #########################
allow_username_mismatch = true;
domain {
    domain.tld {
        path = "/etc/mail/dkim/domain.tld.key";
        selector = "selectorone";
    }
    second.tld {
        path = "/etc/mail/dkim/second.tld.key";
        selector = "selectortwo";
    }
    third.tld {
        path = "/etc/mail/dkim/third.tld.key";
        selector = "selectorthree";
    }
}
####################################################################
(The allow_username_mismatch can probably be left out for this setup,
haven't tried yet though)

#### /etc/dovecot/dovecot.conf #####################################
protocols = imap lmtp
####################################################################

#### /etc/dovecot/conf.d/10-auth.conf ##############################
passdb {
  driver = passwd-file
  args = scheme=CRYPT /etc/mail/credentials
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/maildirs/%d/%n
}
####################################################################

#### /etc/dovecot/conf.d/10-mail.conf ##############################
mail_location = maildir:~/Maildir
####################################################################

#### /etc/dovecot/conf.d/10-ssl.conf ###############################
ssl_cert = </etc/ssl/mail.domain.tld.fullchain.pem
ssl_key = </etc/ssl/private/mail.domain.tld.key
####################################################################

#### /etc/dovecot/conf.d/15-mailboxes.conf #########################
namespace inbox {
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Archive {
    auto = subscribe
    special_use = \Archive
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
}
####################################################################

And that is it as far as mail-related config files go. :)
I will also look into sieve rules further, thanks for the pointer
Archange.

Best,
Unicorn


Reply via email to