Провозившись некоторое время с настройкой почты (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')
?
# | teerex
т.е. как? совсем убрать авторизацию?
Я бы не советовал это делать.
Если надо отправлять всю подряд почту из локалки, например - то можно прописать в
/etc/mail/access
нечто вроде192.168.88 RELAY
и потом выполнить
# makemap hash /etc/mail/access .db < /etc/mail/access
это разрешит безусловный приём и отправку почты от сети 192.168.88.0/24, с любого адреса.
(если у сервер уже настроенный по-умолчанию - то там указаны только адреса самого сервера)
Но опять-же такая настройка чревата спам-рассылками из локалки...
Ну а чтобы отменить самописные правила обработки из этой статьи, 2 пункт - надо их удалить из конфига
.mc
и пересобрать конфиг.# | BFox (?)
Огромное спасибо! я просто только переехал на ISP manager и отправка почты перестала работать из-за авторизации вордпресс не посылает письма )
Спасибо за советы.
Пойду дальше настраивать )
Оставить комментарий