Локальный SMTP-ретранслятор dma в NetBSD

После Postfix для отправки писем с серверов администратору я нашёл и стал пользоваться более легковесной альтернативой - nullmailer. Но и nullmailer не является образцом минимализма, т.к. зависит от нескольких других пакетов. Мне хотелось найти более лёгкую замену nullmailer, вроде программ ssmtp или esmtp, но с поддержкой очереди писем, т.к. я не хотел терять письма при недоступности удалённого SMTP-сервера. Наиболее подходящей альтернативной мне показался dma.

dma - это минимальный почтовый сервер, разработанный для операционной системы Dragonfly BSD. Полное имя этого почтового сервера - Dragonfly Mail Agent. Этот почтовый сервер способен доставлять почту в mbox-файлы локальных пользователей или пересылать её на внешний SMTP-сервер. Фактически, dma зависит только от openssl и, в отличие от nullmailer, написан на чистом Си, а не на C++.

Установка

Установить dma можно из pkgsrc wip/dma:

# cd /usr/pkgsrc/wip/dma
# make install

dma не имеет зависимостей от каких-либо других пакетов и для его работы достаточно средств, имеющихся в базовой системе NetBSD.

Устранение проблем

В нынешнем pkgsrc неправильно выставлены права доступа к исполняемому файлу /usr/pkg/sbin/dma. Подсмотреть правильные права доступа можно в системе ports FreeBSD в файле pkg-plist. Исправить их можно следующим образом:

# chown root:dma /usr/pkg/sbin/dma
# chmod =rx,g+s /usr/pkg/sbin/dma

Если этого не сделать, то можно столкнуться с ситуацией нехватки прав доступа к каталогу /var/spool/dma, в котором находится очередь писем, описанной по ссылке dragonfly mail agent (dma): dpkg-reconfigure dma causes permissions of /var/spool/dma to change , которая проявляется в виде ошибок следующего вида:

$ echo test | mail -s test root
sendmail: can not create temp file in `/var/spool/dma': Permission denied

Я уже отправил заплатку для pkgsrc wip/dma его автору - Кристиану Коху. После применения заплатки необходимость в устранении проблем должна пропасть.

Настройка

После установки в каталоге /usr/pkg/etc/dma появятся примеры файлов конфигурации dma.conf и auth.conf. Первым делом скроем файл auth.conf с учётными данными для подключения к SMTP-серверу:

# chmod o= /usr/pkg/etc/dma/auth.conf

Отредактируем настройки в файле /usr/pkg/etc/dma/dma.conf, например, следующим образом:

SMARTHOST mail.stupin.su
PORT 587
ALIASES /etc/mail/aliases
AUTHPATH /usr/pkg/etc/dma/auth.conf
SECURETRANSFER
STARTTLS
MAILNAME sysbuild.vm.stupin.su
MASQUERADE sysbuild@stupin.su

Теперь отредактируем файл /usr/pkg/etc/dma/dma.conf следующим образом:

sysbuild@stupin.su|mail.stupin.su:secret_p4$$w0rd

И, наконец, осталось прописать в файл /etc/mailer.conf следующие строки:

sendmail        /usr/pkg/sbin/dma
send-mail       /usr/pkg/sbin/dma
mailq           /usr/pkg/sbin/dma

В файле /etc/mail/aliases для доставки писем на почтовый ящик системного администратора нужно прописать этот почтовый ящик для пользователей root и operator:

root: vladimir@stupin.su
operator: vladimir@stupin.su

Программа не преобразует файл /etc/mail/aliases в какое-либо двоичное представление, поэтому в файле /etc/mailer.conf не нужно настраивать подмену для программы newaliases.

Обработка очереди

Новые письма помещаются в очередь в каталоге /var/spool/dma/, сразу после чего происходит попытка отправить на удалённый SMTP-сервер все письма из очереди. Если письмо не удалось отправить сразу, то следующая попытка отправить его произойдёт при добавлении в очередь нового письма. Чтобы письма не застревали в очереди надолго, можно добавить в планировщик задачу обработки очереди. Для этого запустим crontab -e от имени пользователя root и добавим задачу для ежечасного повтора обработки очереди:

@hourly /usr/pkg/sbin/dma -q

Если требуется доставлять письма как можно скорее после восстановления доступности удалённого SMTP-сервера, можно увеличить частоту запуска задачи, например, до раза в 5 минут:

*/5 * * * * /usr/pkg/sbin/dma -q

Или до раза в минуту:

* * * * * /usr/pkg/sbin/dma -q

Проверка

Проверить работу настроенной почтовой системы можно, например, следующим образом:

$ echo test | mail -s test root

Дополнительные материалы