Полноценный виртуальный почтовый сервер/Подключение Courier-imap к базе данных
Введение
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
(Обратите внимание на лидирующий слэш в пути!) устанавливаются в статичные (постоянные) значения, заметьте как они указаны. Таким образом, используются постоянные значения, а не значения из базы данных.##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, но мы будем использовать их для подсчета количества учетных записей или для изменения пароля и, таким образом, при смене пароля поле имени пользователя по-прежнему используется. Если аутентификация выполняется с именем пользователя помните, что имена пользователей должны быть уникальными.
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.
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
##NAME: authmodulelist:2
authmodulelist="authpgsql "
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=1
Очевидно, что если нужно больше (или другие) модулей аутентификации, они должны быть также перечислены здесь.
MySQL
##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, затем неправильно настроить его почтовый клиент и таким образом сервер очистит его почтовый ящик.
##NAME: POP3DSTART:0
POP3DSTART=YES
IMAP
IMAP имеет несколько возможностей, которые могут быть включены.
SORT
разрешает поиска по сообщениям на стороне сервера.IDLE
разрешает 'push' соединения.
##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 использует его:
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
Заключение
Выключите отладку, если этот этап работает правильно.
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=0