Опыт настройки 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 цифр
                                                            
ad88888ba ad88888ba 88 88 ad888888b,
d8" "8b d8" "88 ,d88 ,d88 d8" "88
Y8a a8P 8P 88 888888 888888 a8P
"Y8aaa8P" Y8, ,d88 88 88 aad8"
,d8"""8b, "PPPPPP"88 88 88 ""Y8,
d8" "8b 8P 88 88 "8b
Y8a a8P 8b, a8P 88 88 Y8, a88
"Y88888P" `"Y8888P' 88 88 "Y888888P'

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