Gjør din Raspberry Pi til en sikker FTP-server med e-post videresending
Har du en Raspberry Pi som samler støv? Enten det er den nyeste Pi 5, en Pi 4, Pi Zero eller til og med en eldre modell, vil denne guiden vise deg hvordan du kan gjøre den om til en kraftig, automatisert filserver med e-post videresending. Perfekt for sikkerhetskameraer, IoT-enheter og mer.
Kompatibel med: 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, og Raspberry Pi Zero.
Note
Denne guiden ble testet og verifisert på en Raspberry Pi 3 Model B som kjører Ubuntu Server 22.04 LTS.
Hva vi bygger
Denne guiden vil lede deg gjennom oppsettet av et komplett system som inkluderer:
- Ubuntu Server 22.04 LTS: Et solid, lettvekts operativsystem for Pi.
- En sikker FTP-server (vsftpd): For sikker filoverføring.
- En brannmur (UFW) & Fail2ban: For å holde uvedkommende ute.
- En automatisert filbehandler: Et skript som henter nye filer, sender dem som vedlegg på e-post, og deretter rydder opp.
- E-postalternativer for eldre enheter: To metoder for enheter som ikke støtter moderne TLS:
- Bruk Forward Emails eldre TLS 1.0-porter (enklest)
- Sett opp en Postfix SMTP-relé (fungerer med alle e-postleverandører)
Klar? La oss sette i gang.
Del 1: Få Ubuntu Server på din Pi
Først og fremst, få Ubuntu Server til å kjøre på Raspberry Pi-en. Dette er overraskende enkelt takket være Raspberry Pi Imager.
Hva du trenger
- En kompatibel Raspberry Pi (se listen over)
- Et microSD-kort (minst 8GB, 16GB+ anbefalt)
- En datamaskin med microSD-kortleser
- Passende strømforsyning for din Pi-modell
- Internett-tilgang (Ethernet eller Wi-Fi)
Note
Eldre modeller som Raspberry Pi 2 eller Pi Zero kan være tregere, men fungerer fint for dette oppsettet.
Flashing av OS
-
Last ned Raspberry Pi Imager: Last det ned fra den offisielle nettsiden.
-
Velg OS: I imageren, velg "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".
- For 64-bit modeller (Pi 3, 4, 5, Zero 2 W), velg "Ubuntu Server 22.04.1 LTS (64-bit)".
- For eldre 32-bit modeller (Pi 2, Pi Zero, Pi Zero W), velg "Ubuntu Server 22.04.1 LTS (32-bit)".
-
Velg lagringsenhet: Velg ditt microSD-kort.
Warning
Dette vil slette microSD-kortet ditt. Sørg for at du har sikkerhetskopiert viktige filer.
- Avanserte innstillinger er din venn: Klikk på tannhjulikonet (⚙️) for å sette opp Pi-en i headless-modus (ingen skjerm eller tastatur nødvendig).
- Vertsnavn: Gi Pi-en et navn (f.eks.
pi-server). - SSH: Aktiver det og sett brukernavn og passord.
- Wi-Fi: Hvis du ikke bruker Ethernet, skriv inn Wi-Fi-detaljene dine.
- Lokalisering: Sett tidssone og tastaturoppsett.
- Vertsnavn: Gi Pi-en et navn (f.eks.
- Skriv! Klikk på "WRITE"-knappen og la imageren gjøre jobben sin.
Oppstart og tilkobling
Når imageren er ferdig, sett microSD-kortet inn i Pi-en og koble den til. Gi den noen minutter til å starte opp. Den gjør noe initial oppsett i bakgrunnen. Finn IP-adressen fra ruteren din sin administrasjonsside, og koble til via SSH:
ssh your_username@your_pi_ip_address
Du er inne! Raspberry Pi-en er nå klar for konfigurasjon.
Del 2: Sette opp en sikker FTP-server
Neste steg er å sette opp vsftpd (Very Secure FTP Daemon), konfigurert for maksimal sikkerhet.
Installasjon og konfigurasjon
-
Installer vsftpd:
sudo apt update sudo apt install vsftpd -y -
Ta backup av konfigurasjonsfilen:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup -
Rediger konfigurasjonen:
sudo nano /etc/vsftpd.conf
Tip
Hvis en linje er kommentert ut (starter med #), fjern # for å aktivere den.
Gjør disse endringene:
| Innstilling | Verdi | Formål |
|---|---|---|
anonymous_enable |
NO |
Deaktiver anonym FTP-tilgang |
local_enable |
YES |
Tillat lokale brukere å logge inn |
write_enable |
YES |
Aktiver filopplastinger |
local_umask |
022 |
Sett filrettigheter (644 for filer, 755 for mapper) |
chroot_local_user |
YES |
Lås brukere til hjemmemappen deres |
allow_writeable_chroot |
YES |
Tillat opplastinger i chroot jail |
-
Legg til passiv portrekkevidde: Legg til disse linjene på slutten av filen. Dette trengs for brannmuren.
pasv_enable=YES pasv_min_port=40000 pasv_max_port=50000 -
Aktiver logging: Legg til disse linjene for å aktivere logging for Fail2ban.
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES -
Lagre og start på nytt: Trykk
Ctrl+O,Enter,Ctrl+X, og start deretter tjenesten på nytt:sudo systemctl restart vsftpd
Opprette en FTP-bruker
Opprett en dedikert, begrenset bruker for FTP-tilgang.
-
Opprett brukeren:
sudo adduser ftpuserFølg instruksjonene for å sette passord. De andre feltene (navn, telefon, osv.) kan stå tomme.
-
Opprett mappestrukturen:
sudo mkdir -p /home/ftpuser/ftp/uploads/home/ftpuser/ftp- Hoved FTP-mappe/home/ftpuser/ftp/uploads- Der filer skal lastes opp
-
Sett rettigheter:
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp/uploads
Del 3: Brannmur og beskyttelse mot brute-force
Sikre Pi-en med UFW (Uncomplicated Firewall) og Fail2ban.
Sette opp UFW
-
Installer UFW:
sudo apt install ufw -y -
Sett standardregler:
sudo ufw default deny incoming sudo ufw default allow outgoing -
Tillat SSH (kritisk!):
sudo ufw allow ssh comment 'SSH access'
Warning
Tillat alltid SSH før du aktiverer brannmuren, ellers låser du deg ute!
-
Tillat FTP-porter:
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' -
Aktiver brannmuren:
sudo ufw enable
Sette opp Fail2ban
Fail2ban blokkerer automatisk IP-adresser etter gjentatte mislykkede påloggingsforsøk.
-
Installer Fail2ban:
sudo apt install fail2ban -y -
Opprett lokal konfigurasjon:
sudo nano /etc/fail2ban/jail.local -
Legg til disse konfigurasjonene:
[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
Gjør det kjørbart:
sudo chmod +x /usr/local/bin/ftp-monitor.sh
Opprett en Systemd-tjeneste
sudo nano /etc/systemd/system/ftp-monitor.service
Legg til dette innholdet:
[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
Aktiver og start tjenesten:
sudo systemctl daemon-reload
sudo systemctl enable ftp-monitor.service
sudo systemctl start ftp-monitor.service
Sjekk status:
sudo systemctl status ftp-monitor.service
Del 5: E-postalternativer for eldre enheter
Enheter som FOSSCAM-kameraer støtter ofte ikke moderne TLS-versjoner. Det finnes to løsninger:
Alternativ 1: Bruk Forward Emails Legacy TLS 1.0-porter (anbefalt)
Hvis du bruker Forward Email, er dette den enkleste løsningen. Forward Email tilbyr dedikerte legacy TLS 1.0-porter spesielt for eldre enheter som kameraer, skrivere, skannere og faksmaskiner.
Priser
Forward Email tilbyr flere planer:
| Plan | Pris | Funksjoner |
|---|---|---|
| Gratis | $0/måned | Kun e-postvideresending (ingen sending) |
| Forbedret beskyttelse | $3/måned | SMTP-tilgang + legacy TLS 1.0-porter |
| Team | $9/måned | Forbedret + teamfunksjoner |
| Enterprise | $250/måned | Team + ubegrensede API-forespørsler |
Important
Forbedret beskyttelsesplan ($3/måned) eller høyere kreves for SMTP-tilgang og støtte for legacy TLS 1.0-porter.
Lær mer på Forward Email Pricing.
Generer passordet ditt
Før du konfigurerer enheten din, generer et passord i Forward Email:
- Logg inn på Forward Email
- Gå til Min konto → Domener → [Ditt domene] → Alias
- Opprett eller velg et alias (f.eks.
camera@yourdomain.com) - Klikk "Generate Password" ved siden av aliaset
- Kopier det genererte passordet – dette bruker du til SMTP-autentisering
Tip
Hvert alias kan ha sitt eget passord. Dette er nyttig for å spore hvilken enhet som sendte hvilken e-post.
Konfigurer enheten din
Bruk disse innstillingene i kameraet, skriveren, skanneren eller annen eldre enhet:
| Innstilling | Verdi |
|---|---|
| SMTP-server | smtp.forwardemail.net |
| Port (SSL/TLS) | 2455 |
| Port (STARTTLS) | 2555 (alternativ) |
| Brukernavn | Din alias-e-post (f.eks. camera@yourdomain.com) |
| Passord | Passordet fra "Generate Password" |
| Autentisering | Påkrevd |
| Kryptering | SSL/TLS (anbefalt) eller STARTTLS |
Warning
Disse portene bruker den utdaterte TLS 1.0-protokollen som har kjente sikkerhetssårbarheter (BEAST, POODLE). Bruk kun hvis enheten din ikke støtter moderne TLS 1.2+.
Konfigurer enheten din med disse innstillingene, så sender den e-post direkte gjennom Forward Email uten behov for en lokal reléserver.
For flere detaljer, se Forward Email FAQ om Legacy TLS-støtte.
Alternativ 2: Sett opp en Postfix SMTP-relé
Hvis du ikke bruker Forward Email, eller foretrekker en lokal reléløsning, sett opp Postfix på Raspberry Pi for å fungere som mellomledd. Dette fungerer med hvilken som helst e-postleverandør (Gmail, Outlook, Yahoo, AOL, osv.).
Installer Postfix
sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y
Under installasjonen:
- Velg "Internet Site"
- Skriv inn Pi-ens vertsnavn (f.eks.
raspberrypi-ftp) for "System mail name"
Velg din e-postleverandør
| Leverandør | SMTP-server | Port | Krever app-passord? |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | Ja |
| Outlook | smtp-mail.outlook.com | 587 | Ja |
| Yahoo | smtp.mail.yahoo.com | 465 | Ja |
| AOL | smtp.aol.com | 587 | Ja |
Skaff et app-spesifikt passord
De fleste leverandører krever app-passord for tredjepartsapplikasjoner. Generer ett fra sikkerhetsinnstillingene til e-postleverandøren din:
- Gmail: Google Account Security
- Outlook: Microsoft Account Security
- Yahoo: Yahoo Account Security
- AOL: AOL Account Security
Important
Bruk aldri ditt vanlige e-postpassord. Bruk alltid et app-spesifikt passord.
Konfigurer SASL-autentisering
Opprett passordfilen for valgt leverandør. Dette eksempelet bruker Yahoo:
sudo mkdir -p /etc/postfix/sasl
sudo chmod 700 /etc/postfix/sasl
sudo nano /etc/postfix/sasl/sasl_passwd
Legg til denne linjen (juster server og port for din leverandør):
[smtp.mail.yahoo.com]:465 your_email@yahoo.com:your_app_password
For Gmail, bruk:
[smtp.gmail.com]:587 your_email@gmail.com:your_app_password
Sikre og hashe filen:
sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd
Konfigurer e-postadresse-mapping
Omskriv lokale e-postadresser for å matche e-postleverandøren din:
sudo mkdir -p /etc/postfix/map
sudo chmod 700 /etc/postfix/map
sudo nano /etc/postfix/map/regex_map
Legg til denne linjen (erstatt HOSTNAME med Pi-ens vertsnavn og bruk din e-post):
/.+@HOSTNAME/ your_email@provider.com
Eksempel:
/.+@raspberrypi-ftp/ john@yahoo.com
Sikre filen:
sudo chmod 600 /etc/postfix/map/regex_map
Konfigurer Postfix hovedinnstillinger
Rediger hovedkonfigurasjonen:
sudo nano /etc/postfix/main.cf
Finn og oppdater relay host (eller legg til på slutten):
relayhost = [smtp.mail.yahoo.com]:465
Legg til disse innstillingene på slutten av filen:
# SMTP Relay Configuration
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
# Network settings
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24
Tip
For Gmail (port 587), sett smtp_tls_wrappermode = no i stedet for yes.
Warning
Oppdater mynetworks med ditt faktiske nettverksområde. Legg kun til pålitelige nettverk – enheter på disse nettverkene kan sende e-post uten autentisering.
Vanlige nettverksområder:
| Nettverksområde | IP-adresseområde |
|---|---|
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 |
Oppdater brannmur og start på nytt
sudo ufw allow 25/tcp comment 'SMTP for local devices'
sudo systemctl restart postfix
Sjekk at Postfix kjører:
sudo systemctl status postfix
Test reléet
Send en test-epost:
echo "Test from Postfix" | mail -s "Test" your_email@provider.com
Sjekk loggene:
sudo tail -f /var/log/mail.log
Se etter status=sent for å bekrefte suksess.
Konfigurer enheten din
I kamera- eller enhetsinnstillingene dine:
- SMTP-server: Din Pi sin IP-adresse (f.eks.
192.168.1.100) - SMTP-port:
25 - Autentisering: Ingen
- Kryptering: Ingen (kun lokalt nettverk)
Feilsøking
Hvis problemer oppstår, sjekk disse loggfilene:
FTP-server:
sudo tail -f /var/log/vsftpd.log
Fail2ban:
sudo fail2ban-client status
sudo tail -f /var/log/fail2ban.log
Filovervåker:
sudo journalctl -u ftp-monitor.service -f
Postfix Mail:
sudo tail -f /var/log/mail.log
mailq # Vis mail-kø
Avslutning
Raspberry Pi er nå et komplett automatisert system med sikre filopplastinger, automatiske e-postvarsler med vedlegg, og SMTP-relay-funksjoner for eldre enheter. Enten du bruker Forward Email sine eldre TLS-porter eller en lokal Postfix-relay, kan eldre enheter nå sende e-poster pålitelig gjennom moderne e-postleverandører.