Skip to end of metadata
Go to start of metadata

Перед миграцией с 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='имя_домена';
  • Отключаем maildrop, проверяем что как transport выставлен dovecot
  • Запускаем dovecot, перезапускаем postfix , анализируем логи на наличие ошибок/предупреждений

    Не отсылает письмо с UTF-8 в поле Subject

    В логе видим ошибки такого рода :

    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:~ #
  • No labels