Transformez votre Raspberry Pi en serveur FTP sécurisé avec relais email

Vous avez un Raspberry Pi qui prend la poussière ? Que ce soit le dernier Pi 5, un Pi 4, Pi Zero, ou même un modèle plus ancien, ce guide vous montrera comment le transformer en un serveur de fichiers puissant et automatisé avec des capacités de relais email. Parfait pour les caméras de sécurité, les appareils IoT, et plus encore.

Compatible avec : Raspberry Pi 5, Raspberry Pi 4 Model B, Raspberry Pi 3 Model B+, Raspberry Pi 3 Model B, Raspberry Pi 2 Model B, Raspberry Pi Zero 2 W, Raspberry Pi Zero W, et Raspberry Pi Zero.

Note

Ce guide a été testé et vérifié sur un Raspberry Pi 3 Model B fonctionnant sous Ubuntu Server 22.04 LTS.

Ce que nous construisons

Ce guide vous accompagnera dans la mise en place d’un système complet comprenant :

  • Ubuntu Server 22.04 LTS : Un système d’exploitation léger et fiable pour le Pi.
  • Un serveur FTP sécurisé (vsftpd) : Pour déposer des fichiers en toute sécurité.
  • Un pare-feu (UFW) & Fail2ban : Pour empêcher les intrusions.
  • Un processeur de fichiers automatisé : Un script qui récupère les nouveaux fichiers, les envoie par email en pièce jointe, puis nettoie après lui.
  • Options email pour appareils anciens : Deux approches pour les appareils ne supportant pas TLS moderne :
    • Utiliser les ports TLS 1.0 legacy de Forward Email (le plus simple)
    • Configurer un relais SMTP Postfix (compatible avec tout fournisseur email)

Prêt ? Allons-y.

Partie 1 : Installer Ubuntu Server sur votre Pi

Tout d’abord, installez Ubuntu Server sur le Raspberry Pi. C’est étonnamment simple grâce au Raspberry Pi Imager.

Ce dont vous aurez besoin

  • N’importe quel Raspberry Pi compatible (voir la liste ci-dessus)
  • Une carte microSD (minimum 8 Go, 16 Go+ recommandé)
  • Un ordinateur avec un lecteur de carte microSD
  • Une alimentation adaptée à votre modèle de Pi
  • Accès Internet (Ethernet ou Wi-Fi)

Note

Les modèles plus anciens comme le Raspberry Pi 2 ou Pi Zero peuvent être plus lents mais fonctionneront parfaitement pour cette configuration.

Flasher le système d’exploitation

  1. Téléchargez le Raspberry Pi Imager : Téléchargez-le depuis le site officiel.

  2. Choisissez le système d’exploitation : Dans l’imager, sélectionnez « CHOOSE OS » > « Other general-purpose OS » > « Ubuntu ».

    • Pour les modèles 64 bits (Pi 3, 4, 5, Zero 2 W), choisissez « Ubuntu Server 22.04.1 LTS (64-bit) ».
    • Pour les modèles 32 bits plus anciens (Pi 2, Pi Zero, Pi Zero W), choisissez « Ubuntu Server 22.04.1 LTS (32-bit) ».
  3. Choisissez votre stockage : Sélectionnez votre carte microSD.

Warning

Cela effacera complètement votre carte microSD. Assurez-vous d’avoir sauvegardé tout ce qui est important.

  1. Les options avancées sont vos amies : Cliquez sur l’icône d’engrenage (⚙️) pour configurer le Pi en mode sans tête (pas besoin de moniteur ni clavier).
    • Nom d’hôte : Donnez un nom à votre Pi (ex. pi-server).
    • SSH : Activez-le et définissez un nom d’utilisateur et un mot de passe.
    • Wi-Fi : Si vous n’utilisez pas Ethernet, entrez vos informations Wi-Fi.
    • Paramètres régionaux : Configurez votre fuseau horaire et la disposition du clavier.
  2. Écrivez ! Cliquez sur le bouton "WRITE" et laissez l'imager faire son travail.

Démarrage et connexion

Une fois que l'imager a terminé, insérez la carte microSD dans le Pi et branchez-le. Laissez-lui quelques minutes pour démarrer. Il effectue une configuration initiale en arrière-plan. Trouvez son adresse IP depuis la page d'administration de votre routeur, puis connectez-vous via SSH :

ssh your_username@your_pi_ip_address

Vous y êtes ! Le Raspberry Pi est maintenant prêt pour la configuration.

Partie 2 : Configuration d'un serveur FTP sécurisé

Ensuite, configurez vsftpd (Very Secure FTP Daemon), configuré pour une sécurité maximale.

Installation et configuration

  1. Installer vsftpd :

    sudo apt update
    sudo apt install vsftpd -y
    
  2. Sauvegarder le fichier de configuration :

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. Modifier la configuration :

    sudo nano /etc/vsftpd.conf
    

Tip

Si une ligne est commentée (commence par un #), décommentez-la en supprimant le #.

Effectuez ces modifications :

Paramètre Valeur But
anonymous_enable NO Désactiver l'accès FTP anonyme
local_enable YES Autoriser les utilisateurs locaux à se connecter
write_enable YES Autoriser les téléchargements de fichiers
local_umask 022 Définir les permissions des fichiers (644 pour fichiers, 755 pour dossiers)
chroot_local_user YES Restreindre les utilisateurs à leur répertoire personnel
allow_writeable_chroot YES Autoriser les téléchargements dans le chroot jail
  1. Ajouter la plage de ports passifs : Ajoutez ces lignes à la fin du fichier. Ceci est nécessaire pour le pare-feu.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. Activer la journalisation : Ajoutez ces lignes pour activer la journalisation pour Fail2ban.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. Enregistrer et redémarrer : Appuyez sur Ctrl+O, Entrée, Ctrl+X, puis redémarrez le service :

    sudo systemctl restart vsftpd
    

Création d'un utilisateur FTP

Créez un utilisateur dédié et restreint pour l'accès FTP.

  1. Créer l'utilisateur :

    sudo adduser ftpuser
    

    Suivez les instructions pour définir un mot de passe. Les autres champs (nom, téléphone, etc.) peuvent être laissés vides.

  2. Créer la structure des répertoires :

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - Répertoire FTP principal
    • /home/ftpuser/ftp/uploads - Où les fichiers seront téléchargés
  3. Définir les permissions :

    sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
    sudo chmod 755 /home/ftpuser/ftp
    sudo chmod 755 /home/ftpuser/ftp/uploads
    

Partie 3 : Pare-feu et protection contre les attaques par force brute

Sécurisez le Pi avec UFW (Uncomplicated Firewall) et Fail2ban.

Configuration de UFW

  1. Installer UFW :

    sudo apt install ufw -y
    
  2. Définir les politiques par défaut :

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. Autoriser SSH (critique !) :

    sudo ufw allow ssh comment 'SSH access'
    

Warning

Autorisez toujours SSH avant d'activer le pare-feu, sinon vous risquez de vous verrouiller dehors !

  1. Autoriser les ports FTP :

    sudo ufw allow 20/tcp comment 'FTP data'
    sudo ufw allow 21/tcp comment 'FTP control'
    sudo ufw allow 40000:50000/tcp comment 'FTP passive mode'
    
  2. Activer le pare-feu :

    sudo ufw enable
    

Configuration de Fail2ban

Fail2ban bloque automatiquement les adresses IP après plusieurs tentatives de connexion échouées.

  1. Installer Fail2ban :

    sudo apt install fail2ban -y
    
  2. Créer une configuration locale :

    sudo nano /etc/fail2ban/jail.local
    
  3. Ajouter ces configurations :

    [DEFAULT]
    bantime = 3600
    findtime = 600
    maxretry = 5
    
    [sshd]
    enabled = true
    port = ssh
    logpath = /var/log/auth.log
    
    [vsftpd]
    enabled = true
    port = ftp,ftp-data,40000:50000
    logpath = /var/log/vsftpd.log
    maxretry = 3
    
  4. Restart Fail2ban:

    sudo systemctl restart fail2ban
    

Part 4: Automated File Processing with Email Notifications

Now for the magic: a script that monitors the FTP folder, emails new files as attachments, and deletes them. There are two approaches depending on your email provider:

If you have a Forward Email account, use the Email API for the most reliable delivery.

Get Your API Key

  1. Log in to Forward Email
  2. Navigate to My Account → Security
  3. Scroll down to the "Developer Access" section at the bottom
  4. Copy your API key

Warning

Keep your API key private at all times. Never share it publicly or commit it to version control.

Note

The Enhanced Protection plan ($3/month) or higher is required for API access.

Install inotify-tools

sudo apt install inotify-tools -y

Create the Monitoring Script

sudo nano /usr/local/bin/ftp-monitor.sh

Paste this script:

#!/bin/bash

# Configuration
WATCH_DIR="/home/ftpuser/ftp/uploads"
FROM_EMAIL="noreply@yourdomain.com"
TO_EMAIL="your-email@example.com"
API_KEY="your_forward_email_api_key"  # Replace with your actual API key

# Monitor for new files
inotifywait -m -e close_write --format '%w%f' "$WATCH_DIR" | while read FILEPATH
do
    FILENAME=$(basename "$FILEPATH")
    FOLDERNAME=$(basename "$WATCH_DIR")
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    SUBJECT="$TIMESTAMP - $FOLDERNAME - $FILENAME"

    # Base64 encode the file
    FILE_CONTENT=$(base64 -w 0 "$FILEPATH")

    # Send email with attachment via Forward Email API
    RESPONSE=$(curl -X POST https://api.forwardemail.net/v1/emails \
      -u "$API_KEY:" \
      -H "Content-Type: application/json" \
      -d '{
        "from": "'"$FROM_EMAIL"'",
        "to": "'"$TO_EMAIL"'",
        "subject": "'"$SUBJECT"'",
        "text": "New file uploaded: '"$FILENAME"'",
        "attachments": [
          {
            "filename": "'"$FILENAME"'",
            "content": "'"$FILE_CONTENT"'",
            "encoding": "base64"
          }
        ]
      }')

    # Check if email was sent successfully
    if echo "$RESPONSE" | grep -q '"statusCode":200'; then
        echo "Email sent successfully for $FILENAME"
        # Delete the file
        rm -f "$FILEPATH"
        echo "Deleted $FILENAME"
    else
        echo "Failed to send email for $FILENAME"
        echo "Response: $RESPONSE"
    fi
done

Make it executable:

sudo chmod +x /usr/local/bin/ftp-monitor.sh

Option 2: Using Other Email Providers

If you prefer to use Gmail, Outlook, Yahoo, or another provider, modify the script to use sendmail or msmtp instead of the Forward Email API.

Install msmtp

sudo apt install msmtp msmtp-mta -y

Configure msmtp

Create the configuration file:

sudo nano /etc/msmtprc

Add your provider's settings (example for Gmail):

defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

account        gmail
host           smtp.gmail.com
port           587
from           your-email@gmail.com
user           your-email@gmail.com
password       your-app-password

account default : gmail

Secure the file:

sudo chmod 600 /etc/msmtprc

Create the Alternative Monitoring Script

sudo nano /usr/local/bin/ftp-monitor.sh

Paste this script:

#!/bin/bash

# Configuration
WATCH_DIR="/home/ftpuser/ftp/uploads"
FROM_EMAIL="your-email@gmail.com"
TO_EMAIL="recipient@example.com"

# Monitor for new files
inotifywait -m -e close_write --format '%w%f' "$WATCH_DIR" | while read FILEPATH
do
    FILENAME=$(basename "$FILEPATH")
    FOLDERNAME=$(basename "$WATCH_DIR")
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    SUBJECT="$TIMESTAMP - $FOLDERNAME - $FILENAME"

    # Send email with attachment using msmtp
    (
        echo "To: $TO_EMAIL"
        echo "From: $FROM_EMAIL"
        echo "Subject: $SUBJECT"
        echo "MIME-Version: 1.0"
        echo "Content-Type: multipart/mixed; boundary=\"BOUNDARY\""
        echo ""
        echo "--BOUNDARY"
        echo "Content-Type: text/plain; charset=utf-8"
        echo ""
        echo "New file uploaded: $FILENAME"
        echo ""
        echo "--BOUNDARY"
        echo "Content-Type: application/octet-stream; name=\"$FILENAME\""
        echo "Content-Transfer-Encoding: base64"
        echo "Content-Disposition: attachment; filename=\"$FILENAME\""
        echo ""
        base64 "$FILEPATH"
        echo ""
        echo "--BOUNDARY--"
    ) | msmtp -t

    # Check if email was sent successfully
    if [ $? -eq 0 ]; then
        echo "Email sent successfully for $FILENAME"
        # Delete the file
        rm -f "$FILEPATH"
        echo "Deleted $FILENAME"
    else
        echo "Failed to send email for $FILENAME"
    fi
done

Rendez-le exécutable :

sudo chmod +x /usr/local/bin/ftp-monitor.sh

Créer un service Systemd

sudo nano /etc/systemd/system/ftp-monitor.service

Ajoutez ce contenu :

[Unit]
Description=FTP Upload Monitor
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ftp-monitor.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Activez et démarrez le service :

sudo systemctl daemon-reload
sudo systemctl enable ftp-monitor.service
sudo systemctl start ftp-monitor.service

Vérifiez le statut :

sudo systemctl status ftp-monitor.service

Partie 5 : Options Email pour les appareils anciens

Les appareils comme les caméras FOSSCAM ne supportent souvent pas les versions modernes de TLS. Il existe deux solutions :

Si vous utilisez Forward Email, c’est la solution la plus simple. Forward Email fournit des ports dédiés TLS 1.0 legacy spécialement pour les appareils plus anciens comme les caméras, imprimantes, scanners et fax.

Tarification

Forward Email propose plusieurs forfaits :

Forfait Prix Fonctionnalités
Gratuit 0 $/mois Redirection d’email uniquement (pas d’envoi)
Protection améliorée 3 $/mois Accès SMTP + ports TLS 1.0 legacy
Équipe 9 $/mois Protection améliorée + fonctionnalités équipe
Entreprise 250 $/mois Équipe + requêtes API illimitées

Important

Le forfait Protection améliorée (3 $/mois) ou supérieur est requis pour l’accès SMTP et la prise en charge des ports TLS 1.0 legacy.

En savoir plus sur Tarification Forward Email.

Générez votre mot de passe

Avant de configurer votre appareil, générez un mot de passe dans Forward Email :

  1. Connectez-vous à Forward Email
  2. Allez dans Mon compte → Domaines → [Votre domaine] → Alias
  3. Créez ou sélectionnez un alias (ex. camera@votredomaine.com)
  4. Cliquez sur "Générer un mot de passe" à côté de l’alias
  5. Copiez le mot de passe généré - vous l’utiliserez pour l’authentification SMTP

Tip

Chaque alias peut avoir son propre mot de passe. Utile pour savoir quel appareil a envoyé quel email.

Configurez votre appareil

Utilisez ces paramètres dans votre caméra, imprimante, scanner ou autre appareil legacy :

Paramètre Valeur
Serveur SMTP smtp.forwardemail.net
Port (SSL/TLS) 2455
Port (STARTTLS) 2555 (alternative)
Nom d’utilisateur Votre email alias (ex. camera@votredomaine.com)
Mot de passe Le mot de passe généré
Authentification Requise
Chiffrement SSL/TLS (recommandé) ou STARTTLS

Warning

Ces ports utilisent le protocole TLS 1.0 obsolète qui présente des vulnérabilités connues (BEAST, POODLE). À utiliser uniquement si votre appareil ne supporte pas TLS 1.2+ moderne.

Configurez simplement votre appareil avec ces paramètres et il enverra les emails directement via Forward Email sans besoin d’un serveur relais local.

Pour plus de détails, consultez la FAQ Forward Email sur le support TLS Legacy.

Option 2 : Configurer un relais SMTP Postfix

Si vous n’utilisez pas Forward Email, ou préférez une solution relais locale, configurez Postfix sur le Raspberry Pi pour agir comme intermédiaire. Cela fonctionne avec n’importe quel fournisseur d’email (Gmail, Outlook, Yahoo, AOL, etc.).

Installer Postfix

sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y

Pendant l'installation :

  • Sélectionnez "Site Internet"
  • Entrez le nom d'hôte de votre Pi (par exemple, raspberrypi-ftp) pour "Nom du système de messagerie"

Choisissez votre fournisseur de messagerie

Fournisseur Serveur SMTP Port Mot de passe d'application requis ?
Gmail smtp.gmail.com 587 Oui
Outlook smtp-mail.outlook.com 587 Oui
Yahoo smtp.mail.yahoo.com 465 Oui
AOL smtp.aol.com 587 Oui

Obtenez un mot de passe spécifique à l'application

La plupart des fournisseurs exigent des mots de passe d'application pour les applications tierces. Générez-en un depuis les paramètres de sécurité de votre fournisseur de messagerie :

Important

N'utilisez jamais votre mot de passe email habituel. Utilisez toujours un mot de passe spécifique à l'application.

Configurez l'authentification SASL

Créez le fichier de mot de passe pour votre fournisseur choisi. Cet exemple utilise Yahoo :

sudo mkdir -p /etc/postfix/sasl
sudo chmod 700 /etc/postfix/sasl
sudo nano /etc/postfix/sasl/sasl_passwd

Ajoutez cette ligne (ajustez le serveur et le port pour votre fournisseur) :

[smtp.mail.yahoo.com]:465 your_email@yahoo.com:your_app_password

Pour Gmail, utilisez :

[smtp.gmail.com]:587 your_email@gmail.com:your_app_password

Sécurisez et hachez le fichier :

sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd

Configurez la correspondance des adresses email

Réécrivez les adresses email locales pour correspondre à votre fournisseur de messagerie :

sudo mkdir -p /etc/postfix/map
sudo chmod 700 /etc/postfix/map
sudo nano /etc/postfix/map/regex_map

Ajoutez cette ligne (remplacez HOSTNAME par le nom d'hôte de votre Pi et utilisez votre email) :

/.+@HOSTNAME/    your_email@provider.com

Exemple :

/.+@raspberrypi-ftp/    john@yahoo.com

Sécurisez le fichier :

sudo chmod 600 /etc/postfix/map/regex_map

Configurez les paramètres principaux de Postfix

Éditez la configuration principale :

sudo nano /etc/postfix/main.cf

Trouvez et mettez à jour le relais (ou ajoutez à la fin) :

relayhost = [smtp.mail.yahoo.com]:465

Ajoutez ces paramètres à la fin du fichier :

# Configuration du relais SMTP
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_generic_maps = regexp:/etc/postfix/map/regex_map

# Paramètres réseau
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24

Tip

Pour Gmail (port 587), définissez smtp_tls_wrappermode = no au lieu de yes.

Warning

Mettez à jour mynetworks avec la plage réseau réelle. N'ajoutez que des réseaux de confiance - tout appareil sur ces réseaux peut relayer du courrier sans authentification.

Plages réseau courantes :

Plage réseau Plage d'adresses IP
192.168.0.0/24 192.168.0.1 - 192.168.0.254
192.168.1.0/24 192.168.1.1 - 192.168.1.254
10.0.0.0/8 10.0.0.0 - 10.255.255.255

Mettez à jour le pare-feu et redémarrez

sudo ufw allow 25/tcp comment 'SMTP pour les appareils locaux'
sudo systemctl restart postfix

Vérifiez que Postfix fonctionne :

sudo systemctl status postfix

Testez le relais

Envoyez un email de test :

echo "Test from Postfix" | mail -s "Test" your_email@provider.com

Consultez les logs :

sudo tail -f /var/log/mail.log

Cherchez status=sent pour confirmer le succès.

Configurez votre appareil

Dans les paramètres de votre caméra ou appareil :

  • Serveur SMTP : L'adresse IP de votre Pi (par exemple, 192.168.1.100)
  • Port SMTP : 25
  • Authentification : Aucune
  • Chiffrement : Aucun (réseau local uniquement)

Dépannage

En cas de problème, vérifiez ces fichiers journaux :

Serveur FTP :

sudo tail -f /var/log/vsftpd.log

Fail2ban :

sudo fail2ban-client status
sudo tail -f /var/log/fail2ban.log

Moniteur de fichiers :

sudo journalctl -u ftp-monitor.service -f

Postfix Mail :

sudo tail -f /var/log/mail.log
mailq  # Voir la file d'attente des mails

Conclusion

Le Raspberry Pi est désormais un système automatisé complet avec des téléchargements de fichiers sécurisés, des notifications par email automatiques avec pièces jointes, et des capacités de relais SMTP pour les appareils anciens. Que vous utilisiez les ports TLS hérités de Forward Email ou un relais Postfix local, les appareils plus anciens peuvent désormais envoyer des emails de manière fiable via des fournisseurs de messagerie modernes.