SSMTP: Отправка отчетов, логов и уведомлений из FreeBSD

http://pro-voip.com.ua freebsdКогда нужно научить свой сервер отправлять почту…

Вообще-то, FreeBSD в своей базовой комплектации, если можно так выразится, имеет на борту полноценный почтовый сервер — sendmail. Предполагалось, что этим почтовиком будет пользоваться как сама операционная система, уведомляя своего администратора о результатах тестов и проверок, так и рядовые пользователи для повседневного общения. В этом случае настройка и запуск sendmail’а оправдана, если ваш сервер у вас именно «почтовый» (как минимум, обслуживает пользователей компании, например) и, что немаловажно, sendmail вы настраивать умеете.

Для «непочтового» сервера на FreeBSD, выполняющего другие задачи (например, запущен какой-нибудь web-сервер ) тратить время и разбираться в sendmail’е, когда нужны только отчеты системы, считаю нецелесообразно. (Для меня sendmail вообще темный лес и мне туда лезть страшно).

В таком случае на помощь приходит sSMTP. Это некий эмулятор sendmail’а, с помощью которого можно _только отправлять_ почту через удаленный «полноценный почтовый сервер».

Установка

Ставим с портов:

# whereis ssmtp
ssmtp: /usr/ports/mail/ssmtp
# cd /usr/ports/mail/ssmtp
# make install clean

После окончания установки видим следующее сообщение — руководство к дальнейшим действиям:

sSMTP has been installed successfully.

To replace sendmail with ssmtp type "make replace" or change
your /etc/mail/mailer.conf to:

sendmail    /usr/local/sbin/ssmtp
send-mail    /usr/local/sbin/ssmtp
mailq        /usr/local/sbin/ssmtp
newaliases    /usr/local/sbin/ssmtp
hoststat    /usr/bin/true
purgestat    /usr/bin/true


However, before you can use the program, you should copy the files
"revaliases.sample" and "ssmtp.conf.sample" in /usr/local/etc/ssmtp
to "revaliases" and "ssmtp.conf" respectively and edit them to suit
your needs.
Настройка

Следуем рекомендации…

1. Вместо дефолтного sendmail’а прописываем ssmtp в /etc/mail/mailer.conf:

sendmail    /usr/local/sbin/ssmtp
send-mail    /usr/local/sbin/ssmtp
mailq        /usr/local/sbin/ssmtp
newaliases    /usr/local/sbin/ssmtp
hoststat    /usr/bin/true
purgestat    /usr/bin/true

2. Редактируем конфигурационный файл /usr/local/etc/ssmtp/ssmtp.conf:

root=admin@provoip.in.ua
mailhub=mail.pro-voip.com.ua
rewriteDomain=provoip.in.ua
hostname=server.provoip.in.ua
FromLineOverride=YES

Кто получает почту для userids < 1000 (т.е. от всех системный пользователей):
root=admin@provoip.in.ua

Через какой MTA отправлять почту (МТА здесь полноценный сервер, который реально занимается доставкой почты пользователю — ищет MX запись домена, отправляет, следит за доставкой, возвращает письмо отправителю при невозможности доставки):
mailhub=mail.pro-voip.com.ua

Можно указать порт (по умолчанию 25), например:
mailhub=mail.your.domain:2525

С какого домена будет отправлена почта:
rewriteDomain=provoip.in.ua

Полное имя хоста:
hostname=server.provoip.in.ua

Не перезаписывать заголовок From при отправке, если он явно задан (если будет указано значение «NO», в заголовке From отобразится реальный пользователь, от имени которого отсылается письмо):
FromLineOverride=YES

Другие возможности:

Использовать SSL/TLS для отправки сообщений на сервер:
UseTLS=YES

Использовать SSL/TLS сертификат to authenticate against smtp host.
UseTLSCert=YES

Использрвать этот RSA сертификат:
TLSCert=/usr/local/etc/ssmtp/ssmtp.pem

Debug

Если возникли проблемы с отправкой письма и нужно посмотреть детально, как происходит общение между ssmtp и удаленным почтовым сервером, следующей опцией можно включить debug отправки письма:

Debug=YES

Здесь следует обратить внимание на расположение данной опции в файле конфига /usr/local/etc/ssmtp/ssmtp.conf:

  • если ее поставить в конце файла — получим в логах (/var/log/maillog) подробный вывод smtp-сесси:
  • если ее поставить в начале файла — кроме вывода smtp-сессии получим вывод парсинга по конфигу ssmtp.conf:
  • если поставить где-нибудь в середине, то процесс парсинга в логах увидим начиная с опции, которая идет за «Debug=YES».
Отправка от определенного пользователя в системе

Допустим, в системе есть пользователь user123, у которого есть почтовый ящик user123@example.com. Чтобы пользователь смог отправлять письма со своего ящика через сервер mail.pro-voip.com.ua,  отредактируем файл алиасов /usr/local/etc/ssmtp/revaliases:

# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.

user123:user123@example.com:mail.pro-voip.com.ua

— смотрим строку вконце.

Если файла revaliases, его можно создать самим 🙂 или переименовать revaliases.sample в revaliases.

Отправка сообщения от пользователя user123 с консоли будет выглядеть примерно следующим образом:

# mail -s «This is mail» -u user123 user777@gmail.com < /dev/null