====== G) Configuring Dovecot ====== Dovecot configuation is stored in **/etc/dovecot**. There is a master file called **dovecot.conf** but most of the changes need to be applied to the files under **/etc/dovecot/conf.d**. For each file, i will show you the changes from the defaults that you need to apply. **NOTE:** Dovecot 2.4 introduced some changes to the config file. The following has been adapted to this new format. ===== Main changes ===== You need to enable the selected protocols and change the login greeting, as i don't like to let others know that i use dovecot, for security reasons. Edit **doveconf.conf**: dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 !include_try conf.d/*.conf protocols { imap = yes lmtp = yes sieve = yes } mail_home = /home/vmail/storage/%{user | domain}/%{user | username} mail_driver = maildir mail_path = ~/maildir mail_uid = vmail mail_gid = vmail namespace inbox { inbox = yes separator = / } sql_driver = sqlite sqlite_path = /home/vmail/database/vmail.sqlite3 passdb sql { query = SELECT username, domain, password FROM mailbox WHERE username = '%{user}' AND active = 1 } userdb sql { query = SELECT CONCAT('/home/vmail/storage/', maildir) AS home, CONCAT('maildir:storage=', quota) AS quota FROM mailbox WHERE username = '%{user}' AND active = 1 iterate_query = SELECT username AS user FROM mailbox } ===== Setup link to postfix ===== Changes in **conf.d/10-master.conf**: service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0660 user = postfix } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } This is required because postfix will use dovecot to deliver mail to mailboxes internally and to perform SASL authentication as well. ===== Setup Sieve ===== Sieve let's you create custom filters that will filter your inbound emails. Changes in **conf.d/90-sieve.conf**: sieve_script personal { path = /home/vmail/storage/%{user | domain}/%{user | username}/sieve } And enable sieve for lmtp (local delivery), edit **conf.d/20-lmtp.conf**: protocol lmtp { mail_plugins { sieve = yes } ===== Setup authentication ===== Changes in **conf.d/10-auth.conf**: auth_mechanisms = plain login ===== Setup mailboxes ===== Changes in **conf.d/10-mail.conf**: mail_home = /home/vmail/storage/%{user | domain}/%{user | username} mail_driver = maildir mail_path = ~/maildir mail_uid = vmail mail_gid = vmail ===== Setup TLS ===== You need to point to the Let's Encrypt certificates. Changes in **conf.d/10-ssl.conf**: ssl = yes ssl_server { cert_file = /etc/dovecot/fullchain.pem key_file = /etc/dovecot/privkey.pem } For this to work, you need to ensure that the certs are properly moved after being renewed by Let's Encrypt. I use the following post hook in **/etc/letsencrypt/renewal-hooks/post/dovecot.sh**: cp /etc/letsencrypt/live/[cert path]/privkey.pem /etc/dovecot/privkey.pem cp /etc/letsencrypt/live/[cert path]/fullchain.pem /etc/dovecot/fullchain.pem chmod o+r /etc/dovecot/privkey.pem /etc/dovecot/fullchain.pem /etc/init.d/dovecot restart the chmod is required for command line tools using **doveadm**, like PostfixAdmin. ===== Testing ===== Start dovecot Check that login works: doveadm auth test -a /var/spool/postfix/private/auth user@mydomain.com Test IMAP: telnet mail.mydomain.com 143 Trying 1.2.3.4... Connected to mail.mydomain.com. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] IMAP Test that login works: telnet 127.0.0.1 1143 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] IMAP server ready. a login user@mydomain.com password a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE] Logged in Test TLS works: openssl s_client -connect mail.mydomain.com:993 [ expect similar output as above ] Test STARTTLS works: openssl s_client -connect mail.mydomain.com:143 -starttls imap [ expect similar output as above ] If all those checks worked fine, your dovecot seems all set!