Настройка cyrus-imap.

Устанавливаем /usr/ports/securuty/cyrus-sasl2, который будет отвечать за аутентификацию. В make.conf добавим WITH _BDB_VER=44 для использования базы данных Berkeley DB.

# cd /usr/ports/securuty/cyrus-sasl2
# make install clean

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

# rehash
# saslpasswd2 -c admin
# sasldblistusers2
admin@domain: userPassword

Пользователи хранятся в файле /usr/local/etc/sasldb2, для того, чтобы был доступ к этой базе необходимо установить порт /usr/ports/security/cyrus-sasl2-saslauthd и запустить его через /etc/rc.conf:

# cd /usr/ports/security/cyrus-sasl2-saslauthd
# echo ‘saslauthd_enable=”YES”‘ >> /etc/rc.conf
# echo “saslauthd_flags=”-a sasldb”
# /usr/local/etc/rc.d/saslauthd start
# testsaslauthd -u test -p test
0: OK “Success.”

Saslauthd может аунтифицировать разными механизмами -sasldb, getpwent, pam kerberos, etc. Если указать saslauthd_flags=”-a getpwent” – проверка логина и пароля будет осуществляться через /etc/master.passwd.

Ставим /usr/ports/mail/cyrus-imap23, из опций выбираем BD и SNMP5 для мониторинга:

# cd /usr/ports/mail/cyrus-imap23
# make install clean

===> Installing rc.d startup script(s)
===> Compressing manual pages for cyrus-imapd-2.3.11
===> Registering installation for cyrus-imapd-2.3.11
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/cyrus/bin/timsieved
/usr/local/bin/imtest
/usr/local/cyrus/bin/imapd
/usr/local/cyrus/bin/proxyd
/usr/local/cyrus/bin/pop3d
/usr/local/cyrus/bin/notifyd
/usr/local/bin/pop3test
/usr/local/cyrus/bin/lmtpproxyd
/usr/local/bin/mupdatetest
/usr/local/bin/sivtest
/usr/local/cyrus/bin/lmtpd
/usr/local/cyrus/bin/pop3proxyd
/usr/local/bin/lmtptest
/usr/local/cyrus/bin/fud
/usr/local/cyrus/bin/smmapd
/usr/local/bin/nntptest
/usr/local/bin/smtptest
/usr/local/bin/synctest

This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/imapd

Открываем /usr/local/etc/cyrus.conf и коментарим сервисы, которые не нужны:

imap cmd=”imapd” listen=”imap” prefork=0
imaps cmd=”imapd -s” listen=”imaps” prefork=0
pop3 cmd=”pop3d” listen=”pop3″ prefork=0
pop3s cmd=”pop3d -s” listen=”pop3s” prefork=0
sieve cmd=”timsieved” listen=”sieve” prefork=0
lmtp cmd=”lmtpd” listen=”lmtp” prefork=0
lmtpunix cmd=”lmtpd” listen=”/var/imap/socket/lmtp” prefork=0

Конфиг приведен в сокращении, из всего этого мне интересно только pop3 и imap, поэтому коментирую imaps, pop3s. LMTP(RFC 2033) – Local Mail Transport Protocol – агент доставки. lmtp работает чрез tcp/ip, lmtpunix – через сокеты. Поскольку у нас MTA и аген доставки работают на одном и том же машине взаимодействовать они будут через сокет, посему можно строку lmtp закоментировать и оставить lmtpunix. Далее настраиваем конфиг самого имапа /usr/local/etc/imapd .conf:

# Расположение db-ков:
configdirectory: /var/imap
# Расположение самих ящиков
partition-default: /spool/imap
# Разрешение передачи по сети паролей в открытом виде
allowplaintext: yes
# Пользователь, имеющий админские права на ящики
admins:adm
# Отображает в логах время последнего доступа к ящику
logtimestamps: yes
# Разрешено ли юзерам запускать sieve-скрипты из своих домиков-нет
sieveusehomedir: false
# Если sieveusehomedir: false – местоположение скриптов sieve
sievedir: /usr/local/etc/imap/sieve
# использование хешинга, применяется, если очень много юзеров, в этом случае юзера для юзеров создается папка по заглавной букве, например для почта для юзеров user.test и user.admin будет храниться в /spool/imap/t/user и /spool/imap/a/user соответственно, если эту опцию не указывать, то по умолчанию папка для всех пользователей /spool/imap/user и в ней создаются новые папки по названию пользователя
hashimapspool:true
# Метод проверки открытого пароля
sasl_pwcheck_method:saslauthd
# Механизм аутентификации
sasl_mech_list:plain
# Не заменяет запрещенные RFC 822 символы на X
munge8bit: 0
# Имя сервера в приветствиях
servername: my_Server

Конфиг готов, тепрь необходимо создать директории, где будут храниться ящики и дать на них права доступа:

# mkdir /var/imap
# mkdir /spool
# chown -R cyrus:mail /var/imap
# chown -R cyrus:mail /spool
# echo ‘cyrus_imapd_enable=”YES”‘ >> /etc/rc.conf

Теперь создадим каталоги, необходимые для работы cyrus и запускаем его :

# su cyrus
%/usr/local/cyrus/bin/mkimap
reading configure file /usr/local/etc/imapd.conf…
i will configure directory /var/imap.
i saw partition /spool/imap.
done
configuring /var/imap…
creating /spool/imap…
done
%exit
# /usr/local/etc/rc.d/imapd start
Starting cyrus_imapd.

И проверяем как он запустился:

# sockstat -4|grep cyrus
cyrus pop3d 50733 4 tcp4 *:110 *:*
cyrus master 655 7 tcp4 *:143 *:*
cyrus master 655 10 tcp4 *:993 *:*
cyrus master 655 13 tcp4 *:110 *:*
cyrus master 655 16 tcp4 *:995 *:
# telnet localhost 143
Trying ::1…
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=PLAIN SASL-IR] my_Server Cyrus IMAP4 v2.3.11 server ready
a1 logout
* BYE LOGOUT received
a1 OK Completed
Connection closed by foreign host.

Теперь нам необходимо создать cyrus id, заходим под юзером adm, который имеет право это делать:

# cyradm –user adm localhost
Password:
localhost.domain> cm user.test
localhost.domain> lm
user.test (\HasNoChildren)
localhost.domain>quit

Чтобы удалить юзера необходимо сначала дать права adm на удаление (c) или все права(all):

localhost.domain> sam user.test adm all
localhost.domain> dm user.test

В состав cyrus-imap входит imtest для тестирования входа на сервер спмощью разных механизмов аутентификации, мы используем пароль в открытом виде (plain), ниже показан пример теста:

# /usr/local/bin/imtest -m login -a test localhost
S: * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=PLAIN SASL-IR] my_Server Cyrus IMAP4 v2.3.11 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=PLAIN SASL-IR ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE URLAUTH
S: C01 OK Completed
Please enter your password:
C: L01 LOGIN test {4}
S: + go ahead
C: <omitted>
S: L01 OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE URLAUTH] User logged in
Authenticated.
Security strength factor: 0

После ввода пароля получаем вышеуказанное сообщение, тут строка L01 OK говорит, что тест прошел успешно, если пароль не проходит пишет L01 NO Login failed: authentication failure. Чтобы выйти вводим . logout.
Сам сервер настроен, при настройке почтового клиента мы получим содержимое ящика, теперь нам необходим настроить MTA для принятия доставки почты локальным пользователям. Аутентификация осуществляется через saslauthd, доступ к ящикам через cyrus-imapd.
MTA у нас sendmail, идем в /etc/mail – там находятся все необходимые нам файлы. Конфиг сендмейла sendmail.cf, это текстовый файл занимает около 58кб, править его очень неудобно и никому этого не рекомендую, для его настройки используется препроцессор m4, от обрабатывает конфиг *.mc и добавляет в sendmail.cf необходимые изменения, почитать о настройке sendmail можно здесь . Открываем дефолтный конфиг /etc/mail/freebsd.mc и добавляем в него:

MAILER(`cyrusv2′)dnl
define(`confLOCAL_MAILER’, `cyrusv2′)dnl

Я еще закоментировал строку “DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O'”, чтобы не открывался сокет на ipv6. Этот файл нужно сохранить под именем hostname.mc, в противном случае будет использоваться дефолтный freebsd.mc. Теперь нужно создать файл /etc/mail/local-host-names, в котором пишем наш домен, для которого sendmail будет принимать почту. Также создаем /etc/mail/access, в котором можем прописать от кого мы почту принимать не хочем. Далее устанавливаем:

# cd /etc/mail
# make all
# make install
# make restart

После этого добавляем в /etc/rc.conf автозагрузку sendmail:

sendmail_enable=”YES”
sendmail_flags=”-L sm-mta -bd -q30m”

Перегружаем сервер или запускаем из /etc/rc.d sendmail и проверяем – отправляем на адрес в Вашем домене письмо и смотрим в /var/log/maillog как доходят письма. Если пользователь существует, т.е. его добавили через cyradm, то почта положится ему в ящик, если пользователя нет – отправится ответ на адрес отправителя, что пользователя не существует – это есть большой минус, т.к. спамеры указывают в mail from или несуществующие адреса отправителей или существующие адреса пользователей, которым и прийдет баунс, в свою очередь они меют право пожаловаться в SpamCop и Ваш провайдер попросит Вас поправить конфиг или вобще отключит 25 порт. Эту проблему можно решить если заставить Sendmail проверять получателя на этапе SMTP сессии, но я не знаю как это сделать, узнаю – отпишу, но это врядли, т.к. перехожу на exim, чего и Вам желаю :-)

Источник информации:
1. http://dreamcatcher.ru/index.php?option=com_content&task=view&id=11&Itemid=6
2. http://bog.pp.ru/work/Cyrus_IMAP.html
3. http://cyrus.org.ru

 

© Mau, 2008.