Relais d’e-mails sortants pour équipement connecté

Cet article est issu d’un échange avec l’IA ChatGPT. Même si les informations qui m’ont été fournies ont permis d’aboutir au résultat attendu, cela a nécessité quelques remises en question de l’IA qui s’égarait parfois dans ses explications. En partant de ce constat, je considère que d’autres personnes qui n’ont pas les quelques bases techniques nécessaires pour guider et recadrer la « machine » risquent de ne pas aboutir directement au même résultat et d’abandonner ce projet qui est finalement assez simple à mettre en œuvre.

Cas concrets

L’utilisation d’un relais d’e-mails est nécessaire dans les cas suivants :
– Les mails générés par un équipement du commerce sont mal formés et rejetés par les serveurs ;
– L’équipement est incapable de s’authentifier correctement via TLS ;
– Pour des raisons de sécurité, l’équipement local n’a pas accès à Internet.

Solution

Comme souvent, la solution la plus simple est l’utilisation d’une carte type Raspberry Pi, agissant en tant que relais d’e-mail. La procédure fournie ci-dessous est fonctionnelle sur cette version du système d’exploitation Raspberry OS : Linux raspberrypi 6.12.47+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1 (2025-09-16) aarch64 GNU/Linux

Mise en œuvre

L’éditeur de texte utilisé dans certaines étapes décrites ci-dessous est nano. C’est un éditeur assez basique mais plus facile d’utilisation que vi selon moi. Les commandes à connaître sont assez limitées :

  • Ctrl+x pour quitter l’éditeur après avoir effectué des modifications, suivi au choix de :
    • y pour valider l’enregistrement des modifications dans le fichier en cours d’édition ;
    • n pour quitter sans enregistrer les modifications (en cas d’erreur de saisie ayant corrompue le contenu du fichier par exemple).

Prérequis

Si comme moi, vous avez des tâches périodiques définie dans crontab, vous devez absolument vous assurer au préalable qu’elles ne vont pas générer d’envoi d’e-mail à chaque exécution, car le système va automatiquement utiliser le serveur d’e-mails sortants que vous allez installer, pour émettre par e-mail l’intégralité des événements générés par ces tâches périodiques. Ceci peut être bloquant lors de la mise au point du paramétage du serveur d’e-mails sortants car lors d’erreurs d’accès répétées, vous risquez de vous voir refuser l’accès au serveur d’e-mail distant.

Une solution rapide et très probablement sale : Envoyer stdout et stderr dans /dev/null en ajoutant > /dev/null 2>&1 à la fin de chaque ligne de commande exécutée dans crontab.

Édition de crontab :

Exemple de paramétrage après application de la modification :


# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).
#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/2 * * * * /usr/bin/python3 /home/pi/conquerirlemonde.py > /dev/null 2>&1

Enregistrez les modifications et quittez l’édition du fichier, puis rechargez la liste des tâches à exécuter :

Installation et paramétrage du serveur d’e-mails sortants

Saisir les commandes système fournies ci-dessous :


sudo apt update
sudo apt upgrade


sudo apt install postfix mailutils libsasl2-modules -y

Une fois l’installation terminée, on peut commencer à définir le paramétrage. Dans mon cas :

  • Les e-mails relayés par la Raspberry Pi seront émis en utilisant un compte e-mail chez le fournisseur d’accès Internet Free. Si vous utilisez un compte chez un autre fournisseur d’accès, vous devrez remplacer free.fr par ce qui se trouve après le caractère @ de votre compte utilisateur. Vous modifierez également les paramètres du serveur d’e-mail sortant (smtp). Voir les paramètres myorigin et relayhost dans l’exemple ci-dessous ;
  • Mon réseau local est dans le groupe d’adresses IP 192.168.0.0, modifiez si besoin le paramètre mynetworks ci-dessous.

    sudo nano /etc/postfix/main.cf

    Ici on va définir le fonctionnement du logiciel postfix, qui va assurer la fonction de relais d’e-mails sortants :

    # identité
    myhostname = raspberrypi
    #myorigin = /etc/mailname
    myorigin = free.fr
    
    # interfaces
    inet_interfaces = all
    inet_protocols = ipv4
    
    # autoriser uniquement le LAN
    mynetworks = 127.0.0.0/8 192.168.0.0/24
    
    # pas de distribution locale
    mydestination = localhost
    
    # relais SMTP Free
    relayhost = [smtp.free.fr]:587
    
    # TLS pour le serveur distant
    smtp_tls_security_level = encrypt
    smtp_tls_note_starttls_offer = yes
    
    # authentification SMTP
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    smtp_sasl_tls_security_options = noanonymous
    
    # restrictions relais
    smtpd_recipient_restrictions =
    permit_mynetworks,
    reject_unauth_destination
    
    # alias mail pour l'utilisateur pi sous differentes formes
    smtp_generic_maps = hash:/etc/postfix/generic
    compatibility_level = 3.6
    
    # corrige le formatage de mail mal effectue par les cameras
    always_add_missing_headers = yes
    local_header_rewrite_clients = static:all
    enable_original_recipient = no
    append_dot_mydomain = yes

    Enregistrer les modifications et quitter l’édition du fichier.
    Ensuite on fournit les identifiants du compte utilisateur liés au serveur défini ci-dessus dans la paramètre relayhost :

    sudo nano /etc/postfix/sasl_passwd

    Dans l’exemple ci-dessous remplacez login@free.fr par le nom d’utilisateur du compte, et m0t2passe par le mot de passe associé à ce compte :

    [smtp.free.fr]:587 login@free.fr:m0t2passe

    Enregistrer les modifications et quitter l’édition du fichier.
    Ensuite on définit des alias qui seront utilisés par le système Linux pour l’envoi d’e-mails exécuté localement (donc sans utiliser la fonction de relais d’e-mail sortant).


    sudo nano /etc/postfix/generic

    Ci-dessous, on remplacera expediteur@free.fr par l’adresse e-mail réelle du compte utilisé pour envoyer les e-mails :

    pi expediteur@free.fr
    @raspberrypi expediteur@free.fr
    @raspberrypi.localdomain expediteur@free.fr

    Enregistrer les modifications et quitter l’édition du fichier, puis saisir la commande suivante :


    sudo postmap /etc/postfix/generic

    Il ne reste plus qu’à générer la base postfix :

    sudo systemctl restart postfix

    Pour garder un œil sur les logs de postfix, ouvrir une autre session terminal avec putty par exemple et saisir la commande suivante :

    sudo journalctl -fu postfix

    En cas d’erreur avec des mails qui restent dans la file d’attente et qui génèrent inutilement les tentatives d’envoi via postfix, vider la file d’attente avec la commande suivante :

    Le paramétrage étant normalement terminé, commencer avec un essai d’envoi d’e-mail avec la commande suivante :

    echo « test » | mail -s « test postfix » destinataire@free.fr

    L’adresse définie à la place de destinataire@free.fr ci-dessus doit recevoir l’e-mail de test.
    Si le test aboutit, vous pouvez passer à l’étape suivante en paramétrant vos équipements connectés pour qu’ils énvoient leurs e-mails vers votre relais d’e-mails local.

    Exemple de paramétrage sur une caméra de vidéosurveillance HikVision, puisque c’était la raison de la mise en place du relais d’e-mails sortants dans mon cas :

    L’adresse du serveur SMTP est l’adresse IP de la carte Raspberry Pi, qui doit être fixe sur le réseau local : adresse définie en dur via Network Manager (via nmtui ou nmcli) ou définie par un bail permanent via les serveur DHCP local.

    Si la carte Raspberry Pi est accessible depuis Internet, son adresse IP ne doit pas être définie dans le paramétrage DMZ de votre routeur/modem/box Internet, et il ne doit pas y avoir non plus de translation de port (NAT) 25 vers l’adresse IP local de la Raspberry Pi.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.