SYNOPSYS
I have used exim for a while, but wasn’t sure of what was going on, and to be honest, mail hassle is not … well (!)
So let’s give a try at postfix, coupled with dovecot and PostgreSQL
What I want is:
- ssmtp service with per user password
- imaps service with per user password
- virtual domains
- virtual uid per user
as usual this setup is made on a debian wheezy.
PROCEDURE
Start fist with dovecot and PostgreSQL
Design your DB as you wish and feed /etc/dovecot/dovecot-sql.conf as it should be.
What matters here is the use of peer authentication between dovecot and PostgreSQL using UNIX socket (that rocks).
/etc/postgresql/9.1/main/pg_hba.conf
1
2
|
# "local" is for Unix domain socket connections only
local all all peer
|
create a ‘secure’ user
1
|
adduser --system --no-create-home -uid XYZ secuser
|
/etc/dovecot/dovecot-sql.conf
1
2
3
4
5
6
|
# use unix:PostgreSQL
connect = host=/var/run/postgresql dbname=vmaildb
…
# SQL queries of your own
password_query = …
user_query = …
|
Setup your authentication services used by dovecot and postfix
/etc/dovecot/dovecot.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
auth default {
mechanisms = login plain
user = secuser
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
socket listen {
# contacted by /usr/lib/dovecot/deliver to know where the mailboxes are
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = secuser
}
# contacted by postfix to know if a client can send an email (SASL)
client {
path = /var/spool/postfix/private/auth
mode = 0600
user = postfix
}
}
}
|
corresponding sockets
1
2
|
srw------- 1 secuser root … /var/run/dovecot/auth-master
srw------- 1 postfix root … /var/spool/postfix/private/auth
|
Explain to postfix how to use dovecot to deliver mails
postfix/master.cf
1
2
3
|
# Local Delivery Agent
dovecot unix - n n - - pipe
flags=DRhu user=secuser:dovecot argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
|
multiple UID
To be able to deliver the mails with the virtual user UID,
2 options exists, setuid bit and sudo.
No sudo on servers for me if possible, but beware, if you update dovecot, your setuid bit will be lost forever.
deliver needs setuid to deliver to diffenet UID
1
2
3
|
chgrp dovecot /usr/lib/dovecot/deliver
chmod 04750 /usr/lib/dovecot/deliver
-rwsr-x--- 1 root dovecot … /usr/lib/dovecot/deliver
|
TO BE CONTINUED …
- postfix basic setup
- virtual aliases
- drop wrong virtual destinations
update your postfix config and check it
1
2
3
4
5
6
7
|
postalias /etc/alaiases
postmap /etc/postfix/valiases
postmap -q "user@domain.fqdn" /etc/postfix/valiases
postfix reload
postconf -d (default)
mailq (-q)
postuser -d ALL deferred
|