После установки Proxmox 7 в одном удаленном объекте, решил настроить отправку уведомлений через Яндекс почту. И сделал заметку, чтобы в следующий раз не тратить время.
Чтобы сервер отправлял письма и они доходили на бесплатные почтовые сервисы, нужно настроить отправку, через реальный почтовый ящик. Proxmox использует для этого Postfix. Настроим его.
Откроем консоль сервера и доставим недостающие модули
apt install postfix-pcre libsasl2-modules
Сделаем бэкап конфигурационного файла Postfix
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
Отредактируем этот файл
mcedit /etc/postfix/main.cf
Жирным выделены добавленная конфигурация
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
myhostname=pve1.hserv.su
default_transport = smtp
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost = [smtp.yandex.ru]:587
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
recipient_delimiter = +
compatibility_level = 2
header_checks = pcre:/etc/postfix/rewrite_subject
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relayhost.hash
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_auth.hash
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_generic_maps = hash:/etc/postfix/generic
Создаем хеш файл авторизации для доступа к почтовому ящику. Далее по коду везде вместо youremail и yourpassword подставьте ваш логин и пароль
Откроем файл
mcedit /etc/postfix/sasl_auth.hash
Добавим в него следующую строчку
[smtp.yandex.ru]:587 youremail@yandex.ru:yourpassword
Создаем хеш файл sender_relayhost. Откроем файл
mcedit /etc/postfix/sender_relayhost.hash
Добавим в него следующую строчку, скобки [ ] обязательны!
youremail@yandex.ru [smtp.yandex.ru]:587
Чтобы отправка через Яндекс работала, нужно чтобы адрес отправителя в письме совпадал с адресом авторизации на почтовом сервере. Для этого поменяем адрес локального отправителя на Яндекс. Откроем файл generic
mcedit /etc/postfix/generic
Добавим в него
root@yournameserver youremail@yandex.ru
Пример для моей установки:
root@pve1.hserv.su mymail@yandex.ru
Зашифруем файлы с помощью postmap
postmap /etc/postfix/sender_relayhost.hash
postmap /etc/postfix/sasl_auth.hash
postmap /etc/postfix/generic
Установим права доступа, на созданные файлы
chmod 0600 /etc/postfix/sasl_auth.*
Чтобы письма от proxmox было легче сортировать в почтовой программе, откроем файл
mcedit /etc/postfix/rewrite_subject
Добавим в него
/^Subject: (.*)$/ REPLACE Subject: [pve]: $1
Это выражение, которое меняет заголовок письма, начинающийся с Subject. Оно добавит в начало темы фразу: [pve]:, по которому легко сортировать.
На этом настройка Postfix закончена, осталось применить внесенные настройки
service postfix restart
Давайте проверим отправку писем
echo "Test from proxmox" | mail -s test my-email@mail.ru
Если система нам ругнется
-bash: mail: command not found
То поставим следующий пакет
apt install mailutils -y
Вот и результат:

Если письма не приходят смотрим логи
cat /var/log/mail.log | grep postfix
Одной из ошибок, может быть настройки безопасности Яндекс. Проверьте, разрешен ли доступ к почте для сторонних почтовых программ.
Заключение
Как видим из заметки, настройка отправки почты, достаточно легко организовать. Особенно полезно в тех местах, где нет своего почтового сервера, или нет постоянного технического персонала, для обслуживания сервера.
Спасибо за статью!
У меня всё заработало с первого раза.
Рад был помочь
Огромное спасибо!
Перепробовал много мануалов и по postfix и по exim4, но только по Вашей статье отправка реально заработала.
Александр, рад был помочь! Я и написал статью, как раз по той же причине. Когда у меня заработало, я решил поделиться результатом!
У меня заработала только такая конфигурация:
myhostname=yourhostname
default_transport = smtp
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost = [smtp.yandex.ru]:465
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
recipient_delimiter = +
compatibility_level = 9999
header_checks = pcre:/etc/postfix/rewrite_subject
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relayhost.hash
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_auth.hash
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca_yandex.pem
smtp_generic_maps = hash:/etc/postfix/generic
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
предварительно установил сертификат yandex:
openssl s_client -starttls smtp -crlf -connect smtp.yandex.ru:25