====== Dovecot ====== FIXME Свободный ''IMAP'' и ''POP3'' сервер, разрабатываемый в расчёте на безопасность, гибкость настройки и быстродействие. http://www.dovecot.org/ ====== Установка ====== apt-get install\ dovecot-core\ dovecot-imapd\ dovecot-lmtpd\ dovecot-ldap\ dovecot-sieve\ dovecot-managesieved Если нужен pop3 то нужно поставить еще pop3d: apt-get install dovecot-pop3d ====== Настройка ====== Путь к файлам настройки: ''/etc/dovecot'', ''/etc/dovecot/conf.d'' FIXME service dovecot Usage: /etc/init.d/dovecot {start|stop|restart|force-reload|status} ===== dovecot.conf ===== !include_try /usr/share/dovecot/protocols.d/*.protocol !include conf.d/*.conf !include_try local.conf protocols = imap lmtp sieve ===== 10-auth.conf ===== disable_plaintext_auth = no auth_username_format = %Ln auth_master_user_separator = * auth_mechanisms = plain !include auth-master.conf.ext !include auth-ldap.conf.ext ===== 10-logging.conf ===== auth_verbose = no auth_verbose_passwords = no auth_debug = no auth_debug_passwords = no mail_debug = no verbose_ssl = no ===== 20-imap.conf ===== protocol imap { mail_plugins = $mail_plugins imap_acl imap_quota quota } ===== 15-lda.conf ===== postmaster_address = postmaster@domain.local hostname = mail.domain.local protocol lda { mail_plugins = $mail_plugins sieve quota syslog_facility = mail } ===== 10-master.conf ===== service imap-login { inet_listener imap { port = 143 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0666 user = postfix } } service imap { executable = imap imap-postlogin } service imap-postlogin { executable = script-login -d /srv/mail/vmail/postlogin.sh user = $default_internal_user unix_listener imap-postlogin { } } service pop3 { } service auth { unix_listener auth-master { mode = 0666 } unix_listener auth-userdb { mode = 0666 user = vmail group = mail } unix_listener /var/spool/postfix/private/auth { mode = 0666 } } service dict { unix_listener dict { mode = 0666 user = vmail group = mail } } ===== 15-mailboxes.conf ===== namespace inbox { mailbox Drafts { special_use = \Drafts auto = create auto = subscribe } mailbox Junk { special_use = \Junk auto = create auto = subscribe } mailbox Trash { special_use = \Trash auto = create auto = subscribe } mailbox Sent { special_use = \Sent auto = create auto = subscribe } mailbox "Sent Messages" { special_use = \Sent } mailbox Archive { special_use = \Archive auto = create auto = subscribe } mailbox virtual/Flagged { special_use = \Flagged } } ====== Администрирование с doveadm ====== FIXME ===== Поиск ===== doveadm search -u ПОЛЬЗОВАТЕЛЬ savedbefore 30d ===== Информация о пользователе ===== doveadm user ПОЛЬЗОВАТЕЛЬ |Квоты|doveadm quota get -u ПОЛЬЗОВАТЕЛЬ| |Чистка|doveadm expunge -u ПОЛЬЗОВАТЕЛЬ mailbox ПАПКА savedbefore 30d| ===== Создание пароля ===== doveadm pw -s md5 ====== Сознание папки для пользователей домена ====== Нужно создать пользователя ''vmail'' и создать папку для почты данного домена, затем нужно [[#Установка прав на папки для пользователей домена|назначить]] папке соответствующие права. #!/bin/bash MAIL_LOCATION=/srv/mail/vmail useradd -g mail -u 5000 vmail -d $MAIL_LOCATION gpasswd -a vmail mail mkdir -p $MAIL_LOCATION Значение переменной ''MAIL_LOCATION'' должно быть согласовано переменной ''mail_location'' в файле ''/etc/dovecot/conf.d/10-mail.conf'': mail_location = maildir:/srv/mail/vmail/%Ln ===== Установка прав на папки для пользователей домена ===== #!/bin/bash MAIL_LOCATION=/srv/mail/vmail chown vmail -R $MAIL_LOCATION chgrp mail -R $MAIL_LOCATION find $MAIL_LOCATION -type f -exec chmod 02600 {} \; find $MAIL_LOCATION -type d -exec chmod 02700 {} \; chmod 755 $MAIL_LOCATION/*.sh ====== Русские имена папок ====== Имена папок кодируются по спецификации [[http://en.wikipedia.org/wiki/UTF-7|UTF-7]]. Вот соответствие распространенных имен: ^ Русское ^ В кодировке UTF-7 ^ Английское ^ |''Отправленные''|''.&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1''|''.Sent''| |''Корзина''|''.&BBoEPgRABDcEOAQ9BDA-''|''.Trash''| |''Черновики''|''.&BCcENQRABD0EPgQyBDgEOgQ4-''|''.Drafts''| |''СПАМ''| ''.&BCEEHwQQBBw-''|''.Junk''| ====== Sieve ====== Язык [[sieve:sieve|Sieve]] нужен для фильтрации сообщений на стороне сервера. :!: После настройки необходимо выполнить действия по [[#Установка прав на папки для пользователей домена|установке прав на папки для пользователей домена]]. ===== Установка ===== Для работы потребуются следующие пакеты: apt-get install dovecot-sieve dovecot-managesieved ===== Настройка ===== 1. Нужно добавить ''sieve'' в переменную ''protocols'' файла ''dovecot.conf'' protocols = imap lmtp sieve ==== 20-lmtp.conf ==== Также добавляем ''sieve'' в следующие файлы: protocol lmtp { mail_plugins = $mail_plugins sieve } ==== 15-lda.conf ==== protocol lda { mail_plugins = $mail_plugins sieve } ==== 90-sieve.conf ==== Указываем пути для размещения файлов в папке пользователя: plugin { sieve = /srv/mail/vmail/%Ln/.dovecot.sieve sieve_dir = /srv/mail/vmail/%Ln/sieve sieve_before = /srv/mail/vmail/before.sieve } ==== before.sieve ==== require ["fileinto"]; # rule:[SPAM] if anyof (header :contains "X-Amavis-Alert" "BAD HEADER SECTION", header :contains "X-Spam-Level" "*", header :contains "Subject" "***SPAM***") { fileinto "Junk"; stop; } # rule:[VIRUS] if header :contains "Subject" "***INFECTED***" { fileinto "Junk"; stop; } 4. Чтобы скрыть папку sieve из списка папок для подписки: maildir_stat_dirs = yes ===== lda-dupes ===== FIXME Ошибка: lmtp Error: file_dotlock_open(/home/user/.dovecot.lda-dupes) failed: No such file or directory Нужно убрать ''homeDirectory=home'' из файла: /etc/dovecot/dovecot-ldap.conf.ext user_attrs = uidNumber=unset,gidNumber=unset,homeDirectory=home,mailQuotaSize=quota_rule=*:storage=%$M ====== Общие папки ====== ===== Глобальные списки контроля доступа ===== FIXME [[IMAP_ACL:IMAP_ACL| Списки контроля доступа IMAP ACL]] Путь и имя задается в файле ''[[#90-acl.conf]]'' ===== 90-acl.conf ===== plugin { acl_anyone = allow acl = vfile:/etc/dovecot/global-acls:cache_secs=300 } plugin { acl_shared_dict = file:/srv/mail/vmail/shared-mailboxes } ===== global-acls ===== FIXME Сделать скрипт для создания и примеры. Папка ''/etc/dovecot/global-acls'' содержит файлы с правами по умолчанию для папок. |.DEFAULT|для любой папки| Пример: anyone lr owner lrwstipekxa authenticated lrwstipekxa ===== Список доступа к папке ===== Папка для которой задаются права содержит файл ''dovecot-acl'' Пример: user=ИМЯ_ПОЛЬЗОВАТЕЛЯ ПРАВА ===== Пространство имён ===== :!: Чтобы не слетала подписка при совместном использовании нужно указать ''subscriptions = no'' ==== 10-mail.conf ==== mail_location = maildir:/srv/mail/vmail/%Ln mail_home=/srv/mail/%Ln namespace inbox { # Namespace type: private, shared or public type = private separator = / prefix = inbox = yes hidden = no list = yes subscriptions = yes } namespace { # Чтобы скрыть shared/common/ type = private separator = / prefix = shared/common/ inbox = no hidden = yes list = no subscriptions = no } namespace { type = public separator = / prefix = common/ location = maildir:/srv/mail/vmail/common inbox = no hidden = no list = yes subscriptions = no } namespace { type = shared separator = / prefix = shared/%%n/ location = maildir:/srv/mail/vmail/%%n:INDEXPVT=/srv/mail/%n/shared/%%n subscriptions = no inbox = no list = children } mail_uid = vmail mail_gid = mail mail_privileged_group = mail mail_access_groups = mail mail_plugins = $mail_plugins acl quota maildir_stat_dirs = yes maildir_very_dirty_syncs = no ====== Общие папки пользователей ====== Пользователи могут задать права к своей папке FIXME :!: Готовые настройки приведены в главе: [[examples:email_server_subdomain#Dovecot|Пример почтового сервера для внутреннего домена]] ===== Пространство имен ===== namespace { type = shared separator = / prefix = shared/%%n/ location = maildir:/srv/mail/vmail/%%n:INDEX=/srv/mail/vmail/%n/shared/%%n inbox = no list = children subscriptions = no } ===== Словарь ===== 90-acl.conf plugin { acl_shared_dict = file:/srv/mail/vmail/shared-mailboxes } в файле shared-mailboxes только список доступных папок, права определяются в ACL файлах. Этот файл нужен для того, чтобы в пространстве имен появились Общие папки. Пример: ''ПОЛЬЗОВАТЕЛЬ_1'' предоставляет доступ к своим папкам (включая вложенные) для пользователей: ''ПОЛЬЗОВАТЕЛЬ_2'' и ''ПОЛЬЗОВАТЕЛЬ_3'' shared/shared-boxes/anyone/ПОЛЬЗОВАТЕЛЬ_1 1 shared/shared-boxes/user/ПОЛЬЗОВАТЕЛЬ_2/ПОЛЬЗОВАТЕЛЬ_1 1 shared/shared-boxes/user/ПОЛЬЗОВАТЕЛЬ_3/ПОЛЬЗОВАТЕЛЬ_1 1 ====== Квоты ====== FIXME Нужно добавить значение ''quota'' в переменную ''mail_plugins'' в эти файлы: mail_plugins = $mail_plugins quota protocol lda { mail_plugins = $mail_plugins quota } protocol lmtp { mail_plugins = $mail_plugins sieve quota } ===== 90-quota.conf ===== plugin { quota = maildir:User quota quota_rule = *:storage=100MB quota_rule2 = Trash:storage=+100M quota_exceeded_message = Quota exceeded (mailbox for user is full) quota_grace = 10%% quota_grace = 50M } ===== mailQuotaSize ===== Имя поля в LDAP: ''mailQuotaSize'', размер квоты задан в Мбайтах FIXME заменить на [[#dovecot-ldap.conf.ext]] user_attrs = uidNumber=unset,gidNumber=unset,homeDirectory=home,mailQuotaSize=quota_rule=*:storage=%$M Файл квот: ''maildirsize'' Показать размер квоты для пользователя doveadm -f tab quota get -u ПОЛЬЗОВАТЕЛЬ ====== LDAP ====== ===== dovecot-ldap.conf.ext ===== hosts = localhost ldap directory uris = ldap://localhost ldap://ldap ldap://directory dn = cn=admin,dc=domain,dc=local dnpass = ПАРОЛЬ auth_bind = no ldap_version = 3 base = ou=users,dc=domain,dc=local deref = never scope = subtree user_attrs = uidNumber=unset,gidNumber=unset,mailQuotaSize=quota_rule=*:storage=%$M user_filter = (&(objectClass=mailUser)(uid=%u)) pass_attrs = uid=user,userPassword=password pass_filter = (&(objectClass=mailUser)(uid=%u)) default_pass_scheme = MD5 ====== Мастер-пользователи ====== Под именем мастер-пользователя можно войти в систему от любого обычного пользователя, процедура входа выглядит так: ^''Имя''|''ПОЛЬЗОВАТЕЛЬ*МАСТЕР_ПОЛЬЗОВАТЕЛЬ''| ^''Пароль''|''ПАРОЛЬ_МАСТЕР_ПОЛЬЗОВАТЕЛЯ''| Для работы рекомендуется [[roundcube:roundcube#Работа от имени мастер-пользователя|RoundCube]] :!: После настройки необходимо выполнить действия по [[#Установка прав на папки для пользователей домена|установке прав на папки для пользователей домена]]. ===== Настройка ===== 1. Определяем базу мастер паролей [[#auth-master.conf.ext]] ===== auth-master.conf.ext ===== passdb { driver = passwd-file master = yes args = /etc/dovecot/master-users } 2. Включаем ''auth-master.conf.ext'' в ''[[#10-auth.conf]]'': !include auth-master.conf.ext 3. Создаем файл с паролями [[#master-users]]: ===== master-users ===== Получение хеша пароля описано в главе [[#Создание пароля|Создание пароля]] Пример (пароль ''master''): master:{MD5}$1$T2nnJqr7$mbv9te4mQOn4INFyoUs7k. :!: Пункты 4 и 5 нужны для обеспечения работы с списками доступа ''ACL'' 4. Настройка процедуры ''postlogin'' В файл ''[[#10-master.conf]]'' вносим следущие изменения: service imap { executable = imap imap-postlogin } service imap-postlogin { executable = script-login -d /srv/mail/vmail/postlogin.sh user = $default_internal_user unix_listener imap-postlogin { } } 5. Создание файла ''postlogin.sh'' #!/bin/bash MASTER_USER=$USER exec "$@" ===== systemd ===== FIXME Пример настройки: IMAP только ''localhost'' [Unit] Description=Dovecot IMAP/POP3 email server activation socket [Socket] #dovecot expects separate IPv4 and IPv6 sockets BindIPv6Only=ipv6-only ListenStream=127.0.0.1:143 ListenStream=[::1]:143 ListenStream=0.0.0.0:993 ListenStream=[::]:993 KeepAlive=true [Install] WantedBy=sockets.target ===== SSL ===== {{anchor:letsencrypt}} Пример настройки работы по IMAPS(порт 993), с использованием сертификатов [[letsencrypt:letsencrypt|]]: ssl = yes ssl_cert = Также нужно добавить в секцию "service imap-login" настройку для ''imaps'' service imap-login { inet_listener imaps { port = 993 ssl = yes } } ===== logrotate ===== FIXME Настройка ротации протокола с помощью [[logrotate:logrotate|]]: /var/log/dovecot*.log { missingok notifempty delaycompress sharedscripts postrotate doveadm log reopen endscript } ---- http://wiki2.dovecot.org/Logging ====== Ссылки ====== [[http://www.info-x.org/dokumentatsiya/konfiguratsionnye_faily/dovecot_conf.html|Русский перевод dovecot.conf v.1.2.17]] [[http://www.lissyara.su/?id=2238|Dovecot 2 по шагам]] [[http://dummyluck.com/page/dovecot_2_konfiguracia_nastroik|Dovecot 2 - описание настроек, в контексте рассматриваемой конфигурации]] [[http://dummyluck.com/page/acl_master_user_dovecot_2|Dovecot 2 - ACL]] **[[http://wiki2.dovecot.org/Migration/Dsync|Migrating from any IMAP/POP3 server to Dovecot via dsync]]** http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL {{tag>Email Linux}}