Фото с сайта: blog.jolos.fr
Menu
Perl & JS

Установка SSMTP на FreeBSD


Дешевый и сердитый MTA для мониторинга сервера

MILKOV.RU

Блог / Perl & JS
Установка SSMTP на FreeBSD — Дешевый и сердитый MTA для мониторинга сервера

Фото с сайта: blog.jolos.fr
Связанные материалы:


Признаться честно, точно не вспомню, когда в последний раз заморачивался с настройками полноценного почтового сервера. Помнится, были потуги и с Communigate Pro и c Qmail, но с приходом почтовых сервисов от Google, Yandex, Mail и т.д, - необходимость в поддержке почты сама собой отпала, а "дефолтная" установка очередной FreeBSD само собой подразумевало отключенный sendmail.

Понятное дело, жить без почты совсем было не всегда удобно и на помощь приходили различные библиотеки и модули, позволявшие эту, по-большому счету, не самую сложную функцию реализовать. Все выше сказанное можно смело назвать "небольшим лирическим отступлением", так как дальше речь пойдет совсем о другом, а именно в подмене штатного freebsd-шного sendmail на ssmtp.

Принцип работы SSMTP

Стандартное описание почтового агента, которое можно почерпнуть, например, при поиске его в пакетах, гласит примерно следующее: простейший MTA для выброски писем из системы через почтовый хаб (Extremely simple MTA to get mail off the system to a mail hub). Именно этим ssmtp и занимается: рассылает сообщения, через сторонний smtp-сервер.

Написано про это было много, но без трудностей, как водится не обошлось, поэтому пишу и я - может кому будет полезно. Ну, да хватит "воды", задача стояла следующая: настроить ssmtp в Freebsd с рассылкой через почтовый ящик в G-Suite.

Шаг 1. Выключаем sendmail

Для этого в /etc/rc.conf должны появиться следующие строки:  

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

На самом деле в FreeBSD 12, которая использовалась в конкретном примере, так много писать уже не нужно, достаточно: 

sendmail_enable="NONE" 

остальные строки предусмотрены в сценарии: /etc/rc.d/sendmail

Шаг 2. Устанавливаем ssmtp из пакетов

> pkg install ssmtp

Шаг 3. Добиваем штатный sendmail 

Убиваем процессы, если они остались 

> killall sendmail

Правим /etc/mail/mailer.conf 

> vi /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

Переименовываем оригинальный sendmail и делаем линк с ssmtp 

> mv /usr/sbin/sendmail /usr/sbin/sendmail.old
> ln -s /usr/local/sbin/ssmtp /usr/sbin/sendmail

Шаг 4. Настраиваем права

Добавляем пользователя ssmtp, включаем его в группу ssmtp (которая уже создалась при установке из пакетов) 

> pw useradd ssmtp -g ssmtp -h - -s /usr/sbin/nologin -d /nonexistent -c "sSMTP"

Переходим в каталог ssmtp

> cd /usr/local/etc/ssmtp 

Создаем конфигурационный файл

> cp ssmtp.conf.sample ssmtp.conf 

Устанавливаем владельцев и права для каталога и конфига 

> chown ssmtp:ssmtp . ssmtp.conf
> chmod 4750 . ssmtp.conf

Шаг 5. Правим конфиг

> vi /usr/local/etc/ssmtp/ssmtp.conf

root=
rewriteDomain=domain.com
mailhub=smtp.gmail.com:587 
hostname=smtp.gmail.com:587 
AuthUser=hub@domain.com 
AuthPass=password 
FromLineOverride=YES 
UseTLS=YES 
UseSTARTTLS=Yes

В моем случае (G-Suite на домене domain.com) почта для root-а будет приходить на root@domain.com, для user1 - на user1@domain.com и так далее. Если почта всего одна (hub@domain.com), следует поменять две первые строки на:

root=hub@domain.com
rewriteDomain=

Конечно, в этом случае мониторинг будет, мягко говоря, не полным и, понятное дело, вместо "hub@domain.com" и "password" будет имя почтового ящика на Gmail и пароль. 

Шаг 6. Письмо другу 

Вроде всё готово, пытаемся отправить письмо другу: 

> echo "Test" | mail -s "Hello, friend!" friend@myfriends.com

И получаем в ответ: sendmail: Authorization failed (535 5.7.8 https://support.google.com/mail/?p=BadCredentials)

Шаг 7. Корректируем настройки аккаунта Google 

В двух словах, нам нужно разрешить доступ к почтовому аккаунту для "ненадежных приложений". Конечно, звучит это жутковато, но если вдуматься, то мы всего-навсего настраиваем почтовый ящик-посредник или "хаб", через который ssmtp будет слать почту. 

Как это сделать ниже в серии скриншотов (жмем, чтобы увеличить). 

google-admin-1google-admin-2google-admin-3

google-account-1google-account-2google-account-3google-account-4

Если Вы настраиваете ящик в G-Suite, пригодятся все, если просто на gmail - последние четыре.

Шаг 8. Проверка работы 

Если всё сделали правильно, Ваш друг получит на ящик friend@myfriends.com письмо от hub@domain.com, причем имя отправителя будет соответствовать имени пользователя системы, от которого Вы выполнили эту команду: 

> echo "Test" | mail -s "Hello, friend!" friend@myfriends.com

P.S.

Какие ещё могут быть ошибки 

sendmail: Cannot open mailhub:25 - намудрили в правах (см. Шаг 4)

sendmail: Cannot open smtp.gmail.com:587 - что-то не так в конфиге (см. Шаг.5)

И, конечно, установку и настройку осуществляем через sudo (или под root-ом, как у Вас это настроено)