LINUX.ORG.RU

Как подружить postfix и dovecot

 , , ,


0

2

Сервер postfix + dovecot + mariadb

Есть maildir /var/mail/example.com/arksunix/ Я хочу чтобы там хранились письма. Попрбовал отправить письмо с другого сервера, postfix положил его в /var/mail/example.com/arksunix/new. Клиент, подключеный по imap его не получил (хотя вернее сказать dovecot его не отдал). Как я понял, dovecot должен был увидеть письмо в new и перенести его в cur, но этого не произошло. В логах пусто. Отправка работает отлично, с ней проблем нет. Почему клиент imap а не локальный - не смог найти консольный клиент, который смог бы прочитать письма из /var/mail/example.com/arksunix/. Даже если удаётся указать, что их надо искать именно там, они выдают ошибку, что это каталог (в том же .muttrc я указал, что тип Maildir - бестолку). Но это уже вторичная проблема.

Конфиг dovecot-а:

auth_mechanisms = plain login
mail_location = maildir:/var/mail/%d/%n
mail_privileged_group = mail
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocols = imap lmtp
service auth-worker {
  user = vmail
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
  user = dovecot
}
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 47659
    ssl = yes
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 0
  }
}
ssl = required
ssl_cert = </etc/ssl/example.com.crt
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
userdb {
  args = uid=vmail gid=vmail home=/var/mail/%d/%n
  driver = static
}

main.cf:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no

readme_directory = /usr/share/doc/postfix

compatibility_level = 2

smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/example.crt
smtpd_tls_key_file = /etc/ssl/private/example.com.key
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_ciphers = medium
smtp_tls_mandatory_ciphers = medium
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_tls_loglevel=1
smtpd_tls_dh1024_param_file = /etc/ssl/dhparam.pem

tls_medium_cipherlist = ECDHE+AES256:ECDHE+CHACHA20:ECDHE+ARIA:ECDHE+AES128:!aNULL:!eNULL

tls_preempt_cipherlist = smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
	permit_sasl_authenticated,
	permit_mynetworks,
	reject_unauth_destinationno

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
html_directory = /usr/share/doc/postfix/html

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-email2email.cf

master.cf:

smtp      inet  n       -       y       -       -       smtpd
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
42935     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
...

Неожиданно само заработало. Что изменилось я хз. Вернее я попробовал изменить в /etc/dovecot/conf.d/10-mail.conf строку mail_privileged_group = mail на mail_privileged_group = vmail, перезапустил dovecot, после чего опять отправил письмо - оно не дошло. Попробовал через некоторое время отправить ещё одно, чтобы в сотый раз чекнуть что будет в логах, и неожиданно письмо появилось во входящих. Я пошёл сменил обратно на mail и снова перезапустил dovecot - всё равно работает. Ещё из косвенных манипуляций было удаление /var/mail/www-data (хз кто её создал, nginx или nextcloud) и попытка sudo -u vmail cat /var/mail/example.com/arksunix/new/<письмо>, чтобы убедится, что vmail беспрепятственно может читать письма. Но вряд ли что-то из этого могло повлиять на работу dovecot.

Чтож, проблемой меньше, а теперь хорошо бы настроить mutt, чтобы была возможность глянуть письма локально. Вот текущее содержимое .muttrc:

set mbox_type=Maildir
set folder="/var/mail/example.com/arksunix"
set mbox="/var/mail/example.com/arksunix"
mailboxes `echo -n "+ "; find /var/mail/example.com/arksunix -maxdepth 1 -type d -name ".*" -printf "+'%f' "`

При запуске выдаёт: /var/mail/example.com/arksunix не является почтовым ящиком.

Arksunix ()