Сервер в кармане, или просто о сложном!

главная - Статьи - Почта - Postfix + Dovecot + MySQL



Настройка Dovecot

Дата обновления: 30.08.2021

Теги: Почтовый сервер Настройка сервера

Dovecot выполняет роль POP/IMAP почтового сервера. Фактически, он выполняет две функции:

  1. (основная) получает почту от MTA (Sendmail, Postfix и др.) и хранит ее на диске;
  2. (в моем случае) осуществляет авторизацию логина/пароля почтовых пользователей.

В данном руководстве пойдет речь о настройке Dovecot версии 2 как части классической связки "Dovecot + Postfix + MySQL + PostfixAdmin".

Напомним пройденные и будущие этапы:

  1. MySQL - нам надо сразу сделать хранилище настроек, т.к. и Postfix и Dovecot будут "завязаны" на базу данных.
  2. PostfixAdmin - аналогично, сразу создаем инструмент управления базой данных, проверяем, что пользователи добавляются и пр.
  3. Postfix - только на этом этапе ставим MTA (Mail Transfer Agent) Postfix.
  4. Dovecot - финал - хранение почты, авторизация и пр.
  5. Только после этого можно думать про антивирусы, веб-интерфейсы типа Roundcube Mail.

Установка Dovecot

Я уже давно для себя выбрал CentOS как основу для серверов. Поэтому все команды установки софта будут именно для этой операционной системы. Я крайне не советую ставить основные программы из исходников командами типа make, make install и т.д. Это приведет только к невозможности получения обновлений в удобной форме.

В процессе отладки я наступал на разные грабли, список которых выделил в отдельную страницу "размышления по ходу отладки". Не поленитесь, посмотрите, вдруг что-то пригодится.

yum install dovecot
yum install dovecot-mysql
chkconfig dovecot on

Вот и все, дальше надо настраивать конфиг.

Главный конфигурационный файл Dovecot

Основные настройки Dovecot хранит в файле конфигурации /etc/dovecot/dovecot.conf (или, реже /etc/dovecot.conf).

Сразу делаем копию конфигурационного файла:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak

Примечение: путь к файлу может быть /etc/dovecot.conf, проверьте сначала, где у вас в системе этот файл.

Рабочий конфигурационный файл Dovecot 2.0.9 (для 2.3.11 все подходит, может, где-то и есть мелочи, но я не заметил):

# Не использую специализированные файлы из поставки Dovecot из папки /etc/dovecot/conf.d/.
# Основная причина: сравнительно небольшой размер всего конфига (все перед глазами, нет необходимости раскидывать по отдельным файлам).
#!include conf.d/*.conf

# Нет необходимости явно указывать imaps и pop3s - Dovecot 2.* по-умолчанию их включает.
protocols = imap pop3
listen = *

# Завершать все дочерние процессы, если завершен мастер-процесс
shutdown_clients = yes

# Владелец почтовых папок (также см. конфиг Postfix):
mail_uid = vmail
mail_gid = vmail

# Только наш пользователь с uid и gid 5000 (vmail) может быть использован.
first_valid_uid = 5000
last_valid_uid = 5000

# Лог-файлы. Подробнее: http://wiki2.dovecot.org/Logging
log_path = /var/log/dovecot.log
# Отладка. Если все настроено, отключаем (no)
# http://maint.unona.ru/doc/dovecot2.shtml
mail_debug = no 
auth_verbose = no
auth_debug = no
auth_debug_passwords = no

# SSL
# http://wiki2.dovecot.org/SSL/DovecotConfiguration
ssl = required
ssl_cert = </etc/pki/dovecot/certs/server.crt
ssl_key = </etc/pki/dovecot/private/server.key

ssl_protocols = TLSv1.1 TLSv1.2 TLSv1.3 !SSLv2 !SSLv3
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL

# Запрет аутентификации открытым текстом. yes - запретить, no - разрешить.
disable_plaintext_auth = yes

# Список разрешенных символов в имене пользователя.
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

# Расположение и формат файлов почты (%d - домен, %n - имя пользователя).
mail_location = maildir:/var/vmail/%d/%n

# Если при аутентификации не указан домен, то добавить этот (в данном примере - пустой)
auth_default_realm =

# Доступные варианты аутентификации (PLAIN, DIGEST-MD5, CRAM-MD5...).
# Для того, чтобы иметь меньше головной боли ставьте PLAIN
auth_mechanisms = PLAIN

# Приветственное сообщение
login_greeting = POP3/IMAP server ready.

# Одно из самых важных мест - предоставление сокетов для аутентификации пользователей.
# Если настроено неверно - ничего работать не будет!
service auth {
    # http://maint.unona.ru/doc/dovecot2.shtml
    # Указывает, что данный сокет будет использовать SMTP сервер для аутентификации.
    # Указывается пользователь, группа и права доступа к сокету. В данном случае это postfix
    # ("mail_owner = postfix" в файле /etc/postfix/main.cf).
    unix_listener /var/spool/postfix/private/auth {
        user = postfix
        group = postfix
        mode = 0660
    }
    unix_listener auth-master {
        user = vmail
        group = vmail
        mode = 0660
    }
    unix_listener auth-userdb {
        user = vmail
        group = vmail
        mode = 0660
    }
}

# Запрос параметров виртуальных почтовых пользователей
# (логин, пароль, домен, активный/неактивный и др.)
userdb {
    args = /etc/dovecot/dovecot-mysql.conf
    driver = sql
}
passdb {
    args = /etc/dovecot/dovecot-mysql.conf
    driver = sql
}

# Plugins

protocol imap {
    imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
    mail_plugins = autocreate
}
protocol pop3 {
    pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
    pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
    # Куда будут перенаправлены недоставленные письма
    postmaster_address = postmaster@localhost
    auth_socket_path = /var/run/dovecot/auth-master
}


plugin {
    auth_socket_path = /var/run/dovecot/auth-master

    # Plugin: autocreate. Создаем и подписываемся на папки IMAP.
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    autosubscribe2 = Sent
    autosubscribe3 = Trash
    autosubscribe4 = Drafts
    autosubscribe5 = Junk

    # Plugin: квоты. Пока отключим.
    # http://wiki2.dovecot.org/Quota/Configuration
    #quota = maildir:User quota
    #quota_rule = *:storage=1GB
    #quota_rule2 = Trash:storage=+10%% # 10% of 1GB = 100MB
    #quota_rule3 = Junk:storage=+10%% # 10% of 1GB = 100MB
    #quota_rule4 = Drafts:storage=+10%% # 10% of 1GB = 100MB
}

Комментарии к конфигурационному файлу

На уже настроенной конфигурации я целый день не мог понять, почему отправленные письма (причем авторизация прошла успешно) не приходят в почтовый ящик. Оказалось, все дело в том, что в правах доступа на лог-файл /var/log/dovecot.log стоял root, а должно было быть vmail.

Postfix при отправке ДОЛЖЕН иметь возможность ЗАПИСИ в этот лог-файл. Postfix осуществляет авторизацию средствами Dovecot от имени непривилегированной учетной записи vmail.

 

Настройка SSL

В секции SSL указаны пути к сертификатам:

ssl = yes
ssl_cert = </etc/pki/dovecot/certs/server.crt
ssl_key = </etc/pki/dovecot/private/server.key

Проверте пути к файлам, по-умолчанию это вполне может быть, например, так:

ssl = yes
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

Символ "<" важен. Он указывает, что переменная содержит содержимое файла, а не путь к нему. Неуказание этого символа приведет к ошибке.

Права на эти файлы д.б. только для root:

chown root:root /etc/pki/dovecot/certs/dovecot.pem
chown root:root /etc/pki/dovecot/private/dovecot.pem
chmod 444 /etc/pki/dovecot/certs/dovecot.pem
chmod 400 /etc/pki/dovecot/private/dovecot.pem

 

Соединение Dovecot с MySQL

Для проверки валидности почтового адресата с помощью базы данных MySQL, Dovecot использует файл "/etc/dovecot/dovecot-mysql.conf". Если его нет, создаем его:

touch /etc/dovecot/dovecot-mysql.conf

В этот файл помещаем следующий текст:

driver = mysql
connect = host=localhost dbname=mail user=postfix password=My_PassworD
default_pass_scheme = CRAM-MD5

password_query = SELECT username AS user,domain,password FROM mailbox
   WHERE username = '%u' AND active='1'

user_query = SELECT username AS user, '5000' AS uid, '5000' AS gid FROM mailbox
   WHERE username = '%n' AND domain = '%d' AND active='1'

Здесь %n - имя пользователя, %d - домен пользователя.

Обратите внимание на то, что в конфиге Dovecot (/etc/dovecot/dovecot.conf) стоит 

auth_mechanisms = PLAIN

а в /etc/dovecot/dovecot-mysql.conf 

default_pass_scheme = CRAM-MD5

Это не опечатка. Суть: почтовый клиент отправляет Postfix-у пароль почтового ящика простым текстом. Postfix передает этот пароль Dovecot. А вот тут внимание: сам Dovecot ничего с паролем не придумывает, а тупо отдает его на проверку с помощью файла dovecot-mysql.conf. А в этом файле обычный текстовый пароль преобразуется функцией MD5 и результат сравнивается с хранимым в базе данных хешем (вы ведь еще не забыли, что PostfixAdmin создает учетные записи с параметром $CONF['encrypt'] = 'dovecot:CRAM-MD5'). Если ок, Dovecot дает отмашку, что все ок. Самому Dovecot-у по барабану, что там сравнивается. Ему, как директору, в данном случае интересно получить результат: тот пользователь или не тот.

Оляля, это не безопасно - пароль в открытом виде! Ничего подобного. SSL и TLS нам на что? Вот то-то и оно. Зато сейчас у нас нет головной боли, какой очередной почтовый клиент вздумает использовать один из многих наших уникальных пользователей. PLAIN он и в Африке - PLAIN.

Если у вас возникают проблемы с отладкой в этом месте, измените в /etc/dovecot/dovecot.conf

mail_debug = yes 
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

и смотрите логи (кто, какой пароль и т.п.).

Самое время проверить работу сервера и поставить веб-морду для пользователей почты Roundcube.



Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?