Чтобы статьи про различные 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...}
Пример:
Создаю общий почтовый ящик: 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)
Добавление комментариев закрыто.