Опыт настройки sendmail + dovecot + ispmanager под FreeBSD

Электропочта России

Провозившись некоторое время с настройкой почты (sendmail+dovecot) в freebsd я решил состряпать данную инструкцию, т.к. в целостном виде такого нигде не нашел.

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

Реализованы задачи:
1) Перевод формата ханения почты из mailbox (хранение в одном файле) в maildir. (Миграция с mbox на maildir). Настройка ispmanager для корректной работы с maildir.
2) Принудительная авторизация по SMTP для локальных пользователей (чтобы избежать возможности рассылки спама локальным пользователям от адреса локальных-же пользователей).

Установленный софт, который подвергся конфигурации :)
ОС: FreeBSD 6.3
sendmail
dovecot
procmail
ispmanager

1. Миграция с mbox на maildir

Зачем понадобилась миграция с mbox на maildir?
минусы mbox, которых было достаточно, чтобы выполнить миграцию:

  • Для корректной работы imap может потребоваться нетривиальная настройка.
  • Mbox хранит все письма в одном файле. При открытии ящика - этот файл блокируется целиком и сделать с ним уже можно далеко не всё.
  • Чтобы вручную перенести письмо из одного ящика в другой - скорее всего нужно извлечь текст Письма откуда-то из середины файла, потом прицеплять к другому файлу. (в maildir каждое письмо - отдельный файл, чтобы его перенести - можно просто перенести файл).
  • Намного медленнее идёт сортировка и поиск.

Настройка sendmail + procmail:

Т.к. sendmail не умеет напрямую работать с maildir-форматом начнём с того, что установим procmail:
make -C /usr/ports/mail/procmail install clean

Открываем конфиг sendmail: исходник конфига у меня лежал в /etc/mail, менять нужно конфиг .mc по имени хоста, например intome.ru.mc или localhost.mc, не забудьте сделать резевную копию ;)

После строк

FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)

добавляем:
FEATURE(local_procmail)
и в конец конфига, перед строками
MAILER(local)
MAILER(stmp)

добавляем:
MAILER(procmail)dnl
(dnl добавлено в конце строки - чтобы закомментировать следующую, т.е. MAILER(local))

Пересобираем конфиг и перезапускаем sendmail:

make
make install
make restart

при запуске make - покажет какой .mc файл используется для сборки конфига

Для директорий maildir я решил выбрать путь
/home/пользователь/data/email/домен/ящик/
соответственно, в глобальном конфиге procmail прописал куда складывать почту:
в файле /usr/local/etc/procmailrc пишем:

MAILDIR=$HOME/.maildir
DEFAULT=$MAILDIR/

(для отладки можно добавить строку LOGFILE=/var/log/procmail.log но не забыть потом этот лог отключить или настроить периодическую чистку)

Теперь почта складывается в maildir

Настройка dovecot:

Заменяем в конфиге с пользователями mbox на maildir:

cd /usr/local/etc/
cat dovecot.passwd | \
awk -F\: '{ print $1":"$2":"$3":"$4"::"$6":::maildir:"$6"/.maildir" }' > dovecot.passwd.new
mv dovecot.passwd.new dovecot.passwd

Перезапускаем dovecot
/usr/local/etc/rc.d/dovecot restart

Если старая почта хранилась в maildir - достаточно скопировать файлы писем в соответствующие папки.
Чтобы сохранить почту, хранящуюся в mbox нужно устновить mb2md:
make -C /usr/ports/mail/mb2md install clean

И использовать для ящиков. У меня mbox хранились в /var/mail/virtuser_номер
соответственно, команда:
mb2md -s /var/mail/virtuser_номер -d /home/пользователь/data/email/домен/ящик/.maildir/

Не забудьте выставить соответствующие права для перенесённой почты (если команда миграции запускалась под рутом, то владелец файлов будет root и virtuser_номер уже не сможет ничего сделать с собственными письмами, только если dovecot обращается к файлам не от рута):
например, так:

cd /home/пользователь/data/email/домен/ящик/
chown -R virtuser_номер:пользователь ./*

Настройка ISPManager:

Дописываем в конфиг /usr/local/ispmgr/etc/ispmgr.conf рядом с другими Option (после MTA и POP3)

Option Procmail
Option MailDir

2. Принудительная авторизация по SMTP для локальных пользователей

К счастью, было найдено готовое цельное решение (исходная ссылка с комментариями на Opennet, спасибо Medlar)

Дописал с небольшим изменением в конец конфига sendmail
ВНИМАНИЕ, ВАЖНО! - в тексте между левой и правой частью строк - символы табуляции.
Также добавлена строка Rвнешний.ip.серв.ера       $@OK (поменяйте на внешний ip своего сервера) - для случая если локальная почта отправляется с внешнего ip, а не 127.0.0.1:

LOCAL_CONFIG
Ksyslog syslog
 
LOCAL_RULESETS
SLocal_check_rcpt
R<>             $#error $@ nouser $: "553 User address required"
R$@             $#error $@ nouser $: "553 User address required"
R$*             $: $1 $| $&f
R$* $| $*               $: $2 $| $>Parse0 $>3 $1
R$* $| $*               $: $2 $| $>Parse0 $>3 $1
R$+<@$=w.>  $|  $+<@$=w.>       $: $>CheckLocalAuth
R$+<@$+>  $|  $+<@$+>           $@ $1
R$+ $| $+               $: $>CheckLocalAuth
R$*             $: $(syslog syslog:PROBLEM: $1 $) $1
 
SCheckLocalAuth
R$*             $: $&{client_addr}
R127.0.0.1              $@OK
Rвнешний.ip.серв.ера              $@OK
R$*             $: < $&{auth_authen} >
R< $+ >         $@ OK
R$*     $#error: $: 553 Sorry, you must use smtp-authentication.

Пересобираем конфиг и перезапускаем sendmail:

make
make install
make restart

Всё, почта работает в maildir, авторизация требуется :)


# | BFox (?)

анонимус аватар

Отличная статья, продолжаю дальше ковырять сендмэил )
Я правильно понимаю, что бы убрать аутентификацию нужно просто удалить
define(`confAUTH_OPTIONS', `A')
?

18 Декабрь, 2009 - 02:23

# | teerex

teerex аватар

т.е. как? совсем убрать авторизацию?
Я бы не советовал это делать.
Если надо отправлять всю подряд почту из локалки, например - то можно прописать в /etc/mail/access нечто вроде
192.168.88 RELAY
и потом выполнить
# makemap hash /etc/mail/access .db < /etc/mail/access
это разрешит безусловный приём и отправку почты от сети 192.168.88.0/24, с любого адреса.
(если у сервер уже настроенный по-умолчанию - то там указаны только адреса самого сервера)
Но опять-же такая настройка чревата спам-рассылками из локалки...

Ну а чтобы отменить самописные правила обработки из этой статьи, 2 пункт - надо их удалить из конфига .mc и пересобрать конфиг.

22 Декабрь, 2009 - 16:10

# | BFox (?)

анонимус аватар

Огромное спасибо! я просто только переехал на ISP manager и отправка почты перестала работать из-за авторизации вордпресс не посылает письма )
Спасибо за советы.
Пойду дальше настраивать )

22 Декабрь, 2009 - 16:55

Оставить комментарий

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

Подробнее о форматировании

КАПЧА
А ты не робот? Введи 5 цифр
                                                                 
88 ad8888ba, ad88888ba ad88888ba ad888888b,
,d88 8P' "Y8 d8" "8b d8" "88 d8" "88
888888 d8 Y8a a8P 8P 88 a8P
88 88,dd888bb, "Y8aaa8P" Y8, ,d88 aad8"
88 88P' `8b ,d8"""8b, "PPPPPP"88 ""Y8,
88 88 d8 d8" "8b 8P "8b
88 88a a8P Y8a a8P 8b, a8P Y8, a88
88 "Y88888P" "Y88888P" `"Y8888P' "Y888888P'

Enter the code depicted in ASCII art style.
To prevent automated spam submissions leave this field empty.