First install postfix and dovecot which we will use to serve the imap directory and as SASL implementation.
apt-get install postfix dovecot-imapd
We are using LDAP for the passdb and the
userdb. We will also configure the LDA (Local delivery
agent) because we will use dovecot for delivery as it is able to
use sieve scripts.
We have to create a common user for our virtual maildirs.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/vmail -m
The configuration file /etc/dovecot/dovecot.conf
could look similar to the following
protocols = imap imaps
disable_plaintext_auth = yes
syslog_facility = mail
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail
protocol lda {
postmaster_address = michael@example.net
mail_plugins = sieve
auth_socket_path = /var/run/dovecot/auth-master
log_path = /var/vmail/dovecot-deliver.log
}
auth default {
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
userdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
plugin {
sieve=/var/vmail/sieve/%n.%d.sieve
sieve_global_path = /var/vmail/globalsieverc
}
All the configuration regarding to the LDAP directory is moved
into the config file
/etc/dovecot/dovecot-ldap.conf
hosts = localhost
dn = cn=dovecot,dc=example,dc=net
dnpass = <1234>
ldap_version = 3
base = ou=People,dc=example,dc=net
scope = subtree
user_attrs = homeDirectory=home,mailbox=mail
user_filter = (&(objectClass=posixAccount)(|(uid=%u)(maildrop=%u)))
pass_attrs = uid=user, userPassword=password
pass_filter = (&(objectClass=posixAccount)(|(uid=%u)(maildrop=%u)))
As you can see I am using an own LDAP dn to bind to
the server. That is done to allow dovecot to read the
userPassword attribute. You have to add the
appropriate object to LDAP (e.g. with ldapvi - do
not use the password 1234 
add cn=dovecot,dc=example,dc=net
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: dovecot
userPassword: {SSHA}sgCbYZK3TFhp3Q9KtKDl/kKTwrBodUP
and configure the acl
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=dovecot,dc=example,dc=net" by self write by anonymous auth by * none
Postfix connection
We have to tell postfix that it should use
dovecot for delivery be editing
/etc/postfix/main.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
In the /etc/postfix/master.cf we have to create a
service which is called dovecot
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Now dovecot is responsible for delivering.
Sieve
I've decided to use 2 kinds of sieve scripts. A
global one for every user who doesn't write his own and a per user
script. You can find the appropriate parts in the config file above
inside the plugin section and have to enable the sieve
plugin
protocol lda {
mail_plugins = sieve
}
plugin {
sieve=/var/vmail/sieve/%n.%d.sieve
sieve_global_path = /var/vmail/globalsieverc
}
Now we can create the global script
touch /var/vmail/globalsieverc
chown vmail: /var/vmail/globalsieverc
and edit /var/vmail/globalsieverc to contain
something like
require ["fileinto"];
# Move spam to spam folder
if anyof ( header :contains "X-Spam-Flag" "YES",
header :contains "Subject" "***SPAM***" ) {
fileinto "spam";
stop;
}
If you want to use you own per user script you might create a
file like /var/vmail/sieve/michael.example.net.sieve.
This should be readable by dovecot and overwrites
the global one.
Clean spam folder
That means all SPAM marked emails are moved into the spam
folder. There I am deleting emails older than a week for all users.
This is done with the following line in
/etc/crontab
0 4 * * * root find /var/vmail -type f -a \( -wholename "*/.spam/cur/*" -o -wholename "*/.spam/new/*" \) -a -mtime +7 -delete &> /dev/null
Logrotate for LDA
If you use the log file like mentioned above you really should
configure logrotate to do the rotation. Else this file
can get really big. Do this by adding the file
/etc/logrotate.d/dovecot-deliver
/var/vmail/dovecot-deliver.log {
weekly
rotate 14
compress
}
<- Previous | Home | Next ->