главная - Статьи - Почта - Postfix + Dovecot + MySQL
Настройка Dovecot
Дата обновления: 30.08.2021Теги: Почтовый сервер Настройка сервера
Dovecot выполняет роль POP/IMAP почтового сервера. Фактически, он выполняет две функции:
- (основная) получает почту от MTA (Sendmail, Postfix и др.) и хранит ее на диске;
- (в моем случае) осуществляет авторизацию логина/пароля почтовых пользователей.
В данном руководстве пойдет речь о настройке Dovecot версии 2 как части классической связки "Dovecot + Postfix + MySQL + PostfixAdmin".
Напомним пройденные и будущие этапы:
- MySQL - нам надо сразу сделать хранилище настроек, т.к. и Postfix и Dovecot будут "завязаны" на базу данных.
- PostfixAdmin - аналогично, сразу создаем инструмент управления базой данных, проверяем, что пользователи добавляются и пр.
- Postfix - только на этом этапе ставим MTA (Mail Transfer Agent) Postfix.
- Dovecot - финал - хранение почты, авторизация и пр.
- Только после этого можно думать про антивирусы, веб-интерфейсы типа 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 }
Комментарии к конфигурационному файлу
Настройка 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.
Авторизуйтесь для добавления комментариев!
Postfix при отправке ДОЛЖЕН иметь возможность ЗАПИСИ в этот лог-файл. Postfix осуществляет авторизацию средствами Dovecot от имени непривилегированной учетной записи vmail.