Cyrus IMAP является эффективным сервером IMAP и способен к работе с большим числом учетных записей.
Самым большим его недостатком является сложность в установке и конфигурировании.
В этой статье мы рассмотрим как можно использовать Cyrus в связке с Postfix в качестве агента почтовой доставки (MTA).
Все приведенные здесь инструкции проверялись на FreeBSD 5.4.
Postfix является заменой sendmail и входит в стандартную поставку FreeBSD. Он проще в конфигурировании, но
если вы зависите от sendmail, то, хотя и по прежнему можете смотреть здесь настройку Cyrus, вам необходимо
обратиться к руководству по настройке Sendmail для конфигурирования MTA.
Если не указано иное, то все операции выполняются с правами пользователя
root.
Мы будем использовать систему портов, поэтому если вы плохо с ней знакомы, то обратитесь к
Главе 4 Руководства пользователя FreeBSD.
Установка и настройка
Для установки Cyrus и Postfix на FreeBSD были использованы следущие порты:
- Sasl2 2.1.21
- Cyrus 2.2.12
- Postfix 2.23
Компонент SASL2 отвечает за аутентификацию и будет подтверждать полномочия любой почтовой программы,
запросившей почту. Все пользователи, имеющие почтовые ящики, должны иметь запись в базе данных SASL2.
Также, любые ID, которые вы планируете использовать для управления Cyrus нуждаются в ID в SASL.
Для SASL ID необходимости в Cyrus IMAP ID нет.
Cyrus управляет почтовыми ящиками пользователей, которые должны иметь свои ID для получения почты.
Postfix доставляет почту в Cyrus. Postfix должен знать о каждом пользователе через файл карты
псевлонимов. В этом файле определяется соответствие почтового адреса внутреннему
почтовому ящику пользователя, при этом есть возможность указать несколько адресов для одного
ящика.
В качестве базы данных используется Berkeley DB, в данной статье используется версия 4.3, но
возможна рабоота и с другой версией.
SASL2
Установка из системы портов:
# cd /usr/ports/security/cyrus-sasl2
# make WITHOUT_OTP=YES WITHOUT_NTLM=YES WITHOUT_GSSAPI=YES WITH_BDB_VER=43
# make install clean
OTP, NTLM и GSSAPI являются различными механизмами аутентификации и не используются в этой статье.
Если вы планируете использовать другие механизмы, то укажите их, исключив лишние.
WITH_BDB_VER=43 указывает на использование базы данных Berkeley 4.3.
Для проверки правильности установки SASL2, выполним:
# rehash
# saslpasswd2 -c admin
# sasldblistusers2
admin@domain1: userPassword
saslpasswd2 с параметром
-c указывает SASL2 создать
пользователя
admin, а команда
sasldblistusers2
отображает список пользователей.
Cyrus
После команды
make вы увидите меню. Сразу нажимаем
OK, так как не нуждаемся ни в каких опциях кроме указывающей на использование Berkeley DB.
# cd /usr/ports/mail/cyrus-imapd22
# make USE_BDB_VER=43
# mail install clean
Необходимо создать каталог, где будут храниться файлы IMAP:
# mkdir /var/imap
# mkdir /var/imap/spool
# chown -R cyrus:mail /var/imap
# chmod -R 750 /var/imap
По умолчанию Cyrus использует каталоги
/var/imap и
/var/spool, но я
использую
/var/imap и
/var/imap/spool, что облегчает задачи резервного копирования.
Для запуска Cyrus во время начальной загрузки, необходимо добавить следущую строку
в
/etc/rc.conf:
cyrus_imapd_enable="YES"
Postfix и Cyrus взаимодействуют между собой через сокет, его имя и размещение указано в
/usr/local/etc/cyrus.conf. Закомментируйте строку, содержащую
lmtp и добавльте:
lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0
Главным файлом конфигурации Cyrus является
/usr/local/etc/imapd.conf.
Его краткое содержание представлено ниже, обратите внимание на комментарии:
configdirectory: /var/imap [1]
partition-default: /var/imap/spool
sievedir: /var/imap/sieve
admins: user1@domain1 user2@domain2 admin [2]
allowanonymouslogin: no
autocreatequota: 10240
reject8bit: no
quotawarn: 90
timeout: 30
poptimeout: 10
dracinterval: 0
drachost: localhost
sasl_pwcheck_method: auxprop
lmtp_overquota_perm_failure: no
unixhierarchysep: no
virtdomains: userid
defaultdomain: domain1 [3]
loginrealms: domain1,domain2 [4]
[1]
Для использования другого хранилища сообщений, измените значения
configdirectory,
partition-default и
sievedir.
Хотя и не рекомендуется размещать
partition-default внутри
configdirectory,
здесь это сделано именно так.
[2]
Если вы хотите, чтобы с ID можно было управлять всеми доменами, то не следует указывать
параметр
domain. В случае, когда домен указан, администрировать можно только
конкретный домен.
[3]
Домен по умолчанию. Если домен, при создании пользователя, не указывается, то используется домен по умолчанию.
[4]
Список всех доменов, которые вы планируете обслуживать.
Для получения дополнительной информации обратитесь к
/usr/local/etc/imapd.conf.original и
man imapd.conf.
Теперь нам необходимо создать несколько каталогов, необходимых для подготовки Cyrus к работе:
# su cyrus
>/usr/local/cyrus/bin/mkimap
и, с правами пользователя
root:
# /usr/local/etc/rc.d/imapd.sh start
Проверим работу:
#telnet localhost 143
Escape character is '^]'.
* OK computer.domain.com Cyrus IMAP4 v2.2.12 server ready
Для выхода используйте команду
a1 logout.
Для каждого почтового ящика необходимо создать и SASL2 и Cyrus ID.
Для примера, создадим пользователя
test в домене
domain1:
Создаем SASL2 ID:
saslpasswd2 -c test@domain1
Password:
Again (for verification):
# sasldblistusers2
test@domain1.com: userPassword
Создаем Cyrus ID, учтите, что вам понадобится пароль пользователя
admin,
изменить его можно командой
saslpasswd2 admin:
#cyradm --user admin localhost
Password:
localhost.domain1>
cm user.test@domain1
lm
test@domain1 (\HasNoChildren)
quit
Postfix
В меню, открывшемся при установке, выберите пункты
Cyrus SASL v2 и
Berkeley DB4.3.
Также будет задан вопрос о добавлении пользователя
postfix в группу
mail и активации Postfix в
/etc/mail/mailer.conf.
Соглашаемся с предложенным.
# cd /usr/ports/mail/postfix
# make install clean
# rehash
Редактируем
/etc/rc/conf:
sendmail_enable="NONE"
sendmail_flags="-bd"
sendmail_pidfile="/var/spool/postfix/pid/master.pid"
sendmail_outbound_enable="NO"
sendmail_submit_enable="NO"
sendmail_msp_queue_enable="NO"
Создадим символическую ссылку, необходимую для запуска во время начальной загрузки:
# cd /usr/local/etc/rc.d
# ln -s /usr/local/sbin/postfix postfix.sh
Также необходимо отключить спечифичные для Sendmail инструкции в
файле
/etc/periodic.conf:
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
Когда Postfix уже сконфигурирован, необходимо создать базу данных псевдонимов
alias.db
и запустить Postfix:
# newaliases
# ls -l /etc/aliases.db
# postmap /usr/local/etc/postfix/virtual
# postfix start
Хотя, описанный в статье, процесс установки и не использует этот файл, он необходим
для работы Postfix. Теперь проверим его работу:
telnet localhost 25
You should see a prompt
Trying 127.0.0.1...
Connected to < your host name >
Escape character is '^]'.
quit
Также есть необходимость отредактировать еще один файл -
/usr/local/etc/postfix/main.cf.
Изменим его следующим образом (обратите внимание, что цифры в квадратных
скобках являются комментариями и должны быть удалены из файла конфигурации):
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
mail_owner = postfix
soft_bounce = no
myhostname = domain1 [1]
myorigin = $mydomain
relay_domains = $mydestination
local_recipient_maps = $virtual_mailbox_maps
recipient_delimiter = +
debug_peer_level = 2
unknown_local_recipient_reject_code = 550
setgid_group = maildrop
html_directory = no
readme_directory = no
masquerade_domains = $mydomain
smtpd_recipient_restrictions =
reject_non_fqdn_recipient
permit_mynetworks
reject_unauth_destination
reject_unknown_sender_domain
permit
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_require_helo = yes
mailbox_transport = lmtp:unix:/var/imap/socket/lmtp
virtual_transport = lmtp:unix:/var/imap/socket/lmtp
virtual_mailbox_domains = domain2, domain3 [2]
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual
[1]
Главный почтовый домен
[2]
Список всех почтовых доменов, за исключением главного
Для получения дополнительной информации, обратитесь к
/usr/local/etc/postfix/dist/main.cf.
Перезапустим Postfix с новым файлом конфигурации:
# postfix reload
В дополнение к списку пользователей, описанных в SASL и Cyrus, необходимо добавить их и в Postfix.
Делается это с помощью файла
/usr/local/etc/postfix/virtual, куда мы добавляем пользователей
в таком формате:
user@domain user@domain
Для того, чтобы получать почту, аресованную несуществующему пользователю, добавьте следущую строку:
@domain1 valid_user@domain1
Знайте, что такое действие завалит ящик всем тем спамом, который рассылается методом перебора имен.
В тоже время, это упростит получение почты для стандартных имен, таких как
postmaster.
После каждого изменения этого файла необходимо выполнять такую конманду:
#postmap /usr/local/etc/postfix/virtual
Проверка установки
Вся проверка заключается в том, что необходимо попробовать подключиться к серверу с помошью почтового
клиента, поддерживающего IMAP, используя имя тестового пользователя.
Если такого клиента у вас нет, то можно установить, например, Cone, работающего из командной строки.
Если вы успешно соединились и на вашем сервере DNS есть соответствующая MX запись, то пожете попробовать
отправить себе письмо с любой другой почтовой системы.