Trasforma il tuo Raspberry Pi in un Server FTP Sicuro con Relay Email

Hai un Raspberry Pi che prende polvere? Che sia l’ultimo Pi 5, un Pi 4, Pi Zero o anche un modello più vecchio, questa guida ti mostrerà come trasformarlo in un potente server di file automatizzato con capacità di relay email. Perfetto per telecamere di sicurezza, dispositivi IoT e altro.

Compatibile con: 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 e Raspberry Pi Zero.

Note

Questa guida è stata testata e verificata su un Raspberry Pi 3 Model B con Ubuntu Server 22.04 LTS.

Cosa Stiamo Costruendo

Questa guida ti guiderà nella configurazione di un sistema completo che include:

  • Ubuntu Server 22.04 LTS: Un sistema operativo solido e leggero per il Pi.
  • Un Server FTP Sicuro (vsftpd): Per caricare file in modo sicuro.
  • Un Firewall (UFW) & Fail2ban: Per tenere fuori i malintenzionati.
  • Un Elaboratore di File Automatico: Uno script che prende i nuovi file, li invia via email come allegati e poi si pulisce da solo.
  • Opzioni Email per Dispositivi Legacy: Due approcci per dispositivi che non supportano TLS moderno:
    • Usa le porte legacy TLS 1.0 di Forward Email (la più semplice)
    • Configura un relay SMTP Postfix (funziona con qualsiasi provider email)

Pronto? Iniziamo.

Parte 1: Installare Ubuntu Server sul tuo Pi

Prima di tutto, installa Ubuntu Server sul Raspberry Pi. È sorprendentemente facile grazie al Raspberry Pi Imager.

Cosa Ti Serve

  • Qualsiasi Raspberry Pi compatibile (vedi lista sopra)
  • Una scheda microSD (minimo 8GB, consigliati 16GB+)
  • Un computer con lettore di schede microSD
  • Alimentatore adeguato per il tuo modello di Pi
  • Accesso a Internet (Ethernet o Wi-Fi)

Note

I modelli più vecchi come Raspberry Pi 2 o Pi Zero potrebbero essere più lenti ma funzioneranno bene per questa configurazione.

Flashare il Sistema Operativo

  1. Scarica Raspberry Pi Imager: Scaricalo dal sito ufficiale.

  2. Scegli il Sistema Operativo: Nell’imager, seleziona "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".

    • Per modelli 64-bit (Pi 3, 4, 5, Zero 2 W), scegli "Ubuntu Server 22.04.1 LTS (64-bit)".
    • Per modelli più vecchi a 32-bit (Pi 2, Pi Zero, Pi Zero W), scegli "Ubuntu Server 22.04.1 LTS (32-bit)".
  3. Seleziona la Memoria: Scegli la tua scheda microSD.

Warning

Questo cancellerà completamente la tua scheda microSD. Assicurati di aver fatto il backup di tutto ciò che è importante.

  1. Le Opzioni Avanzate sono tue Amiche: Clicca sull’icona dell’ingranaggio (⚙️) per configurare il Pi in modalità headless (senza monitor o tastiera).
    • Hostname: Dai un nome al tuo Pi (es. pi-server).
    • SSH: Abilitalo e imposta un nome utente e una password.
    • Wi-Fi: Se non usi Ethernet, inserisci i dati della tua rete Wi-Fi.
    • Locale: Imposta il fuso orario e la disposizione della tastiera.
  2. Scrivi! Clicca sul pulsante "WRITE" e lascia che l'imager faccia il suo lavoro.

Avvio e Connessione

Una volta che l'imager ha finito, inserisci la scheda microSD nel Pi e collegalo. Aspetta qualche minuto per l'avvio. Sta eseguendo alcune configurazioni iniziali in background. Trova il suo indirizzo IP dalla pagina di amministrazione del router, quindi connettiti via SSH:

ssh your_username@your_pi_ip_address

Sei dentro! Il Raspberry Pi è ora pronto per la configurazione.

Parte 2: Configurazione di un Server FTP Sicuro

Successivamente, configura vsftpd (Very Secure FTP Daemon), configurato per la massima sicurezza.

Installazione e Configurazione

  1. Installa vsftpd:

    sudo apt update
    sudo apt install vsftpd -y
    
  2. Backup del file di configurazione:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. Modifica la configurazione:

    sudo nano /etc/vsftpd.conf
    

Tip

Se una riga è commentata (inizia con #), decommentala rimuovendo il #.

Apporta queste modifiche:

Impostazione Valore Scopo
anonymous_enable NO Disabilita l'accesso FTP anonimo
local_enable YES Permetti agli utenti locali di effettuare il login
write_enable YES Abilita il caricamento di file
local_umask 022 Imposta i permessi dei file (644 per file, 755 per cartelle)
chroot_local_user YES Limita gli utenti alla loro directory home
allow_writeable_chroot YES Permetti caricamenti nella jail chroot
  1. Aggiungi l'intervallo di porte passive: Aggiungi queste righe alla fine del file. Necessario per il firewall.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. Abilita il logging: Aggiungi queste righe per abilitare il logging per Fail2ban.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. Salva e riavvia: Premi Ctrl+O, Invio, Ctrl+X, quindi riavvia il servizio:

    sudo systemctl restart vsftpd
    

Creazione di un Utente FTP

Crea un utente dedicato e limitato per l'accesso FTP.

  1. Crea l'utente:

    sudo adduser ftpuser
    

    Segui le istruzioni per impostare una password. Gli altri campi (nome, telefono, ecc.) possono essere lasciati vuoti.

  2. Crea la struttura delle directory:

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - Directory principale FTP
    • /home/ftpuser/ftp/uploads - Dove verranno caricati i file
  3. Imposta i permessi:

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

Parte 3: Firewall e Protezione da Attacchi Brute-Force

Proteggi il Pi con UFW (Uncomplicated Firewall) e Fail2ban.

Configurazione di UFW

  1. Installa UFW:

    sudo apt install ufw -y
    
  2. Imposta le politiche predefinite:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. Consenti SSH (critico!):

    sudo ufw allow ssh comment 'SSH access'
    

Warning

Consenti sempre SSH prima di abilitare il firewall, altrimenti ti bloccherai fuori!

  1. Consenti le porte 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. Abilita il firewall:

    sudo ufw enable
    

Configurazione di Fail2ban

Fail2ban blocca automaticamente gli indirizzi IP dopo ripetuti tentativi di login falliti.

  1. Installa Fail2ban:

    sudo apt install fail2ban -y
    
  2. Crea una configurazione locale:

    sudo nano /etc/fail2ban/jail.local
    
  3. Aggiungi queste configurazioni:

    [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

Rendilo eseguibile:

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

Crea un servizio Systemd

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

Aggiungi questo contenuto:

[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

Abilita e avvia il servizio:

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

Controlla lo stato:

sudo systemctl status ftp-monitor.service

Parte 5: Opzioni Email per Dispositivi Legacy

Dispositivi come le telecamere FOSSCAM spesso non supportano le versioni moderne di TLS. Ci sono due soluzioni:

Se usi Forward Email, questa è la soluzione più semplice. Forward Email fornisce porte dedicate legacy TLS 1.0 specificamente per dispositivi più vecchi come telecamere, stampanti, scanner e fax.

Prezzi

Forward Email offre diversi piani:

Piano Prezzo Caratteristiche
Gratis $0/mese Solo inoltro email (nessuna invio)
Protezione Avanzata $3/mese Accesso SMTP + porte legacy TLS 1.0
Team $9/mese Protezione avanzata + funzionalità team
Enterprise $250/mese Team + richieste API illimitate

Important

Il piano Protezione Avanzata ($3/mese) o superiore è richiesto per l'accesso SMTP e il supporto delle porte legacy TLS 1.0.

Scopri di più su Forward Email Pricing.

Genera la tua password

Prima di configurare il dispositivo, genera una password su Forward Email:

  1. Accedi a Forward Email
  2. Vai su Il mio account → Domini → [Il tuo dominio] → Alias
  3. Crea o seleziona un alias (es. camera@iltuodominio.com)
  4. Clicca su "Genera Password" accanto all'alias
  5. Copia la password generata - la userai per l'autenticazione SMTP

Tip

Ogni alias può avere una propria password. Utile per tracciare quale dispositivo ha inviato quale email.

Configura il tuo dispositivo

Usa queste impostazioni nella tua telecamera, stampante, scanner o altro dispositivo legacy:

Impostazione Valore
Server SMTP smtp.forwardemail.net
Porta (SSL/TLS) 2455
Porta (STARTTLS) 2555 (alternativa)
Nome utente La tua email alias (es. camera@iltuodominio.com)
Password La password generata da "Genera Password"
Autenticazione Richiesta
Crittografia SSL/TLS (consigliato) o STARTTLS

Warning

Queste porte usano il protocollo TLS 1.0 deprecato che presenta vulnerabilità note (BEAST, POODLE). Usale solo se il tuo dispositivo non supporta TLS 1.2+ moderno.

Configura semplicemente il dispositivo con queste impostazioni e invierà email direttamente tramite Forward Email senza bisogno di un server relay locale.

Per maggiori dettagli, consulta la FAQ di Forward Email sul supporto Legacy TLS.

Opzione 2: Configura un relay SMTP Postfix

Se non usi Forward Email, o preferisci una soluzione relay locale, configura Postfix sul Raspberry Pi per agire da intermediario. Funziona con qualsiasi provider email (Gmail, Outlook, Yahoo, AOL, ecc.).

Installa Postfix

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

Durante l'installazione:

  • Seleziona "Internet Site"
  • Inserisci il nome host del tuo Pi (es. raspberrypi-ftp) per "System mail name"

Scegli il tuo provider email

Provider Server SMTP Porta Password App richiesta?
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo smtp.mail.yahoo.com 465
AOL smtp.aol.com 587

Ottieni una password specifica per l'app

La maggior parte dei provider richiede password per app per applicazioni di terze parti. Generane una dalle impostazioni di sicurezza del tuo provider email:

Important

Non usare mai la tua password email normale. Usa sempre una password specifica per l'app.

Configura l'autenticazione SASL

Crea il file password per il provider scelto. Questo esempio usa Yahoo:

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

Aggiungi questa riga (adatta server e porta per il tuo provider):

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

Per Gmail, usa:

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

Proteggi e crea l'hash del file:

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

Configura la mappatura degli indirizzi email

Riscrivi gli indirizzi email locali per farli corrispondere al tuo provider email:

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

Aggiungi questa riga (sostituisci HOSTNAME con il nome host del tuo Pi e usa la tua email):

/.+@HOSTNAME/    your_email@provider.com

Esempio:

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

Proteggi il file:

sudo chmod 600 /etc/postfix/map/regex_map

Configura le impostazioni principali di Postfix

Modifica la configurazione principale:

sudo nano /etc/postfix/main.cf

Trova e aggiorna il relay host (o aggiungilo alla fine):

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

Aggiungi queste impostazioni alla fine del file:

# Configurazione SMTP Relay
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

# Impostazioni di rete
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24

Tip

Per Gmail (porta 587), imposta smtp_tls_wrappermode = no invece di yes.

Warning

Aggiorna mynetworks con il tuo intervallo di rete reale. Aggiungi solo reti fidate - qualsiasi dispositivo su queste reti può inviare mail senza autenticazione.

Intervalli di rete comuni:

Intervallo di rete Intervallo indirizzi 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

Aggiorna il firewall e riavvia

sudo ufw allow 25/tcp comment 'SMTP per dispositivi locali'
sudo systemctl restart postfix

Verifica che Postfix sia in esecuzione:

sudo systemctl status postfix

Testa il relay

Invia una mail di prova:

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

Controlla i log:

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

Cerca status=sent per confermare il successo.

Configura il tuo dispositivo

Nelle impostazioni della tua telecamera o dispositivo:

  • Server SMTP: L'indirizzo IP del tuo Pi (es. 192.168.1.100)
  • Porta SMTP: 25
  • Autenticazione: Nessuna
  • Crittografia: Nessuna (solo rete locale)

Risoluzione dei problemi

Se si verificano problemi, controlla questi file di log:

Server FTP:

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

Fail2ban:

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

Monitoraggio file:

sudo journalctl -u ftp-monitor.service -f

Postfix Mail:

sudo tail -f /var/log/mail.log
mailq  # Visualizza la coda della posta

Conclusione

Il Raspberry Pi è ora un sistema completo e automatizzato con caricamenti file sicuri, notifiche email automatiche con allegati e capacità di relay SMTP per dispositivi legacy. Sia utilizzando le porte TLS legacy di Forward Email sia un relay Postfix locale, i dispositivi più vecchi possono ora inviare email in modo affidabile tramite provider email moderni.