Установка IMAP4-сервера на базе Cyrus-IMAPD + Sendmail::Журнал СА 10.2003
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6128
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6839
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4123
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2971
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3776
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3784
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6273
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3129
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3427
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7242
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10612
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12331
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13964
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9095
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7049
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5356
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4587
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3397
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3123
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3376
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 2996
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Установка IMAP4-сервера на базе Cyrus-IMAPD + Sendmail

Архив номеров / 2003 / Выпуск №10 (11) / Установка IMAP4-сервера на базе Cyrus-IMAPD + Sendmail

Рубрика: Администрирование /  Электронная почта

ДЕНИС ШЕРГИН

Установка IMAP4-сервера на базе Cyrus-IMAPD + Sendmail

Преамбула

Данный материал – не сравнительный обзор протоколов работы с почтой, а практические рекомендации по установке IMAP-сервера (Internet Message Access Protocol) для тех, кто уже определился, что именно это ему необходимо.

Тем, кто еще не определился с выбором, рекомендую почитать http://www.imap.org/imap.vs.pop.brief.html.

В результате описанных в этой статье действий мы должны получить работоспособный IMAP4-сервис, при работе с которым поддерживаются защищенные методы авторизации, почта хранится и сортируется на сервере, не нужно заводить реальных почтовых пользователей в системе.

Дополнительно настроим веб-интерфейс к системе фильтрации почты на сервере.

Использовавшаяся в процессе подготовки материала операционная система – Slackware Linux 9.0, MTA – Sendmail 8.12.9, MUA – sylpheed 0.9.4.

Везде, где в тексте встречается your.hostname.domain – заменять на реальное имя вашего сервера.

Подготовительные работы

Сборка cyrus-sasl

SASL (Simple Authentication and Security Layer) – это набор утилит и библиотек, необходимых для авторизации пользователей.

В документации по cyrus-sasl рекомендуется отключить все неиспользуемые механизмы авторизации, я решил оставить только digest-md5, cram-md5, plain, anonymous.

# tar zxvf ./cyrus-sasl-2.1.15.tar.gz

# cd cyrus-sasl-2.1.15

# ./configure --disable-otp --disable-krb4 --disable-gssapi --without-pam

# make

# make install

# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

# ldconfig

Заводим базу пользователей. Добавляем пользователя (подобным образом нужно будет добавить всех почтовых пользователей):

# saslpasswd2 -c cyradmin

Указываем пароль, после этого у нас должен получиться файл /etc/sasldb2 (это и есть база паролей для авторизации):

# chown cyrus.mail /etc/sasldb2

Примечание: как уже говорилось ранее, почтовые пользователи не пересекаются с системными.

Сборка cyrus-imapd

Теперь соберем непосредственно IMAP-сервер. Здесь все просто:

# tar zxvf ./cyrus-imapd-2.1.15.tar.gz

# cd cyrus-imapd-2.1.15

# ./configure

# make

# make install

Примечание: по умолчанию при обработке писем, в заголовках которых содержатся 8-битные символы (это противоречит RFC), заменяет их символами «X». Если вы хотите, чтобы такие письма проходили без модификации – можете перед сборкой внести соответствующие изменения в файлах imap/message.c и imap/lmtpengine.c (закомментировав строки 270 и 860 соответственно). Но, вообще-то, это нужно только в специфических случаях и лучше оставить все как есть, чтобы не противоречить стандарту.

Настраиваем cyrus-imapd

Для того чтобы в случае неполадок облегчить поиск проблемы, включаем журналирование посредством syslog.

Добавляем в /etc/syslog.conf следующее:

local6.debug     /var/log/imapd.log

auth.debug       /var/log/auth.log

Перезапускаем syslogd:

# killall -1 syslogd

Создаем /etc/imapd.conf:

# touch /etc/imapd.conf

Его содержимое:

configdirectory: /var/imap

partition-default: /var/spool/imap

sievedir: /var/spool/sieve

admins: cyradmin

sasl_pwcheck_method: auxprop

sasl_auxprop_plugin: sasldb

sasl_mech_list: CRAM-MD5 PLAIN

tls_cert_file: /var/imap/server.pem

tls_key_file: /var/imap/server.pem

Подробнее о возможных используемых опциях можно посмотреть в соответствующей man-странице:

# man imapd.conf

Создаем каталоги и выставляем на них права:

# mkdir /var/imap

# chmod 750 /var/imap

# mkdir /var/spool/imap

# chmod 750 /var/spool/imap

# mkdir /var/spool/sieve

# chmod 750 /var/spool/sieve

Создаем структуру остальных каталогов (в документации к cyrus-imapd сказано, что надо сделать «su cyrus» и только потом выполнять следующие действия, но я устанавливал из-под рута и потом просто раздал права доступа):

# cd cyrus-imapd-2.1.15/tools

# ./mkimap

# chown -R cyrus.mail /var/imap

# chown -R cyrus.mail /var/spool/imap

# chown -R cyrus.mail /var/spool/sieve

Примечание: если у вас файловая система ext2 на том разделе, где будут размещаться базы, то почитайте оригинальную документацию к cyrus-imapd.

Если у вас прописаны в (x)inetd.conf сервисы pop3, imap, pop3s, kpop, lmtp, sieve – закомментируйте их и перезапустите (x)inetd.

В /etc/services прописываем (если там нет этих записей):

pop3      110/tcp

imap      143/tcp

imsp      406/tcp

acap      674/tcp

imaps     993/tcp

pop3s     995/tcp

kpop      1109/tcp

sieve     2000/tcp

lmtp      2003/tcp

fud       4201/udp

Из каталога master/conf берем конфигурационный файл:

# cp master/conf/normal.conf /etc/cyrus.conf

Пробуем вручную запустить процесс master:

# /usr/cyrus/bin/master &

Генерируем сертификаты (в процессе нужно будет заполнить несколько полей информацией об организации):

# openssl req -new -x509 -nodes -out /var/imap/server.pem -keyout /var/imap/server.pem -days 365

# chown cyrus.mail /var/imap/server.pem

Вышеприведенной командой мы создали X.509 сертификат, действительный 1 год (эта строчка для генерации есть в документации к cyrus-imapd).

За более подробной информацией по поводу сертификатов и openssl, в общем, можно сходить на http://www.openssl.org в раздел документации, правда, там зачастую можно встретить надписи [STILL INCOMPLETE].

Настраиваем sendmail

Нам понадобится пакет sendmail-cf, если вы ставили sendmail из пакета (package) в slackware.

Создаем наш mc-файл конфигурации sendmail:

# cd /usr/share/sendmail/cf/cf

# cp ./linux.smtp.mc ./current.mc

Добавляем туда строчки:

define(`confLOCAL_MAILER", `cyrusv2")dnl

MAILER(`cyrusv2")dnl

Если вы ставили sendmail-cf из пакета, то в скрипте Build надо заменить строчку:

M4=`sh $BUILDTOOLS/bin/find_m4.sh`

на

M4=/usr/bin/m4

Примечание: если вы устанавливаете imapd таким образом, что сокет для работы с почтой находится в отличном от /var/imap/socket/lmtp месте, то необходимо будет исправить путь в файлике cyrusv2.m4 (по умолчанию в slackware его можно найти в /usr/share/sendmail/cf/mailer).

Если у вас sendmail версии 8.12.8 и ниже – загляните в документацию к cyrus-imapd, но я бы посоветовал обновить sendmail.

Собираем новый sendmail.cf:

# ./Build current.cf

# cp ./current.cf /etc/mail/sendmail.cf

Добавляем запуск /usr/cyrus/bin/master в стартовые скрипты (например, в /etc/rc.d/rc.init2) и перезагружаемся.

Проверяем работоспособность

Воспользуемся утилитой imtest:

# /usr/local/bin/imtest -m cram-md5 -a cyradmin your.hostname.domain

Вводим пароль, если нам отвечают A01 OK, то все нормально, если ругаются – идем в /var/log курить логи до просветления.

Создаем почтовые ящики

Для управления почтовыми ящиками в комплекте с cyrus-imapd идет утилита cyradm.

После инсталляции для запуска cyradm мне пришлось скопировать часть библиотек, которые поставились не совсем корректно (при сборке cyrus-imapd с --prefix=/usr такой проблемы не будет):

# cp -R /usr/local/lib/perl5 /usr/lib/

Типовая процедура создания нового почтового аккаунта:

# saslpasswd2 -c dummyuser

# cyradm --user cyradmin --server your.hostname.domain

В cyradm создаем почтовый ящик для пользователя и устанавливаем квоту в 20 Мб:

your.hostname> cm user.dummyuser

your.hostname> sq user.dummyuser 20480

Все, теперь настраиваем клиентскую часть и проверяем, что у нас получилось.

В качестве клиента я использовал sylpheed, собранный с поддержкой SSL (configure --enable-ssl).

Настраиваем sieve

Sieve – язык, на котором пишутся почтовые фильтры в cyrus-imapd.

Проверяем работоспособность сервера sieve (timsieved):

# telnet your.hostname.domain sieve

Если отвечают «IMPLEMENTATION» «Cyrus timsieved v2.1.15» ... OK, то все в порядке.

Пишем на sieve скрипт для разбора почты (приведу здесь несколько типовых действий, дальше должно быть понятно):

require ["reject","fileinto"];

# не принимаем почту и высылаем сообщение об отказе:

if address :is :all "From" "annoying@badnet.domain" {

           reject "Достали";

}

# фильтруем по subject корпоративный список рассылки:

if header :contains "Subject" "corporate mailing" {

           fileinto "INBOX.lists.corporate";

}

# еще один список рассылки:

if header :is "List-Id" ";" {

           fileinto "INBOX.lists.bugtraq";

}

# а это вообще странные письма - адресованы не нам:

if anyof ( not address :all :contains ["To", "Cc", "Bcc"] "myname@myaddress.domain" ) {

           fileinto "INBOX.bad";

}

.

Подключаемся к серверу sieve, загружаем и активируем скрипт:

# sieveshell -u cyradmin your.hostname.domain

> activate test

> quit

Если все сделано правильно, то на этом все, мы получили разбор почты по каталогам на сервере.

Если такая система управления фильтрацией вас устраивает, дальше можно не читать.

Далее рассматривается прикручивание веб-интерфейса к sieve для того, чтобы пользоваться возможностями sieve могли и простые пользователи.

Устанавливаем библиотеку c-client

Для того чтобы впоследствии скомпилировать PHP с поддержкой imap, необходимо установить бибилиотеку c-client.

Инструкции по сборке я нашел на www.php.net, поискав по сайту с ключевым словом «imap».

Скачиваем тарбол, распаковываем его, смотрим внутрь – а там нас поджидает веселый сюрприз в качестве одного Makefile.

Авторы сего пакета, по всей видимости, не подозревают о существовании таких благ цивилизации, как autoconf и иже с ним, поэтому configure скрипта внутри нет, вместо него эксплуатируются мозги администратора.

Просматриваем содержимое Makefile, среди комментариев ищем наиболее подходящее вашей системе описание, например, это «slx» («Linux using -lcrypt to get the crypt() function»).

Затем пробуем скомпилировать c-client с выбранной опцией:

# make slx

Как показывает практика, обычно с разбега сборка не удастся из-за различий в расположении файлов – придется немного поработать вместо configure, подбирая эти опции вручную.

Можно либо править Makefile, либо указывать опции при запуске make.

Для моей системы команда сборки выглядела следующим образом:

# make slx EXTRASPECIALS="SSLINCLUDE=/usr/include/openssl SSLLIB=/usr/lib"

При возникновении проблем помогает вдумчивое прочтение Makefile.

Итак, компиляция успешно завершена, теперь следующий этап – инсталляция скомпилированного (да, не удивляйтесь, make install не сработает – авторы решили выдержать все в одном стиле и не написали такой цели в Makefile, так что опять будем делать все вручную).

Создаем каталог /usr/local/imap-2002d и подкаталоги /usr/local/imap-2002d/include и /usr/local/imap-2002d/lib.

Из подкаталога c-client копируем все *.h-файлы в include, все *.c в lib.

В том же каталоге находим файл c-client.a и копируем его в lib, переименовывая в libc-client.a.

На этом с установкой c-client покончено, лично я в процессе инсталляции не раз помянул недобрым словом разработчиков за такое жестокое отношение к пользователям.

Устанавливаем веб-сервер

Предварительно собираем libmcrypt (тут все тривиально):

# tar zxvf ./libmcrypt-2.5.7.tar.gz

# cd libmcrypt-2.5.7

# ./configure

# make

# make install

# ldconfig

Установка и настройка Apache+PHP – очень обширная тема, я ограничусь лишь минимальным количеством разъяснений, которого должно хватить для достижения наших целей.

Распаковываем Apache, запускаем скрипт configure без каких-либо параметров.

Распаковываем php (в том же каталоге, где развернули apache), собираем:

# ./configure --with-imap=/usr/local/imap-2002d --with-imap-ssl=/usr/include/openssl

--with-apache=./../apache_1.3.28 --with-mcrypt=/usr/local --with-iconv

# make

# make install

Пути к файлам могут изменяться на разных машинах, поэтому, если сборка не удалась, – проверьте пути (в частности, каталог с исходниками Apache может называться по-иному).

Копируем файлик php.ini-recommended в /usr/local/lib/php.ini.

Если php успешно собралось и заинсталлировалось, возвращаемся в каталог с Apache:

# ./configure --activate-module=src/modules/php4/libphp4.a

# make

# make install

Если все собралось, идем в каталог, куда заинсталлировался Apache (по умолчанию – /usr/local/apache), в каталоге bin запускаем веб-сервер командой:

# ./apachectl start

Проверяем работоспособность сервера:

# lynx http://your.hostname.domain/

Либо просто любым браузером обращаемся по адресу нашего сервера.

Если видим ободряющую надпись «If you can see this, it means that the installation of the Apache web server software on this system was successful», значит – все нормально, иначе перечитываем вышенаписанное и идем читать документацию по php и apache до тех пор, пока не наступит счастье.

Устанавливаем SmartSieve

В принципе можно удовлетвориться взаимодействием с sieve-сервером посредством sieveshell, но с точки зрения рядового пользователя такой метод управления почтой вряд ли можно назвать удобным.

Альтернативой может послужить использование Smart-Sieve (http://smartsieve.sourceforge.net) – это написанный на PHP менеджер sieve-скриптов, позволяющий черз веб-интерфейс управлять правилами сортировки почты.

Изначально я скачал с официального сайта smartsieve-i18n версии 0.5.1, однако при его использовании столкнулся с проблемой работы с русскими именами каталогов в почтовом ящике. Решив, что транслит и другие компромиссы – это не наш метод, пропатчил это дело, заодно написав русскую версию.

Русифицированную версию smartsieve можно скачать по адресу: http://diesel.tomsk.ru/linux/files/smartsieve-i18n-ru.tar.gz.

Вся процедура установки сводится к распаковке тарбола и копированию содержимого в структуру каталогов, являющуюся структурой http-корня веб-сервера.

По умолчанию опция DocumentRoot равна «/usr/local/apache/htdocs». Уточнить ее значение можно в основном конфигурационном файле apache – httpd.conf (по умолчанию он находится в /usr/local/apache/conf).

Допустим, мы скопировали файлы smartsieve в /usr/local/apache/htdocs/smartsieve.

Проверяем работоспособность, открывая в браузере страницу http://your.hostname.domain/smartsieve.

Логинимся под именем одного из заведенных пользователей, пробуем создавать правила (при входе в форме выбираем русский язык для корректной работы с русскоязычными каталогами).

Небольшое примечание: smartsieve может не работать с sieve-скриптами, написанными вами вручную, а не с его помощью.

Заключение

Если вы дошли до этого места и у вас все работает, значит, мы достигли поставленной вначале цели.

При написании были активно использованы оригинальная документация к cyrus-imapd и поисковый сервер google.

Отдельное спасибо Антону Жаровцеву (aka warm) за консультации.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru