Привет всем!
Добавляю это сюда, потому что я потратил целый час, чтобы понять, почему уведомления Proxmox работают отлично через smarthost, а системные письма отправляются напрямую. Надеюсь, это окажется полезным для кого-нибудь (или, скорее, будущий я найдёт этот пост, когда у будущего меня будет точно такая же проблема!). Использование smarthost для уведомлений в PVE или PBS — это просто: в веб-интерфейсе хоста перейдите в раздел "уведомления" и добавьте SMTP-цель. Системные письма (например, всё, что использует команду 'mail') не используют цели, определённые для PVE или PBS, и будут маршрутизироваться через шлюз, определённый в postfix – если его нет, то он попытается отправить напрямую. Мы ужесточили параметры безопасности на наших почтовых серверах, поэтому теперь нам нужно маршрутизировать все письма через smarthost. Поэтому внесите следующие изменения на каждом хосте в вашем кластере или на PBS-боксе:
Установите SASL-модули. Без них всё будет казаться рабочим, но вы будете получать ошибки "unable to authenticate, no mechanism", когда попытаетесь отправить письма.
Bash: apt -y install libsasl2-modules
Отредактируйте /etc/postfix/main.cf и убедитесь, что в нём есть следующие строки (замените имена серверов и т.д. на свои):
Code:
# Установите relayhost. Квадратные скобки требуются, чтобы postfix не выполнял поиск MX
relayhost = [YOUR.SMARTHOST.EXAMPLE.COM]:587
# Включите TLS
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
# Включите SASL-аутентификацию
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Убедитесь, что мы можем проверить сертификат relayhost
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Отредактируйте файл /etc/postfix/sasl_passwd и добавьте следующую строку (измените детали для вашей конфигурации). Обратите внимание, что smarthost-сервер должен быть *точно* таким же, как в main.cf выше.
Code:
[YOUR.SMARTHOST.EXAMPLE.COM]:587 USERNAME:PASSWORD
Защитите файл пароля, создайте таблицу поиска для файла /etc/postfix/sasl_passwd, который вы только что отредактировали, и затем перезапустите postfix:
Bash: chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
systemctl restart postfix
Протестируйте (измените детали по мере необходимости):
Bash: echo "This is the e-mail body" | mail -v -s "Testing smart host" YOUR.EMAIL@YOUR.DOMAIN
Добавляю это сюда, потому что я потратил целый час, чтобы понять, почему уведомления Proxmox работают отлично через smarthost, а системные письма отправляются напрямую. Надеюсь, это окажется полезным для кого-нибудь (или, скорее, будущий я найдёт этот пост, когда у будущего меня будет точно такая же проблема!). Использование smarthost для уведомлений в PVE или PBS — это просто: в веб-интерфейсе хоста перейдите в раздел "уведомления" и добавьте SMTP-цель. Системные письма (например, всё, что использует команду 'mail') не используют цели, определённые для PVE или PBS, и будут маршрутизироваться через шлюз, определённый в postfix – если его нет, то он попытается отправить напрямую. Мы ужесточили параметры безопасности на наших почтовых серверах, поэтому теперь нам нужно маршрутизировать все письма через smarthost. Поэтому внесите следующие изменения на каждом хосте в вашем кластере или на PBS-боксе:
Установите SASL-модули. Без них всё будет казаться рабочим, но вы будете получать ошибки "unable to authenticate, no mechanism", когда попытаетесь отправить письма.
Bash: apt -y install libsasl2-modules
Отредактируйте /etc/postfix/main.cf и убедитесь, что в нём есть следующие строки (замените имена серверов и т.д. на свои):
Code:
# Установите relayhost. Квадратные скобки требуются, чтобы postfix не выполнял поиск MX
relayhost = [YOUR.SMARTHOST.EXAMPLE.COM]:587
# Включите TLS
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
# Включите SASL-аутентификацию
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Убедитесь, что мы можем проверить сертификат relayhost
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Отредактируйте файл /etc/postfix/sasl_passwd и добавьте следующую строку (измените детали для вашей конфигурации). Обратите внимание, что smarthost-сервер должен быть *точно* таким же, как в main.cf выше.
Code:
[YOUR.SMARTHOST.EXAMPLE.COM]:587 USERNAME:PASSWORD
Защитите файл пароля, создайте таблицу поиска для файла /etc/postfix/sasl_passwd, который вы только что отредактировали, и затем перезапустите postfix:
Bash: chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
systemctl restart postfix
Протестируйте (измените детали по мере необходимости):
Bash: echo "This is the e-mail body" | mail -v -s "Testing smart host" YOUR.EMAIL@YOUR.DOMAIN
