Linux

Отправка почты через консоль с авторизацией в linux

Для того, чтобы быть в курсе всего, что происходит на сервере, помимо мониторинга, полезно следить за стандартными письмами, которые шлют различные сервисы. Я расскажу, как настроить на сервере отправку писем через стандартный postfix с авторизацией на стороннем smtp сервере. Так же эта настройка будет полезна для отправки почты через консоль linux с авторизацией по smtp.


По-умолчанию, в минимальной установке дистрибутива CentOS 7 уже идет в комплекте почтовый сервер postfix. Его я и буду использовать. Стандартные настройки сервера не дают нормальных возможностей для отправки почты. Сделаем некоторые дополнительные действия.

Для начала, чтобы иметь возможность оперативно проверять отправку почты через консоль, установим программу mailx. Без нее при попытке отправить письмо в консоли, будете получать ошибку:

# mail
bash: mail: command not found

Для того, чтобы это исправить, устанавливаем mailx.

# yum install mailx

После этого можно отправлять со своего сервера сообщения во внешний мир, например вот так.

# df -h | mail -s "Disk usage" admin@mymail.ru

На почту улетит вывод команды df.

Отправка почты через консоль с авторизацией в linux

Но при стандартных настройках ваше письмо либо попадет в спам, либо вообще не будет принято сервером получателя, потому что на вашем сервере нет корректных настроек для отправки почты (dns записи, spf, dkim и т.д.). Чтобы почта нормально отправлялась, надо воспользоваться каким-то внешним почтовым сервером. Настроим postfix на отправку локальных писем через внешний сервер с авторизацией по smtp.


Я взял дефолтный конфиг postfix, очистил его от комментариев и пробелов, добавил в конец свои настройки.

# cat /etc/postfix/main.cf
## DEFAULT CONFIG BEGIN ######################
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = all
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
## DEFAULT CONFIG END ######################

# Имя сервера, которое выводит команда hostname
myhostname = centos7-test.xs.local
# Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель 
# фигурировало полное имя сервера, так удобнее разбирать служебные сообщения
mydomain = centos7-test.xs.local
mydestination = $myhostname
myorigin = $mydomain
# Адрес сервера, через который будем отправлять почту
relayhost = mailsrv.mymail.ru:25
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may

Создаем файл с информацией об имени пользователя и пароле для авторизации.

# mcedit /etc/postfix/sasl_passwd

mailsrv.mymail.ru:25 admin@mymail.ru:password

Создаем db файл.

# postmap /etc/postfix/sasl_passwd

Теперь можно перезапустить postfix и проверить работу.

# systemctl restart postfix

Отправляем тестовое письмо через консоль. Проверяем почтовый лог.

# tail -n 10 /var/log/maillog

Если у вас там будет похожая ошибка:

postfix/smtp[5420]: warning: SASL authentication failure: No worthy mechs found
postfix/smtp[5420]: 24762774C6: to=<admin@mymail.ru>, relay=mailsrv.mymail.ru[10.10.30.3]:25, delay=450, delays=450/0.03/0.02/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server mailsrv.mymail.ru[10.10.30.3]: no mechanism available)

То необходимо установить еще несколько пакетов:

# yum install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

После этого перезапускайте postfix и проверяйте отправку в консоли. Если все в порядке, то к стандартному алиасу для root в /etc/aliases, добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.


Было:

#root: marc

Стало

root: root,admin@mymail.ru

Обновляем базу сертификатов:

# newaliases

На этом все. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через внешний нормальный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры). Теперь удобно использовать локальную отправку в скриптах, не задавая дополнительные параметры. Все уже настроено, можно использовать простую локальную доставку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *