Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
# cd /usr/ports/mail/dovecot2 # make install clean # dovecot --version 2.1.15 |
Параметры сборки оставлены по умолчанию, выбрав только MySQL.
Для поддержки работы Sieve-фильтров (в том же Roundcube) необходимо установить еще один порт:
# cd /usr/ports/mail/dovecot2-pigeonhole # make install clean |
Устанавливаем dovecot-antispam плагин
# cd /usr/ports/mail/dovecot2-antispam-plugin/ # make install clean |
Конфигурационный файл dovecot-а второй версии в отличии от первого разбит на много отдельных конфигов, относящихся к настройке того или иного сервиса, мне это показалось удобным, поэтому наберемся терпения и приступим к их редактированию (все они лежат в одном каталоге /usr/local/etc/dovecot, комментарии будут минимальны, т.к. они хорошо задокументированы в самих файлах, здесь на сайте и на оф. вики). Настоятельно рекомендую не копипастить, т.к. многие закоментированные опции не приведены здесь, отображено только то, что я включил в конфиги, поэтому вдумчиво редактируйте свои конфиги по умолчанию:
Основной конфигурационный файл /usr/local/etc/dovecot/dovecot.conf
|
Файл подключения к базе данных /usr/local/etc/dovecot/dovecot-sql.conf.ext
|
Файл словаря SQL квот /usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
|
Файл аутентификации /usr/local/etc/dovecot/conf.d/10-auth.conf
|
Файл /usr/local/etc/dovecot/conf.d/auth-sql.conf.ext
|
Файл настройки логирования /usr/local/etc/dovecot/conf.d/10-logging.conf
|
Файл путей к ящикам и пространства имен /usr/local/etc/dovecot/conf.d/10-mail.conf
|
Файл сервисов и сокетов /usr/local/etc/dovecot/conf.d/10-master.conf
|
Файл настройки SSL /usr/local/etc/dovecot/conf.d/10-ssl.conf
|
Файл мастер сокета аутентификации для доставки корреспонденции /usr/local/etc/dovecot/conf.d/15-lda.conf
|
Файл протокола IMAP /usr/local/etc/dovecot/conf.d/20-imap.conf
|
Файл параметров ManageSieve /usr/local/etc/dovecot/conf.d/20-managesieve.conf
|
Файл протокола POP3 /usr/local/etc/dovecot/conf.d/20-pop3.conf
|
Файл настройки квот /usr/local/etc/dovecot/conf.d/90-quota.conf
|
Файл настройки фильтров Sieve /usr/local/etc/dovecot/conf.d/90-sieve.conf
|
Файл настройки плагинов, в нашем случае настраиваем подключенный dovecot-antispam (также в этом файле можно настроить любой другой подключаемый плагин) /usr/local/etc/dovecot/conf.d/90-plugin.conf
|
Содержимое скрипта /usr/local/etc/dovecot/overquoted для отправки квот, указанного в конфиге /usr/local/etc/dovecot/conf.d/10-master.conf
|
Ну вот вроде бы и закончили с конфигами Dovecot-а, аж не вериться :) Теперь для автостарта довекота добавляем в rc.conf
# echo 'dovecot_enable="YES"' >> /etc/rc.conf |
Запускаем и проверяем
# /usr/local/etc/rc.d/dovecot start # sockstat -4 -l | grep dovecot root dovecot 42460 15 tcp4 *:4190 *:* root dovecot 42460 24 tcp4 *:110 *:* root dovecot 42460 25 tcp4 *:995 *:* root dovecot 42460 32 tcp4 *:143 *:* root dovecot 42460 33 tcp4 *:993 *:* |
Итак, проверим работу dovecot на примере POP3
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK IMAP server ready. user username@domain.com.ua +OK pass yoursecretpass +OK Logged in. stat +OK 3006 380337139 quit +OK Logging out. Connection closed by foreign host. |
Если что-то пошло не так, смотрим лог tail -f /var/log/dovecot/mainlog и исправляем ошибки.
Во время настройки DSPAM столкнулся с фичей нехватки прав на бинарник DSPAM и его конфигурационный файл после установки. По умолчанию в файле Makeconf порта DSPAM указаны параметры сборки с владельцем root, когда я первый раз установил порт, то напролося на кучу ошибок в логах Dovecot-a о нехватке прав на запуск DSPAM. Поэтому, чтобы избежать не нужных нам проблем, перед установкой добавьте в /etc/make.conf следующее
|
Саму установку и настройку DSPAM я делал по этой статье
Установку и настройку EXIM с пользователями в MySQL описывать не буду, т.к. здесь есть множество статей на эту тему, остановлюсь только на настройке роутеров и транспорта для Dovecot, DSPAM а также аутентификации CRAM-MD5.
Роутеры проверки спама, необходимо вставить перед роутером локальной доставки Dovecot, это очень важно! Итак правим конфиг екзима /usr/local/etc/exim/configure
В секции begin routers после роутера system_aliases добавляем следующее:
|
В секции begin transports порядок добавления не важен, просто вставляем:
|
Аутентификация у меня работает через Dovecot, правим секцию begin authenticators
|
Настройка Exim закончена.
Теперь, к примеру, если Вы получили письмо, которое является заведомо спамом, но попало по ошибке фильтра во входящие, то чтобы переучить спамфильтр и сказать ему, что это письмо спамовое, достаточно просто переместить его в папку Спам(Junk) и после этого в логе соответствующего пользователя появиться запись свидетельствующая о переобучении спам-фильтра
# tail -f /var/db/dspam/data/username@domain.com.ua/username@domain.com.ua.log 1369209224 I spammail@pisem.net 519c7988278601581114498 dddddd Delivered <2afbf94cd4594c6f22610d8c18fc63cad334e4c2@mail.qip.ru> 1369209324 M <None Specified> 519c7988278601581114498 <None Specified> Retrained |
А если письмо снова вернуть во Входящие, то письмо будет считаться не спамом.
Пользователей в базе я создаю из веб-панели postfixadmin, оттуда пароли автоматически криптуются в CRAM-MD5. Есть одна важная особенность в конфиге postfixadmin, касающаяся именно второй версии Dovecot, это путь к бинарнику создания криптованого пароля для пользователя, в отличии от первой версии Dovecot используется другой бинарник с параметрами. Вот собственно параметры конфига, отвечающие за вышесказанное:
|
Аутентификацию по механизму CRAM-MD5 можно проверить из того же Roundcube, вот кусок лога довекот:
# tail -f /var/log/dovecot/mainlog May 24 13:48:59 auth: Debug: auth client connected (pid=42864) May 24 13:48:59 auth: Debug: client in: AUTH 1 CRAM-MD5 service=imap secured session=HWXci3TdfgBOLsbU lip=1.2.3.4 rip=1.2.3.4 lport=993 rport=10878 May 24 13:48:59 auth: Debug: client passdb out: CONT 1 PDI2NzU0ODY2Mjg3MTE0MjguMTM2OTM5MjUzOUBteHZtLm1hbmZyZWUua2lldi51YT4= May 24 13:48:59 auth: Debug: client in: CONT<hidden> May 24 13:48:59 auth-worker(42818): Debug: sql(username@domain.com.ua,1.2.3.4): query: SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = 'username@domain.com.ua' AND `active`='1' May 24 13:48:59 auth: Debug: client passdb out: OK 1 user=username@domain.com.ua May 24 13:48:59 auth: Debug: master in: REQUEST 3470262273 42863 1 a88e3cf4ba52caee8dae888e230985b6 May 24 13:48:59 auth: Debug: master userdb out: USER 3470262273 username@domain.com.ua home=/var/mail/exim/domain.com.ua/username@domain.com.ua/ uid=26 gid=26 quota=dict:storage=100000::proxy::sqlquota quota_rule=*:storage=102400000B May 24 13:48:59 auth-worker(42818): Debug: sql(username@domain.com.ua,1.2.3.4): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26 AS `gid`, concat('dict:storage=', CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule FROM `mailbox` WHERE `username` = 'username@domain.com.ua' AND `active`='1' May 24 13:48:59 imap-login: Info: Login: user=<username@domain.com.ua>, method=CRAM-MD5, rip=1.2.3.4, lip=1.2.3.4, mpid=42866, TLS, session=<HWXci3TdfgBOLsbU> |
Как видно из лога все прошло без ошибок.
Переходя на новый сервер, необходимо переместить все пользовательские ящики, таким образом, чтобы мейлдиры после Courier-а лягли в структуру Dovecot, сразу начал читать оф. вики довекота http://wiki2.dovecot.org/Migration/Courier но процедура оказалась слишком монструозной и длительной. Я решил отказаться от такого метода и вспомнил про перловый скрипт imapsync, как оказалось не напрасно. Нагуглил красивое решение для массовой синхронизации всех почтовых ящиков, выдергивая в цикле логины и пароли пользователей из базы старого сервера (соединяться с базой можна по сети либо импортнуть ее на новый сервер под другим именем). На новом сервере перед синхронизацией все пользователи должны быть созданы предварительно либо скриптом, либо вручную, т.к. пароли в базу будут ложиться в криптованом виде. Я у себя создал вручную, по причине небольшого количества пользователей. Вот сам скрипт:
|
Тестовая синхронизация двух ящиков суммарным объемом 900мб заняла очень большое время - порядка 2 часов, поэтому почитав фак на страничке разработчика я добавил в строку синхронизации кеширование, отменил подсчет размера папок и изменил временный каталог для кэша в итоге кусок скрипта отвечающий за imapsync выглядит так:
$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $dbhost --user2 $user2 --password2 $m_pass` --authmech2 CRAM-MD5 --tmpdir /var/tmp --nofoldersizes --usecache; |
Вторичный запуск синхронизации рекомендуется запускать вместо --usecache с параметром --useuid - собственно для использования построенных индексов в кеше:
$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $dbhost --user2 $user2 --password2 $m_pass` --authmech2 CRAM-MD5 --tmpdir /var/tmp --nofoldersizes --useuid; |
Вот собственно и все, чем я хотел поделиться с общественностью, т.к. сам в свое время не нашел в едином месте материала объединяющего все моменты и нюансы настройки данной связки.
Используемые материалы:
http://wiki2.dovecot.org/
http://www.lissyara.su/
http://www.info-x.org
http://extmemory.blogspot.com/2009/10/imapsync.html
размещено: 2013-05-23,
последнее обновление: 2014-05-05,
автор: freeman_tnu
Олег М., 2013-09-20 в 15:43:59
Сегодня настраиваю по вашей инструкции сервер, не смотря на то что статья относительно недавняя и версия FreeBSD 9.1 тоже, очень много изменения в обновленных портах, особенно в Dovecot.
Хочу попросить автора дописать в статье как именно он устанавливал и настраивал неописанные выше порты, для опытных людей в этом нету особого смысла но для новичков вроде меня это важно. Очень удобно когда настраиваешь все по одному источнику, а не собираешь конструктор из кучи инструкций написанных разными людьми и для разных целей, после такого долго приходится искать где ошибка и как ее устранить.
Заранее спасибо и спасибо за уже написанную статью.
freeman_tnu, 2013-09-20 в 16:22:19
Какие именно порты Вас интересуют? т.к. Dovecot был собран с опциями по умолчанию, кроме включения mysql.
И лучше обсуждать это в форуме
Олег М., 2013-09-30 в 0:41:21
Добавь ссылку на полный конфиг Exim (хотя бы без описания) и на базу MySQL
freeman_tnu, 2013-09-30 в 11:21:44
У меня конфиг один в один как в этой статье и об этом я тут упомянул. База используется из postfixadmin(создается автоматически при установке админки из веб-странички), о чем я тоже тут писал. Единственное изменение конфига exim это добавление роутеров, транспорта dovecot и аутентификации, смотрите здесь я описал как и куда их вставлять. Просто я не вижу смысла плодить одинаковые статьи, у Лисяры в статье все описано досконально.
Олег М., 2013-10-09 в 3:13:02
Как правильно разрешить отправку почты удаленным пользователям? Провайдер закрывает 25 порт, 465 и 587 открыты.
freeman_tnu, 2013-10-09 в 11:12:39
настройте ssl в exim
http://forum.lissyara.su/viewtopic.php?f=20&t=3577&start=25#p249410
Олег М., 2013-10-25 в 2:22:20
freeman_tnu, будь так добр помоги уже довести до ума сервер раз уж я почти все настроил по твоей инструкции, мне деваться теперь некуда, теперь сервер обслуживает предприятие и довести его до ума я просто обязан. Ты же не бросишь меня на произвол :-) и так по порядку, начну с самого срочного.
1. DSPAM - строк обучения уже прошел, он принял более 1000 писем и я ему отправил свыше 250 спамовых писем на spam-321@домен.ua. Но он так и не отфильтровывает спам, при проверке выше указанным методом пишет что письмо не является спамом, хотя именно это письмо я ему в спам базу добавил. Во обработки почты в логи ничего не пишет, только когда вручную выполняю проверку.
Судя по письму он проверку выполняет:
Received: from mailnull by mail.домен.ua with spam-scanned (Exim 4.80.1 (FreeBSD))
Вот лог когда в IMAP попытался мышкой перетянуть спам в папку спама:
[code]
imap(mail-copy-mailbox@домен.ua): Debug: dspam error: ..2632 prefix=imap(mail-copy-mailbox@домен.ua):
Oct 25 01:18:25 imap: Error:
Oct 25 01:18:25 imap: Error:
Oct 25 01:18:25 imap(mail-copy-mailbox@домен.ua): Debug: dspam error: ..2632 executing /usr/local/bin/dspam failed: 13 (uid=26, gid=26)
Oct 25 01:18:25 imap: Error:
Oct 25 01:18:25 imap: Error:
[/code]
freeman_tnu, 2013-10-25 в 11:26:08
Олег М http://forum.lissyara.su/viewtopic.php?f=20&t=39436&p=352926#p352926
gyurza2000, 2013-12-11 в 2:17:12
Статья конечно прикладная и интересная, для меня как, впервые осваивающего DSPAM, и вообще, не профи в UNIXах, но, именно для новичка есть много нюансов.
Копипастом конфиг себе не закинешь - опечатки, ошибки...вобщем не всё заработает :)
command = где то написано в кавычках, а где то нет. Как правильно?
— %u - две чёрточки где то есть, а где то нет. А как правильно?
Но, в конечном итоге, всё вроде бы заработало. Спаибо огромное :)
freeman_tnu, 2013-12-11 в 13:24:00
gyurza2000
Я же в статье написал ;)
"Настоятельно рекомендую не копипастить, т.к. многие закоментированные опции не приведены здесь, отображено только то, что я включил в конфиги, поэтому вдумчиво редактируйте свои конфиги по умолчанию:" (с)
command = с кавычками и без кавычек работает, правильно оба варианта (читаем доку по конфигу экзима)
- %u смотрите в контексте параметров запуска обучения dspam-а и Вам все станет ясно.
gyurza2000, 2013-12-11 в 13:41:38
freeman_tnu,автор, раз уж Вы отвечаете, зайдите пжлст в ветку обсуждения данной статьи, там на 3й стр. описана моя проблема - дублирование входящих писем и отсутствие метки SPAM в письмах, перемещаемых в папку СПАМ. Может подскажите куда копать?
Aleksey77, 2018-04-17 в 16:09:24
Настройка квот!!!!
quota = dict:User quota::noenforcing:proxy::sqlquota
Параметр noenforcing нужно убирать, из за него квоты работают в режиме мониторинга, то есть реально квота на сервере не работает.
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [12 шт.]