Я слежу за руководствами ISPMail на workaround.org (версия 2.9 Wheezy), и до сих пор все работает нормально. Когда я дошел до шага «Проверка доставки электронной почты», я заметил ошибку запроса в журнале вывода из /var/log/mail.log.
May 14 06:48:59 mail postfix/pickup[17704]: EA4AD240A98: uid=0 from=<root>
May 14 06:48:59 mail postfix/cleanup[17776]: EA4AD240A98: message-id=<20140514064859.EA4AD240A98@mail.domain.com>
May 14 06:48:59 mail postfix/qmgr[17706]: EA4AD240A98: from=<root@domain.com>, size=429, nrcpt=1 (queue active)
May 14 06:49:00 mail dovecot: auth-worker(17782): mysql(127.0.0.1): Connected to database mailserver
May 14 06:49:00 mail dovecot: auth-worker(17782): Warning: mysql: Query failed, retrying: Table 'mailserver.users' doesn't exist
May 14 06:49:00 mail dovecot: auth-worker(17782): Error: sql(john@example.org): User query failed: Table 'mailserver.users' doesn't exist (using built-in default user_query: SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d')
May 14 06:49:00 mail dovecot: lda(john@example.org): msgid=<20140514064859.EA4AD240A98@mail.domain.com>: saved mail to INBOX
May 14 06:49:00 mail postfix/pipe[17780]: EA4AD240A98: to=<john@example.org>, relay=dovecot, delay=0.09, delays=0.03/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service)
May 14 06:49:00 mail postfix/qmgr[17706]: EA4AD240A98: removed
Мне это показалось довольно интересным, что он не находит БД, поэтому я вернулся и проверил КАЖДЫЙ файл, к которому я прикоснулся, который включал БД (включая файлы postfix cf), и все правильно, поэтому я сбит с толку в этот момент, но как ни странно достаточно, чтобы электронная почта все еще добралась до правильного места назначения в /var/vmail/domain.com/.
Стоит ли мне беспокоиться об этом или я что-то здесь упускаю? Поскольку это сообщение от dovecot, это будет запрос из dovecot-sql.conf.ext, который я включаю сюда
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=blocked password=***REMOVED***
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
Как говорится в вашем mail.log, значение user_query не определено. Вот почему Dovecot возвращается к запросу по умолчанию.
Откройте файл конфигурации /etc/dovecot/dovecot-sql.conf.ext, и значение user_query, скорее всего, будет закомментировано или пусто. Заполните его соответствующим запросом.
Как и я, если вы используете один и тот же UID и GID для всех учетных записей электронной почты (скажем, 5000), вы можете сделать что-то столь же простое, как
user_query = SELECT ('5000') as 'uid',('5000') as 'gid'
Еще одна вещь, которую я заметил в вашем файле конфигурации. Лучше не использовать PLAIN-MD5 в качестве default_pass_scheme. Лучше переключитесь на что-нибудь посильнее, например SHA512.
Надеюсь, вы найдете мой ответ полезным. Ура!
используйте nano или vi (nano save = ctrl + o, затем exit = ctrl + x) vi save = кнопка вставки и кнопка esc, затем: wq! Enter Сохранит и выйдет.
/etc/dovecot/conf.d/auth-sql.conf.ext
...
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
...
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
Закомментируйте раздел userdb с драйвером sql:
#userdb {
#driver = sql
#args = /etc/dovecot/dovecot-sql.conf.ext
#}
systemctl restart dovecot
и он должен работать.
Проблема в том, что драйвер userdb использует sql
и он ищет стол users
в базе данных, но этой таблицы не существует.
Это проблема с популярным учебником, в котором я нашел множество вариантов, циркулирующих в Интернете (который является оригинальным? Я не знаю). В этом руководстве не объясняется, что строки userdb следует закомментировать, он содержит только инструкции по добавлению или изменению строк в файлах конфигурации. В руководстве используется MariaDB или MySQL для таблицы виртуальных пользователей. В этом случае нам нужно только driver = sql
для passdb, что приводит к dovecot-sql.conf.ext
, который содержит правильный запрос к базе данных для пароля и статический способ получить homedir.
Я протестировал это на своем сервере с настройками, которые, как я думаю, должны быть, после прочтения найденного мной учебника (я думаю, что вы использовали тот же учебник), и у меня была аналогичная проблема. Я просто трижды проверил или даже в четыре раза увеличил свои настройки postfix и dovecot на моем собственном сервере, и это решение решило проблему. Я настроил dovecot и postfix вместе с clamav, spamassassin и postgrey. Все работает отлично, но я потратил более 40 часов, чтобы шаг за шагом проверять каждую строчку в файлах конфигурации dovecot и postfix.
Изменено: 22 марта 2019 г.
Я прочитал книгу, в которой есть еще одно объяснение драйвера pam.
В файле /etc/dovecot/conf.d/10-auth.conf в конце есть одна строка:
!include auth-system.conf.ext
В файле /etc/dovecot/conf.d/auth-system.conf.ext есть закомментированный раздел по умолчанию, который выглядит примерно так.
#passdb {
#driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
#}
#userdb {
# <doc/wiki/AuthDatabase.Passwd.txt>
#driver = passwd
# [blocking=no]
#args =
#override_fields = home=/home/virtual/%u
#}
Если вы хотите использовать статические локальные учетные записи вместо тех, которые созданы в базе данных вручную (я не нашел автоматического способа разместить массовую учетную запись электронной почты в MariaDB), ваш код находится в /etc/dovecot/conf.d/auth-system. conf.ext следует изменить на:
passdb {
driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
}
userdb {
# <doc/wiki/AuthDatabase.Passwd.txt>
driver = passwd
# [blocking=no]
#args =
#override_fields = home=/home/virtual/%u
}
Это действительно краткое объяснение. Dovecot может использовать базу данных SQL, в которой вы создаете пользователей, или он может использовать PAM для аутентификации учетных записей локальных пользователей в системе. Какой путь выбрать, зависит только от администратора. На мой взгляд, SQL намного безопаснее, чем PAM и / etc / shadow, потому что, если вы хотите создать пользователя в MySQL / MariaDB, вы можете выбрать SHA, как в примере ниже:
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('yourdifficultpasswordphrase', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email@example.com');
А потом:
nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=yourdbname user=dbuser
password=yourdifficultpassword
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE
Email='%u';
SHA-512 справится со своей задачей. Конечно, это действительно краткое объяснение, но надеюсь, что оно объяснит разницу и почему SQL - лучший выбор.
Dovecot ищет стол под названием users
пока у вас есть данные в virtual_users
стол:
Query failed, retrying: Table 'mailserver.users' doesn't exist
Переименуйте таблицу или настройте dovecot для использования virtual_users
стол.