Полноценный виртуальный почтовый сервер/Подключение Courier-imap к базе данных

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Complete Virtual Mail Server/Courier-IMAP to Database and the translation is 100% complete.
Other languages:

Введение

Courier-IMAP используют для обеспечения как IMAP так и POP3 сервисов. Многие заинтересованы в IMAP, так как POP3 не так сильно распространен в последнее время. Это вполне понятно, так как у IMAP есть много преимуществ.

Основное различие между POP3 и IMAP это то, что IMAP хранит сообщения на сервере, тогда как с POP3 клиент извлекает сообщения и затем уходит с сервера. Хранение сообщений на сервере позволяет нескольким клиентам активно работать с одним и тем же почтовым ящиком из разных мест. Самым простым примером будет веб-почта и десктопный клиент, оба получают доступ к одному и тому же почтовому ящику одновременно. Также, в целом, веб-почта сильно благоприятствуют протоколу IMAP. Цена за это, конечно, в первую очередь дисковое пространство и вычислительные мощности на почтовом сервере. Хоть в наши дни, дисковое пространство не так дорого, выделить 32Gb чисто для электронной почты предлагает много места для почты, практически без затрат. И если вычислительная мощность является проблемой, поиск на стороне сервера можно отключить, чтобы уменьшить нагрузку на машину.

Эта глава будет в основном сосредоточена на IMAP, но также будет включать в себя POP3 для полноты изложения. Могут потребоваться некоторые исследования этих двух протоколов, если выбор не однозначен.

Установка Courier-IMAP

У net-mail/courier-imap есть несколько USE-флагов, с которыми необходимо ознакомится. net-libs/courier-authlib — это важная зависимость, так как этот пакет отвечает за то, как пользователи проходят аутентификацию, поэтому также рассматриваются и его USE-флаги.

USE flags for net-libs/courier-authlib Courier authentication library

berkdb Add support for sys-libs/db (Berkeley DB for MySQL)
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
gdbm Add support for sys-libs/gdbm (GNU database libraries)
ldap Add LDAP support (Lightweight Directory Access Protocol)
mysql Add mySQL Database support
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
postgres Add support for the postgresql database
sqlite Add support for sqlite - embedded sql database
static-libs Build static versions of dynamic libraries as well

Выбрать только нужные бэкэнды базы данных.

Предупреждение
libauth*sql.so может быть скомпилирован только тогда, когда -vpopmail устанавливлен как USE-флаг и в системе не установлен vpopmail. Vpopmail и libauth*sql.so не смешиваются.
Заметка
USE-флаг fam необходим для IDLE (например, для работы функции 'Push')

Если установлены соответствующие USE-флаги, emerge courier-imap должен подтянуть courier-authlib:

root #emerge --ask net-mail/courier-imap

Настройка courier-authlib

Postgres

Courier-authlib запускается от суперпользователя, так что доступ к сокету будет разрешен по умолчанию.

Заметка
Те поля, которые должны быть изменены, перечислены здесь. Есть две закомментированые опции. PGSQL_HOST, очевидно, как упоминалось ранее, будет использовать UNIX сокеты. PGSQL_QUOTA_FIELD комментируется на данный момент, поскольку квоты будут включены на более позднем этапе. PGSQL-UID_FIELD, PGSQL-GID_FIELD и PGSQL_HOME_FIELD (Обратите внимание на лидирующий слэш в пути!) устанавливаются в статичные (постоянные) значения, заметьте как они указаны. Таким образом, используются постоянные значения, а не значения из базы данных.
ФАЙЛ /etc/courier/authlib/authpgsqlrcНастройка подключения к базе данных
##NAME: LOCATION:0
# PGSQL_HOST		pgsql.example.com
PGSQL_PORT		5432
PGSQL_USERNAME		postfix
PGSQL_PASSWORD		$password
 
##NAME: PGSQL_DATABASE:0
PGSQL_DATABASE		postfix
 
##NAME: PGSQL_USER_TABLE:0
PGSQL_USER_TABLE	mailbox
 
##NAME: PGSQL_CRYPT_PWFIELD:0
PGSQL_CRYPT_PWFIELD	password
 
##NAME: PGSQL_UID_FIELD:0
PGSQL_UID_FIELD		'5000'
 
##NAME: PGSQL_GID_FIELD:0
PGSQL_GID_FIELD		'5000'
 
##NAME: PGSQL_LOGIN_FIELD:0
PGSQL_LOGIN_FIELD	local_part
 
##NAME: PGSQL_HOME_FIELD:0
PGSQL_HOME_FIELD	'/var/vmail/'
 
##NAME: PGSQL_NAME_FIELD:0
PGSQL_NAME_FIELD	name
 
##NAME: PGSQL_MAILDIR_FIELD:0
PGSQL_MAILDIR_FIELD	maildir
 
##NAME: PGSQL_QUOTA_FIELD:0
# PGSQL_QUOTA_FIELD	quota
 
##NAME: PGSQL_WHERE_CLAUSE:0
# Deal only with active mail accounts.
PGSQL_WHERE_CLAUSE      active='1'

Если логины используются в синтаксисе user@domain.com вместо имя пользователя, значение PGSQL_LOGIN_FIELD должно быть изменено с local_part на username.

Для того, чтобы использовать более сложные проверки подлинности SQL может быть использован PGSQL_SELECT_CLAUSE. Courier-authlib, будет игнорировать любой из заданных ранее параметров для SELECT, но мы будем использовать их для подсчета количества учетных записей или для изменения пароля и, таким образом, при смене пароля поле имени пользователя по-прежнему используется. Если аутентификация выполняется с именем пользователя помните, что имена пользователей должны быть уникальными.

ФАЙЛ /etc/courier/authlib/authpgsqlrcПользовательская настройка доступа к базе данных
PGSQL_SELECT_CLAUSE	SELECT local_part, password, '', '5000', '5000',	\
			'/var/vmail/', maildir, quota, name, ''		 	\
			FROM mailbox WHERE local_part='$(local_part)'	 	\
			AND active='1'

MySQL

Далее перенастройте аутентификацию в courier-imap и postfix, чтобы использовалась база данных mailsql. Во всех приведенных ниже примерах замените $password паролем, который был установлен для mailsql пользователя в MySQL.

ФАЙЛ /etc/courier/authlib/authmysqlrcНастройка аутентификации
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users
## (Make sure the following line is commented out since we're storing plaintext.)
#MYSQL_CRYPT_PWFIELD    crypt
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

Перезагрузите необходимые сервисы:

root #rc-service courier-authlib restart
root #rc-service saslauthd restart

Настройка authdaemon

Authdaemon на самом деле отвечает за выполнение аутентификации. Здесь authdaemon настроен на использование правильного хранения базы данных. Portage на самом деле установил authmodulelist переменную должным образом. Проверьте это в конфигурационном файле. Также включите отладку здесь, поскольку это поможет с любым потенциальным проблемам позже.

PostgreSQL

ФАЙЛ /etc/courier/authlib/authdaemonrcПроверьте модули аутентификации
##NAME: authmodulelist:2
authmodulelist="authpgsql "
 
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=1
Заметка
Очевидно, что если нужно больше (или другие) модулей аутентификации, они должны быть также перечислены здесь.

MySQL

ФАЙЛ /etc/courier/authlib/authdaemonrcПроверьте модули аутентификации
##NAME: authmodulelist:2
authmodulelist="authmysql authpam"
 
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=1

Права доступа

Права доступа должны быть установлены правильно, так как файлы могут содержать конфиденциальную информацию о пароле.

root #chmod 660 /etc/courier/authlib/auth*rc
root #chown mail:mail /etc/courier/authlib/auth*rc

Тестирование courier-authlib

Courier-authlib, включает в себя простую утилиту тестирования. Она требует валидное имя пользователя в качестве параметра. Не стесняйтесь проверить страницу руководства authtest для получения дополнительной информации. Он короткий, но четкий.

Для того, чтобы выполнить некоторые базовые тесты, запустите демон authlib:

root #/etc/init.d/courier-authlib start

Запуск authtest с testuser:

root #authtest testuser
Authentication succeeded.
 
     Authenticated: testuser  (uid 5000, gid 5000)
    Home Directory: /var/vmail
           Maildir: example.com/testuser/
             Quota: (none)
Encrypted Password: $1$16117118$ajxN3QRilmP5zLVHjTkE31
Cleartext Password: (none)
           Options: (none)

Настройка POP3/IMAP

POP3

Для работы POP3 требуется меньше конфигурирования. Однако рекомендуется пропустить этот раздел и не включать/использовать pop3 и тем самым оставить эту установку в NO. Пользователь может удалить все сообщения, которые должны были быть сохранены на сервере для использования imap, затем неправильно настроить его почтовый клиент и таким образом сервер очистит его почтовый ящик.

ФАЙЛ /etc/courier-imap/pop3dВключение pop3
##NAME: POP3DSTART:0
POP3DSTART=YES

IMAP

IMAP имеет несколько возможностей, которые могут быть включены.

  • SORT разрешает поиска по сообщениям на стороне сервера.
  • IDLE разрешает 'push' соединения.
ФАЙЛ /etc/courier-imap/imapdВключение imapd и некоторых опций
##NAME: IMAP_CAPABILITY:1
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
 
##NAME: IMAP_CHECK_ALL_FOLDERS:0
IMAP_CHECK_ALL_FOLDERS=1
 
##NAME: IMAP_ENHANCEDIDLE:0
IMAP_ENHANCEDIDLE=1
 
##NAME: IMAP_EMPTYTRASH:0
IMAP_EMPTYTRASH=Trash:40,Junk:7
 
##NAME: IMAPDSTART:0
IMAPDSTART=YES
 
##NAME: MAILDIRPATH:0
MAILDIR=.maildir
MAILDIRPATH=.maildir
Заметка
MAILDIRPATH раздел содержит некоторые обманки, убедитесь, что он правильно установлен и очищен.

Некоторые клиенты нуждаются в минимальной длины параметра DH 2048 бит (например, с использованием >=dev-libs/nss-3.19.1). Сгенерируйте один с:

root #DH_BITS=2048 mkdhparams

Затем удостоверьтесь что Courier использует его:

ФАЙЛ /etc/courier-imap/imapd-sslУбедимся что Courier использует наш dhparams.pem
TLS_DHPARAMS=/usr/share/dhparams.pem

Тестирование IMAP/POP3

POP3

Courier-pop3d следует запустить:

root #/etc/init.d/courier-pop3d start

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

user $telnet foo.example.com 110
+OK Hello there.
user testuser
+OK Password required
Pass secret
+OK logged in
Заметка
Это первый раз, когда используется пароль в виде простого текста. Ранее было известно только как $1$16117118$ajxN3QRilmP5zLVHjTkE31.
Предупреждение
Не забудьте подготовить пользовательский maildir инструментом maildirmake.

Если тестирование прошло успешно, добавьте courier-pop3d в уровень запуска по умолчанию:

root #rc-update add courier-pop3d default

IMAP

Следует запустить courier-pop3d:

root #/etc/init.d/courier-imapd start

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

user $telnet foo.example.com 143
Trying 127.0.0.1...
Connected to foo.example.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc.  See COPYING for distribution information.
1 LOGIN testuser secret 
1 OK LOGIN Ok.
1 LOGOUT
* BYE Courier-IMAP server shutting down
1 OK LOGOUT completed
Connection closed by foreign host.

Если тестирование прошло успешно, добавьте courier-imap в уровень запуска по умолчанию:

root #rc-update add courier-imapd default

Заключение

Выключите отладку, если этот этап работает правильно.

ФАЙЛ /etc/courier/authlib/authdaemonrcВыключение отладки
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=0