NotificationMailAvecProxmox

De Breizh-Entropy
Aller à la navigation Aller à la recherche

Contexte

Un serveur proxmox est hébergé à l'Élabo, et dispose de plusieurs disques en RAID.

On souhaite recevoir une notification par e-mail du démon RAID mdadm quand un disque devient défaillant et doit donc être rapidement remplacé.

Contraintes: le port 25 est bloqué par l'abonnement fibre Orange Pro, donc pas moyen d'envoyer le mail directement sur la VM d'Actux. On va donc envoyer via le SMTP d'Orange.

En plus, on va mettre en place un port 587/submission limité (sans relai, sans authentification) sur le Postfix d'Actux.

Mise en place

Adaptation à Proxmox

Proxmox trafique /root/.forward pour passer les e-mails sur /usr/bin/proxmox-mail-forward, qui passe l'e-mail au système de notifications Proxmox.

Dans l'interface, on pourrait ajouter l'adresse d'admin en destinataire, mais on va plutôt le faire dans le .forward ci-dessous. (Datacenter > Notifications > mail-to-root > Additional recipients)

Normalement on a une trace de ça dans /etc/pve/notifications.cfg.

Ici on va faire repasser la notification sur la couche standard Sendmail pour avoir la main avec Postfix. (On aurait peut-être pu directement configurer ce qui va suivre avec Datacenter > Notifications > Add > SMTP, mais pas testé. Et puis le système proxmox-mail-forward ne fonctionne que pour les mails à root@, avec un Postfix bien configuré les utilisateurs non-root pourront envoyer des e-mails.)

Pour garder une copie locale des e-mails, on ajoute \root à /root/.forward:

\root, root@breizh-entropy.org, |/usr/bin/proxmox-mail-forward

On configure ensuite Postfix pour passer par Orange. Par sécurité on crée un compte e-mail secondaire, pour ne pas utiliser le compte principal dont le mot de passe est susceptible de changer.

Dans /etc/postfix/main.cf:

## Relai Orange
relayhost = [smtp.orange.fr]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# Route directe vers mail breizh-entropy.org                                                                                                                                                  
transport_maps = hash:/etc/postfix/transport

Commenter aussi les lignes suivantes:

#default_transport = error
#relay_transport = error

Dans /etc/postfix/sasl_passwd, pour fournir les identifiants SMTP Orange:

[smtp.orange.fr]:submission	xxxxx@orange.fr:MotDePasse!

Dans /etc/postfix/sender_canonical, pour ré-écrire le From, car Orange n'accepte plus les expéditeurs non-Orange depuis courant 2024:

root	xxxxx@orange.fr

Dans /etc/postfix/transport:

breizh-entropy.org     :[mail.actux.eu.org]:submission

# abandonné:
# SMTPS wrappermode (TCP port 465) requires setting "smtp_tls_wrappermode = yes", and "smtp_tls_security_level = encrypt" (or stronger)
# => trop contraignant, casse le relai smtp.orange.fr
#breizh-entropy.org     :[mail.actux.eu.org]:submissions

Redémarrer tout ça:

postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/sender_canonical
postmap /etc/postfix/transport
service postfix restart

Tester l'envoi sur une adresse perso:

echo Bonjour. | mail -s Test chez@vous.com

Inspecter la copie locale:

mutt -f /var/mail/root

Vérifier que l'envoi s'est bien passé:

# journalctl -fxb
oct. 09 21:19:20 proxmox postfix/smtp[17211]: 5170F1D40609: to=<root@breizh-entropy.org>, relay=smtp.orange.fr[80.12.26.33]:587, delay=2.2, delays=0/0/0.21/2, dsn=2.0.0, status=sent (250 2.0.0 ycDOsyZ2QMzKhycDOsPxxX mail accepted for delivery)

Tester enfin l'envoi d'alertes RAID par mdadm:

mdadm --monitor --scan --oneshot --test

C'est bon, on est maintenant prévenu quand un disque lâche !

Mail Actux

/etc/postfix/master.cf:

# Ouvre submission (587/tls) pour que des machines restreintes en                                                                                                                             
# port 25 (typiquement: le hackerspace et sa box orange pro..)                                                                                                                                
# puissent envoyer des alertes aux admin.                                                                                                                                                     
# SASL non-activé car pas configuré.                                                                                                                                                          
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt                                                                                                                                                        
#  -o smtpd_sasl_auth_enable=yes                                                                                                                                                              
#  -o smtpd_reject_unlisted_recipient=no                                                                                                                                                      
  -o smtpd_reject_unlisted_recipient=yes
  -o smtpd_client_restrictions=$mua_client_restrictions
  -o smtpd_helo_restrictions=$mua_helo_restrictions
  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject                                                                                                                               
  -o smtpd_relay_restrictions=permit_auth_destination,reject
  -o milter_macro_daemon_name=ORIGINATING

Le cœur de la config est de remplacer permit_sasl_authenticated (relai authentifié) par permit_auth_destination (point alternatif de réception locale).

TODO: le mailname du serveur est bancal, et la conf actuelle fait du coup de l'usurpation de l'adresse xxxx@orange.fr, ce qui monte le score spam. À réfléchir.

TODO: par robustesse, peut-être renvoyer root vers une adresse non-actux, ça fera 2 flux différents