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
-
Scarica Raspberry Pi Imager: Scaricalo dal sito ufficiale.
-
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)".
-
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.
- 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.
- Hostname: Dai un nome al tuo Pi (es.
- 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
-
Installa vsftpd:
sudo apt update sudo apt install vsftpd -y -
Backup del file di configurazione:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup -
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 |
-
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 -
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 -
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.
-
Crea l'utente:
sudo adduser ftpuserSegui le istruzioni per impostare una password. Gli altri campi (nome, telefono, ecc.) possono essere lasciati vuoti.
-
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
-
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
-
Installa UFW:
sudo apt install ufw -y -
Imposta le politiche predefinite:
sudo ufw default deny incoming sudo ufw default allow outgoing -
Consenti SSH (critico!):
sudo ufw allow ssh comment 'SSH access'
Warning
Consenti sempre SSH prima di abilitare il firewall, altrimenti ti bloccherai fuori!
-
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' -
Abilita il firewall:
sudo ufw enable
Configurazione di Fail2ban
Fail2ban blocca automaticamente gli indirizzi IP dopo ripetuti tentativi di login falliti.
-
Installa Fail2ban:
sudo apt install fail2ban -y -
Crea una configurazione locale:
sudo nano /etc/fail2ban/jail.local -
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 -
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:
Option 1: Using Forward Email API (Recommended)
If you have a Forward Email account, use the Email API for the most reliable delivery.
Get Your API Key
- Log in to Forward Email
- Navigate to My Account → Security
- Scroll down to the "Developer Access" section at the bottom
- 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:
Opzione 1: Usa le porte Legacy TLS 1.0 di Forward Email (Consigliato)
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:
- Accedi a Forward Email
- Vai su Il mio account → Domini → [Il tuo dominio] → Alias
- Crea o seleziona un alias (es.
camera@iltuodominio.com) - Clicca su "Genera Password" accanto all'alias
- 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 | Sì |
| Outlook | smtp-mail.outlook.com | 587 | Sì |
| Yahoo | smtp.mail.yahoo.com | 465 | Sì |
| AOL | smtp.aol.com | 587 | Sì |
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:
- Gmail: Google Account Security
- Outlook: Microsoft Account Security
- Yahoo: Yahoo Account Security
- AOL: AOL Account Security
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.