Table of Contents |
---|
Warning |
---|
Перед миграцией с maildrop на dovecot настоятельно рекомендуется сделать бекап конфигов мэйлсервера. Пересобирать postfix версии .3.x для поддержки dovecot не нужно. Она встроенная. Для других версий postfix смотреть есть ли пункт "Dovecot" при выполнении make config |
Устанавливаем dovecot с поддержкой SSL, IPV6, POP3, IMAP, MYSQL
Code Block | ||
---|---|---|
| ||
cd /usr/ports/mail/dovecot make config make install clean |
Конфигурируем
автозагрузка в /etc/rc.conf
Code Block language bash dovecot_enable="YES"
копируем конфиг файлы
Code Block language bash cd /usr/local/etc/ cp dovecot-example.conf dovecot.conf cp dovecot-sql-example.conf dovecot-sql.conf
используем сертификаты которые у нас уже были сгенерированы ранее
/usr/local/share/dovecot/dovecot-openssl.cnfCode Block language bash [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no # ... # ... ## Common Name (*.example.com is also possible) ## NOTE: must be a FQDN CN=imap.example.com ## E-mail contact emailAddress=postmaster@example.com [ cert_type ] nsCertType = server
или генерируем новые сертификаты
/usr/local/share/dovecot/dovecot-openssl.cnfCode Block language bash collapse true [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] ## country (2 letter code) C=UA ## State or Province Name (full name) ST=OD ## Locality Name (eg. city) L=Odessa ## Organization (eg. company) O=INET_LTD ## Organizational Unit Name (eg. section) OU=IMAP server ## Common Name (*.example.com is also possible) ## NOTE: must be a FQDN CN=imap.example.com ## E-mail contact emailAddress=postmaster@example.com [ cert_type ] nsCertType = server
Code Block language bash mkdir -p /etc/ssl/certs /etc/ssl/private /usr/local/share/dovecot/mkcert.sh
Конфигурируем dovecot
/usr/local/etc/dovecot.confCode Block language bash collapse true base_dir = /var/run/dovecot/ protocols = imap imaps pop3 pop3s listen = * disable_plaintext_auth = no shutdown_clients = yes ssl_disable = no ssl_cert_file = /usr/abills/Certs/server_public.pem ssl_key_file = /usr/abills/Certs/server.key login_greeting = Imap server ready. mail_location = maildir:/var/spool/virtual/%d/%n mail_extra_groups = mail verbose_proctitle = yes ## This is the same uid and gid as vmail first_valid_uid = 1005 first_valid_gid = 1005 protocol imap { mail_plugins = quota imap_quota imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep } protocol pop3 { pop3_uidl_format = %08Xu%08Xv mail_plugins = quota pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } protocol lda { postmaster_address = postmaster@example.com sendmail_path = /usr/sbin/sendmail } ## Dovecot LMTP service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail } auth default { mechanisms = plain login passdb sql { args = /usr/local/etc/dovecot/dovecot-sql.conf } userdb sql { args = /usr/local/etc/dovecot/dovecot-sql.conf } user = root socket listen { client { path = /var/spool/postfix/private/auth user = postfix group = postfix mode = 0660 } } } dict { } plugin { }
Выставляем SQL запросы
Warning SQL запросы должны быть в одной строке на запрос, без переноса запроса в новую строку
/usr/local/etc/dovecot-sql.confCode Block language bash driver = mysql connect = host=localhost dbname=abills user=abills password=$ABILLS_PASSWORD default_pass_scheme = PLAIN password_query = SELECT CONCAT(mb.username, '@', md.domain) AS user,DECODE(mb.password, 'test12345678901234567890') AS password FROM mail_boxes mb, mail_domains md WHERE CONCAT(mb.username, '@', md.domain) = '%n@%d' and mb.domain_id=md.id and mb.status = '0' and (mb.expire = '0000-00-00' or mb.expire > curdate()) user_query = SELECT CONCAT('/var/spool/virtual/', md.domain,'/',mb.username,'/') as home, 1005 AS uid, 1005 AS gid, CONCAT('dirsize:storage=', ROUND( mb.box_size * 1048576 )) AS quota from mail_boxes mb, mail_domains md WHERE CONCAT(mb.username, '@', md.domain) = '%n@%d' and mb.domain_id=md.id and mb.status = '0'
Для доменов меняем транспорт с maildrop на dovecot lmtp
Code Block language bash # mysql use abills; # смотрим связку домен и транспорт select domain,transport from mail_domains; # меняем для доменов транспорт на dovecot lmtp update mail_domains set transport='lmtp:unix:private/dovecot-lmtp' where domain='имя_домена';
- Запускаем dovecot, перезапускаем postfix , анализируем логи на наличие ошибок/предупреждений