It-e.RU
Цифровой двигатель вашего бизнеса.

Настройка MDA courier-imap, общих папок и квот.

Настройка MDA courier-imap, общих папок и квот.

Чтобы статьи про различные MTA не смотрелись однобоко, рассмотрим MDA Courier-imap. Пользователи сервера будут системные, чтобы публикуемые статьи были друг с другом логически связаны.


Чтобы статьи про различные MTA и MDA не смотрелись однобоко и несовместимо, пока что будем использовать системных пользователей ОС. В данной заметке рассмотрим MDA Courier-imap. Courier-imapd достаточно простой в настройке MDA, чтобы получить работоспособный севрер нам понадобится всего около 10 минут.
Сам сервер состоит из 4 конфигурационных файлов: imapd, imapd-ssl, pop3d, pop3d-ssl. В заметке будет рассматриваться настройка протокола pop3 и pop3s, но использовать их я бы не рекомендовал при достаточном количестве дискового пространства, потому что imap более удобен и обладает широкими возможностями. Например, имея большое количество различных клиентов и мест подключения к почтовому хранилищу, вам не придется заботится о синхронизации сообщений, почтовую базу можно сортировать по папкам, доступ к папкам можно давать другим пользователям системы, кроме того в эти папки можно помещать сообщения голосовой почты, то есть можно очень изящно подключить телефонию при этом общение не будет односторонним...

Итак, начнем. И для начала создадим самоподписанные сертификаты с помощью встроенных скриптов:

/usr/local/share/courier-imap/mkimapdcert
/usr/local/share/courier-imap/mkpop3dcert
Для уменьшения количества вопросов, можно заполнить файлы /usr/local/etc/courier-imap/imapd.cnf и /usr/local/etc/courier-imap/pop3d.cnf.

Теперь настроим конфигурационные файлы для каждого из необходимых нам протоколов.
Протокол IMAP, конфигурационный файл /usr/local/etc/courier-imap/imapd:
ADDRESS=0
PORT=143
MAXDAEMONS=160
MAXPERIP=16
PIDFILE=/var/run/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN 
   NAMESPACE THREAD=ORDEREDSUBJECT 
   THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_ACL=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN 
   NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES 
   SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_MAILBOX_SANITY_CHECK=1
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/local/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=NO
MAILDIRPATH=Maildir
Протокол Security IMAP, конфигурационный файл /usr/local/etc/courier-imap/imapd-ssl:
SSLPORT=993
SSLADDRESS=0
SSLPIDFILE=/var/run/imapd-ssl.pid
SSLLOGGEROPTS="-name=imapd-ssl"
IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=0
COURIERTLS=/usr/local/bin/couriertls
TLS_CERTFILE=/usr/local/share/courier-imap/imapd.pem
TLS_TRUSTCERTS=/etc/ssl/certs
TLS_VERIFYPEER=NONE
TLS_CACHEFILE=/usr/local/var/couriersslcache
TLS_CACHESIZE=524288
MAILDIRPATH=Maildir
Протокол POP3, конфигурационный файл /usr/local/etc/courier-imap/pop3d:
PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=160
MAXPERIP=16
POP3AUTH=""
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=NO
MAILDIRPATH=Maildir
Протокол Security POP3, конфигурационный файл /usr/local/etc/courier-imap/pop3d-ssl:
SSLPORT=995
SSLADDRESS=0
SSLPIDFILE=/var/run/pop3d-ssl.pid
SSLLOGGEROPTS="-name=pop3d-ssl"
POP3DSSLSTART=NO
POP3_STARTTLS=YES
POP3_TLS_REQUIRED=0
COURIERTLS=/usr/local/bin/couriertls
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CERTFILE=/usr/local/share/courier-imap/pop3d.pem
TLS_TRUSTCERTS=/etc/ssl/certs
TLS_VERIFYPEER=NONE
TLS_CACHEFILE=/usr/local/var/couriersslcache
TLS_CACHESIZE=524288
MAILDIRPATH=Maildir
Теперь можно все это запускать.
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="YES"
courier_authdaemond_enable="YES"
saslauthd_enable="YES"
В courier-imapd предусмотрен внутренний механизм квотирования ящиков, но оно и понятно, потому что эта программа умеет работать с виртуальными пользователями, находящимися в MySQL, поэтому системный механизм квотирования не подходит. Сначала создайте Maildir пользователя:
maildirmake Maildir
Затем задайте квоту:
maildirmake -q 100000000S Maildir 
Это число в байтах, для перевода в мегабайты разделите это число на 1048576 и получите ~95 мегабайт.
Теперь необходимо доставлять письма в ящик через контролирующую квоты программу deliverquota, которая входит в поставку courier-imapd. Для sendmail, например, необходимо для этого использовать procmail, конфиг которого в простом случае выглядит примерно так:
DEFAULT=$HOME/Maildir/new
SENDMAIL=/usr/local/sbin/sendmail
SENDMAILFLAGS=-i -fno-reply@domain.ru
LOGFILE=/var/log/procmail.log
ORGMAIL=$HOME/Maildir
UMASK=022
QUOTA=100000000S

:0 w
| /usr/local/bin/deliverquota -c -w 90 
   -W /usr/local/etc/courier-imap/quotawarnmsg.example 
   $MAILDIR $QUOTA
QUOTASTATE = $?

:0
* QUOTASTATE ?? ^^77^^
| (/usr/local/bin/formail -I"Return-path: no-reply@domain.ru" 
   -I"From: no-reply@domain.ru" ; echo "Mail quota exceeded."; 
   echo ""; echo "Message was deleted.") | $SENDMAIL -t $SENDMAILFLAGS
Скрипт проверяет файл Maildir/maildirsize и добавляет к результатам размер входящего письма. Если ящик заполнен более, чем на 90%, то пользователю будет выслано сообщение, текст которого находится в файле /usr/local/etc/courier-imap/quotawarnmsg.example. Если ящик переполнен, то отправителю сообщения будет выслано письмо: "Mail quota exceeded. Message was deleted." Проверить работу квотирования можно такой командой:
/usr/local/bin/deliverquota -w 90 -W \
/usr/local/etc/courier-imap/quotawarnmsg.example \
/home/user/Maildir < /tmp/errors.log 
Если ящик переполнен, то получите сообщение "Mail quota exceeded" и код завершения 77. Собственно это описано в приведенном скрипте procmail. Квоты можно устанавливать на отдельные папки, можно устанавливать на количество писем.

Теперь рассмотрим настройку общих почтовых папок.

Для обновления индекса, разработчики рекомендуют использовать скрипт:
#!/bin/sh
sbindir="/usr/local/sbin"
sysconfdir="/usr/local/etc/courier-imap"
rm -rf $sysconfdir/shared.tmp
mkdir $sysconfdir/shared.tmp || exit 1
$sbindir/authenumerate -s > $sysconfdir/shared.tmp/index || exit 1
$sbindir/sharedindexinstall
Этот набор команд пересоздает индексный файл.
У каждой общей папки есть некоторые права (ACL).
a - права на изменение ACL папки;
c - права на создание подпапок;
e - права на удаление сообщений, помеченных на удаление;
i - права на добавление сообщений;
l - отображение общей папки в списке общих папок;
r - права на просмотр содержимого общей папки (даже если 'l' не установлено);
s - права на установку флага "Прочитано" сообщений;
t - права на установку флага "Помечено на удаление" сообщений;
w - права на изменение атрибутов сообщений;
x - права на удаление общей папки.
Права можно применить для следующих групп:
owner            - владелец почтового ящика;
anyone/anonymous - все;
user=user     - пользователь с логином user;
group=group       - группа с именем group;
administrators   - группа с именем administrators
Для управления ACL общих папок используется команда maildiracl:
maildiracl {-reset} {maildir}
maildiracl {-list} {maildir} {INBOX[.folder]}
maildiracl {-set} {maildir} {INBOX[.folder]} {[-]identifier} {[+/-]rights}
maildiracl {-delete} {maildir} {INBOX[.folder]} {[-]identifier}
maildiracl {-compute} {maildir} {INBOX[.folder]} {identifier...}
  • maildiracl -reset предназначена для сброса ACL общей папки.
  • maildiracl -list предназначена для отображения ACL общей папки.
  • maildiracl -set предназначена для изменения ACL общей папки посредством добавления и удаления разрешающих и негативных прав доступа. Для задании негативных прав доступа перед идентификатором пользователя или группы должен стоять символ ‘-’, для удаления заданного разрешения перед удаляемым разрешением должен стоять символ ‘-’.
  • maildiracl -delete предназначена для изменения ACL общей папки посредством удаления разрешающих и негативных прав доступа.
  • maildiracl -compute предназначена для вычисления прав доступа к общей папке.
  • Пример:

    Создаю общий почтовый ящик:
    maildirmake -S /usr/home/shared_folders
    Создаю папку Reports:
    maildirmake -s write -f Reports /usr/home/shared_folders
    Подключаю общий ящик к определенному пользователю:
    maildirmake --add Reports=/home/shared_folders /home/makky/Maildir
    
    Теперь необходимо настроить глобальные или индивидуальные правила procmail для автоматического перемещения сообщений в папку, права на эту папку и подписаться на неё в вашем MUA.
    В итоге получится примерно следующее (на скриншоте мой thunderbird):

    Теперь имеем в распоряжении imap/imaps/pop3/pop3s сервер с общими почтовыми папками и квотированием. Для высоко нагруженных систем можно использовать распределнные хранилища данных и проксирование, но для тех, кто такие системы строит, подобного рода статьи не нужны.


    Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

    Комментарии (0)



    Добавление комментариев закрыто.