The challenge of customizing Dovecot
Robert Moskowitz
rgm at htt-consult.com
Sun Mar 19 20:57:32 EET 2017
I have been running Dovecot for sometime, but I have just used someone
else efforts on customizing it. Many of these throw out the
dovecot/conf.d files for a single dovecot.conf with no explanation on
what does what. So tell you a few conf.d files to edit.
So over the past few days, I have rolled up my sleeves and did my best
to work out how to modify the proper conf.d files. To 'stay true' to
the Dovecot maintainer's config organization.
The target is Centos7 with Dovecot 2.2.10-7
It was HARD!
Besides dovecot.conf, I had to modify 13 conf.d files. Add 3 .ext files
in /etc/dovecot, and set up sieve.
I will soon have my total instructions available on my server, but to
share with you what I have done for Dovecot customization and maybe to
get some recommendations on improvements. For the most part, I have
used SED to modify the conf files.
I use a few env variables:
your_domain_tld=
your_host_only=
your_host_tld=$your_host_only.$your_domain_tld
Postfix_Database_Password=
What follows are the pieces of my customization, all comments welcomed
(this is NOT adequately tested! That is later in the week!):
sed -i -e "/^#protocols/s/$/ sieve/w /dev/stdout" /etc/dovecot/dovecot.conf
sed -i -e "s/^#protocols/protocols/w /dev/stdout" /etc/dovecot/dovecot.conf
sed -i -e "s/#quota = /sqlquota = /w /dev/stdout" /etc/dovecot/dovecot.conf
sed -i -e "/^auth_mechanisms/s/$/ login/w /dev/stdout"
/etc/dovecot/conf.d/10-auth.conf
sed -i -e 's/^#!include auth-sql.conf.ext/!include auth-sql.conf.ext/w
/dev/stdout' /etc/dovecot/conf.d/10-auth.conf
sed -i -e "0,/#userdb {/ s/#userdb {/userdb {/w /dev/stdout"
/etc/dovecot/conf.d/auth-sql.conf.ext
sed -i -e "s/# driver = prefetch/ driver = prefetch\n }/w /dev/stdout"
/etc/dovecot/conf.d/auth-sql.conf.ext
sed -i -e "/^#mail_location/s/$/maildir:\/home\/vmail\/%d\/%n/w
/dev/stdout" /etc/dovecot/conf.d/10-mail.conf
sed -i -e "s/^#mail_location/mail_location/w /dev/stdout"
/etc/dovecot/conf.d/10-mail.conf
sed -i -e "s/first_valid_uid = 1000/first_valid_uid = 101/w /dev/stdout"
/etc/dovecot/conf.d/10-mail.conf
sed -i -e "s/#first_valid_gid = 1/first_valid_gid = 12/w /dev/stdout"
/etc/dovecot/conf.d/10-mail.conf
sed -i "/unix_listener auth-userdb/ a mode = 0666\n user =
vmail\n group = mail" /etc/dovecot/conf.d/10-master.conf
sed -i "/#unix_listener \/var\/spool/ a mode = 0666\n user =
postfix\n group = postfix\n }" /etc/dovecot/conf.d/10-master.conf
sed -i -e "s/#unix_listener \/var\/spool/unix_listener \/var\/spool/w
/dev/stdout" /etc/dovecot/conf.d/10-master.conf
sed -i "/unix_listener dict/ a mode = 0666\n user = vmail\n group =
mail" /etc/dovecot/conf.d/10-master.conf
sed -i -e "s/^mode/ mode/w /dev/stdout"
/etc/dovecot/conf.d/10-master.conf
sed -i -e
"s/dovecot\/certs\/dovecot.pem/tls\/certs\/$your_host_tld.crt/w
/dev/stdout" /etc/dovecot/conf.d/10-ssl.conf
sed -i -e
"s/dovecot\/private\/dovecot.pem/tls\/private\/$your_host_tld.key/w
/dev/stdout" /etc/dovecot/conf.d/10-ssl.conf
sed -i -e "/^#postmaster_address/s/$/ postmaster@$your_domain_tld/w
/dev/stdout" /etc/dovecot/conf.d/15-lda.conf
sed -i -e "s/^#postmaster_address/postmaster_address/w /dev/stdout"
/etc/dovecot/conf.d/15-lda.conf
sed -i "/#mail_plugins/ a mail_plugins = quota sieve"
/etc/dovecot/conf.d/15-lda.conf
sed -i -e "s/^mail_plugins/ mail_plugins/w /dev/stdout"
/etc/dovecot/conf.d/15-lda.conf
sed -i -e "s/^#lda_mailbox_autocreate = no/lda_mailbox_autocreate =
yes/w /dev/stdout" /etc/dovecot/conf.d/15-lda.conf
sed -i -e "s/^#lda_mailbox_autosubscribe = no/lda_mailbox_autosubscribe
= yes/w /dev/stdout" /etc/dovecot/conf.d/15-lda.conf
sed -i "/#mail_plugins / a mail_plugins = quota imap_quota trash"
/etc/dovecot/conf.d/20-imap.conf
sed -i -e "s/^mail_plugins/ mail_plugins/w /dev/stdout"
/etc/dovecot/conf.d/20-imap.conf
sed -i "/#imap_client_workarounds/ a imap_client_workarounds =
delay-newmail" /etc/dovecot/conf.d/20-imap.conf
sed -i "/#mail_plugins/ a mail_plugins = sieve"
/etc/dovecot/conf.d/20-lmtp.conf
sed -i -e "s/^mail_plugins/ mail_plugins/w /dev/stdout"
/etc/dovecot/conf.d/20-lmtp.conf
sed -i -e "s/^#lmtp_save_to_detail_mailbox =
no/lmtp_save_to_detail_mailbox = yes/w /dev/stdout"
/etc/dovecot/conf.d/20-lmtp.conf
sed -i -e "s/#service managesieve-login/service managesieve-login/w
/dev/stdout" /etc/dovecot/conf.d/20-managesieve.conf
sed -i -e "s/#inet_listener sieve {/inet_listener sieve {/w /dev/stdout"
/etc/dovecot/conf.d/20-managesieve.conf
sed -i -e "s/# port = 4190/ port = 4190\n }/w /dev/stdout"
/etc/dovecot/conf.d/20-managesieve.conf
sed -i "/#vsz_limit/ a }" /etc/dovecot/conf.d/20-managesieve.conf
sed -i "/#mail_plugins/ a mail_plugins = quota"
/etc/dovecot/conf.d/20-pop3.conf
sed -i -e "s/^mail_plugins/ mail_plugins/w /dev/stdout"
/etc/dovecot/conf.d/20-pop3.conf
sed -i "/#pop3_client_workarounds/ a pop3_client_workarounds =
outlook-no-nuls oe-ns-eoh" /etc/dovecot/conf.d/20-pop3.conf
sed -i -e "s/#acl = /acl = /w /dev/stdout" /etc/dovecot/conf.d/90-acl.conf
sed -i -e "s/#sieve_before =/sieve_before =
\/home\/sieve\/globalfilter.sieve/w /dev/stdout"
/etc/dovecot/conf.d/90-sieve.conf
cat <<EOF>>/etc/dovecot/conf.d/90-quota.conf || exit 1
plugin {
quota = dict:user::proxy::sqlquota
trash = /etc/dovecot/dovecot-trash.conf.ext
}
EOF
cat <<EOF>/etc/dovecot/dovecot-trash.conf.ext || exit 1
# Spam mailbox is emptied before Trash
1 Spam
# Trash mailbox is emptied before Sent
# 2 Trash
# If both Sent and "Sent Messages" mailboxes exist, the next oldest message
# to be deleted is looked up from both of the mailboxes.
# 3 Sent
# 3 Sent Messages
EOF
cat <<EOF>/etc/dovecot/dovecot-sql.conf.ext || exit 1
driver = mysql
connect = host=localhost dbname=postfix user=postfix
password=$Postfix_Database_Password
default_pass_scheme = MD5-CRYPT
# following should all be on one line.
password_query = SELECT username as user, password,
concat('/home/vmail/', maildir) as userdb_home,
concat('maildir:/home/vmail/', maildir) as userdb_mail, 101 as
userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = '%u' AND
active = '1'
# following should all be on one line
user_query = SELECT concat('/home/vmail/', maildir) as home,
concat('maildir:/home/vmail/', maildir) as mail, 101 AS uid, 12 AS gid,
CONCAT('*:messages=30000:bytes=', quota) as quota_rule FROM mailbox
WHERE username = '%u' AND active = '1'
EOF
cat <<EOF>/etc/dovecot/dovecot-dict-sql.conf.ext || exit 1
connect = host=localhost dbname=postfix user=postfix
password=$Postfix_Database_Password
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
EOF
mkdir /home/sieve
cat <<EOF>/home/sieve/globalfilter.sieve || exit 1
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Spam";
}
if header :contains "subject" "***SPAM***" {
fileinto "Spam";
}
EOF
sievec /home/sieve/globalfilter.sieve
chown -R vmail:mail /home/sieve
More information about the dovecot
mailing list