Перед миграцией с maildrop на dovecot настоятельно рекомендуется сделать бекап конфигов мэйлсервера. Пересобирать postfix версии .3.x для поддержки dovecot не нужно. Она встроенная. Для других версий postfix смотреть есть ли пункт "Dovecot" при выполнении make config |
Устанавливаем dovecot с поддержкой SSL, IPV6, POP3, IMAP, MYSQL
cd /usr/ports/mail/dovecot make config make install clean |
Конфигурируем
автозагрузка в /etc/rc.conf
dovecot_enable="YES" |
копируем конфиг файлы
cd /usr/local/etc/dovecot cp dovecot-example.conf dovecot.conf cp dovecot-sql-example.conf dovecot-sql.conf |
используем сертификаты которые у нас уже были сгенерированы ранее
/usr/local/share/dovecot/dovecot-openssl.cnf
[ 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.cnf
[ 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 |
mkdir -p /etc/ssl/certs /etc/ssl/private /usr/local/share/dovecot/mkcert.sh |
Конфигурируем dovecot
/usr/local/etc/dovecot/dovecot.conf
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 запросы
SQL запросы должны быть в одной строке на запрос, без переноса запроса в новую строку |
/usr/local/etc/dovecot/dovecot-sql.conf
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('*:storage=', ROUND( mb.box_size * 1024 ), ':messages=', mb.mails_limit ) AS quota_rule 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
# 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 , анализируем логи на наличие ошибок/предупреждений
В логе видим ошибки такого рода : status=bounced (SMTPUTF8 is required, ... В конфиге postfix main.cf добавляем опцию : smtputf8_enable = no |
Просмотреть информацию о пользователе, его квотам и местонахождению почты :
root@myserver:~ # doveadm user testmail@myserver.net.ua field value uid 1005 gid 1005 home /var/spool/virtual/myserver.net.ua/testmail/ mail maildir:/var/spool/virtual/myserver.net.ua/testmail quota_rule *:storage=2048:messages=256 root@myserver:~ # |