Muuta Raspberry Pi turvalliseksi FTP-palvelimeksi sähköpostin välityksellä
Onko sinulla Raspberry Pi pölyttymässä? Olipa kyseessä uusin Pi 5, Pi 4, Pi Zero tai jopa vanhempi malli, tämä opas näyttää, miten siitä tehdään tehokas, automatisoitu tiedostopalvelin sähköpostin välitysominaisuuksilla. Täydellinen valvontakameroille, IoT-laitteille ja muille.
Yhteensopiva: 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 ja Raspberry Pi Zero.
Note
Tämä opas testattiin ja varmistettiin Raspberry Pi 3 Model B:llä, jossa on Ubuntu Server 22.04 LTS.
Mitä rakennamme
Tämä opas ohjaa sinut läpi täydellisen järjestelmän asennuksen, joka sisältää:
- Ubuntu Server 22.04 LTS: Vakaa, kevyt käyttöjärjestelmä Pi:lle.
- Turvallinen FTP-palvelin (vsftpd): Tiedostojen turvalliseen siirtoon.
- Palomuuri (UFW) & Fail2ban: Pidä pahikset ulkona.
- Automaattinen tiedostojen käsittelijä: Skripti, joka noutaa uudet tiedostot, lähettää ne sähköpostin liitteinä ja siivoaa peräänsä.
- Sähköpostivaihtoehdot vanhemmille laitteille: Kaksi tapaa laitteille, jotka eivät tue nykyaikaista TLS:ää:
- Käytä Forward Emailin vanhoja TLS 1.0 -portteja (helpoin)
- Asenna Postfix SMTP -välityspalvelin (toimii minkä tahansa sähköpostipalveluntarjoajan kanssa)
Valmiina? Aloitetaan.
Osa 1: Ubuntu Serverin asentaminen Pi:lle
Ensimmäiseksi asenna Ubuntu Server Raspberry Pi:lle. Tämä on yllättävän helppoa Raspberry Pi Imagerin ansiosta.
Mitä tarvitset
- Mikä tahansa yhteensopiva Raspberry Pi (katso yllä oleva lista)
- microSD-kortti (vähintään 8GB, suositus 16GB+)
- Tietokone, jossa on microSD-kortinlukija
- Sopiva virtalähde Pi-mallillesi
- Internet-yhteys (Ethernet tai Wi-Fi)
Note
Vanhemmat mallit kuten Raspberry Pi 2 tai Pi Zero voivat olla hitaampia, mutta toimivat hyvin tässä asennuksessa.
Käyttöjärjestelmän kirjoittaminen
-
Hanki Raspberry Pi Imager: Lataa se viralliselta sivustolta.
-
Valitse käyttöjärjestelmä: Imagerissa valitse "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".
- 64-bittisille malleille (Pi 3, 4, 5, Zero 2 W) valitse "Ubuntu Server 22.04.1 LTS (64-bit)".
- Vanhemmille 32-bittisille malleille (Pi 2, Pi Zero, Pi Zero W) valitse "Ubuntu Server 22.04.1 LTS (32-bit)".
-
Valitse tallennusväline: Valitse microSD-korttisi.
Warning
Tämä tyhjentää microSD-korttisi. Varmista, että olet varmuuskopioinut tärkeät tiedot.
- Lisäasetukset ovat ystäväsi: Klikkaa rataskuvaketta (⚙️) asettaaksesi Pi:n headless-tilaan (näyttöä tai näppäimistöä ei tarvita).
- Isäntänimi: Anna Pi:lle nimi (esim.
pi-server). - SSH: Ota käyttöön ja aseta käyttäjänimi ja salasana.
- Wi-Fi: Jos et käytä Ethernetiä, syötä Wi-Fi-tiedot.
- Alueasetukset: Aseta aikavyöhyke ja näppäimistöasettelu.
- Isäntänimi: Anna Pi:lle nimi (esim.
- Kirjoita! Klikkaa "WRITE"-painiketta ja anna imagerin hoitaa hommansa.
Käynnistys ja yhdistäminen
Kun imager on valmis, laita microSD-kortti Pi:hin ja kytke se päälle. Anna sen käynnistyä muutama minuutti. Se tekee taustalla alkuasetuksia. Etsi sen IP-osoite reitittimesi hallintasivulta ja yhdistä sitten SSH:lla:
ssh your_username@your_pi_ip_address
Olet sisällä! Raspberry Pi on nyt valmis konfiguroitavaksi.
Osa 2: Turvallisen FTP-palvelimen asentaminen
Seuraavaksi asenna vsftpd (Very Secure FTP Daemon), konfiguroituna maksimaalista turvallisuutta varten.
Asennus ja konfigurointi
-
Asenna vsftpd:
sudo apt update sudo apt install vsftpd -y -
Varmuuskopioi konfiguraatiotiedosto:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup -
Muokkaa konfiguraatiota:
sudo nano /etc/vsftpd.conf
Tip
Jos rivi on kommentoitu (alkaa #-merkillä), poista # ottaaksesi sen käyttöön.
Tee nämä muutokset:
| Asetus | Arvo | Tarkoitus |
|---|---|---|
anonymous_enable |
NO |
Poista anonyymi FTP-käyttö käytöstä |
local_enable |
YES |
Salli paikallisten käyttäjien kirjautuminen |
write_enable |
YES |
Salli tiedostojen lataaminen |
local_umask |
022 |
Aseta tiedostojen oikeudet (644 tiedostoille, 755 kansioille) |
chroot_local_user |
YES |
Rajoita käyttäjät kotihakemistoonsa |
allow_writeable_chroot |
YES |
Salli lataukset chroot-ympäristössä |
-
Lisää passiivinen porttialue: Lisää nämä rivit tiedoston loppuun. Tämä tarvitaan palomuuria varten.
pasv_enable=YES pasv_min_port=40000 pasv_max_port=50000 -
Ota lokitus käyttöön: Lisää nämä rivit Fail2ban-lokitusta varten.
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES -
Tallenna ja käynnistä uudelleen: Paina
Ctrl+O,Enter,Ctrl+X, ja käynnistä palvelu uudelleen:sudo systemctl restart vsftpd
FTP-käyttäjän luominen
Luo oma rajoitettu käyttäjä FTP-käyttöä varten.
-
Luo käyttäjä:
sudo adduser ftpuserSeuraa ohjeita ja aseta salasana. Muut kentät (nimi, puhelin jne.) voi jättää tyhjiksi.
-
Luo hakemistorakenne:
sudo mkdir -p /home/ftpuser/ftp/uploads/home/ftpuser/ftp- Pää-FTP-hakemisto/home/ftpuser/ftp/uploads- Hakemisto tiedostojen lataamista varten
-
Aseta oikeudet:
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp/uploads
Osa 3: Palomuuri ja brute-force-suojaus
Suojaa Pi UFW:llä (Uncomplicated Firewall) ja Fail2banilla.
UFW:n asentaminen
-
Asenna UFW:
sudo apt install ufw -y -
Aseta oletuskäytännöt:
sudo ufw default deny incoming sudo ufw default allow outgoing -
Salli SSH (välttämätön!):
sudo ufw allow ssh comment 'SSH access'
Warning
Salli aina SSH ennen palomuurin käyttöönottoa, muuten lukitset itsesi ulos!
-
Salli FTP-portit:
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' -
Ota palomuuri käyttöön:
sudo ufw enable
Fail2banin asentaminen
Fail2ban estää automaattisesti IP-osoitteita toistuvien epäonnistuneiden kirjautumisyritysten jälkeen.
-
Asenna Fail2ban:
sudo apt install fail2ban -y -
Luo paikallinen konfiguraatio:
sudo nano /etc/fail2ban/jail.local -
Lisää nämä asetukset:
[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
Tee se suoritettavaksi:
sudo chmod +x /usr/local/bin/ftp-monitor.sh
Luo Systemd-palvelu
sudo nano /etc/systemd/system/ftp-monitor.service
Lisää tämä sisältö:
[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
Ota palvelu käyttöön ja käynnistä se:
sudo systemctl daemon-reload
sudo systemctl enable ftp-monitor.service
sudo systemctl start ftp-monitor.service
Tarkista tila:
sudo systemctl status ftp-monitor.service
Osa 5: Sähköpostivaihtoehdot vanhoille laitteille
Laitteet kuten FOSSCAM-kamerat eivät usein tue moderneja TLS-versioita. On kaksi ratkaisua:
Vaihtoehto 1: Käytä Forward Emailin Legacy TLS 1.0 -portteja (Suositeltu)
Jos käytät Forward Emailia, tämä on helpoin ratkaisu. Forward Email tarjoaa omistetut legacy TLS 1.0 -portit erityisesti vanhemmille laitteille kuten kameroille, tulostimille, skannereille ja fakseille.
Hinnoittelu
Forward Email tarjoaa useita suunnitelmia:
| Suunnitelma | Hinta | Ominaisuudet |
|---|---|---|
| Ilmainen | 0 $/kuukausi | Vain sähköpostin edelleenlähetys (ei lähettämistä) |
| Parannettu suojaus | 3 $/kuukausi | SMTP-yhteys + legacy TLS 1.0 -portit |
| Tiimi | 9 $/kuukausi | Parannettu + tiimitoiminnot |
| Yritys | 250 $/kuukausi | Tiimi + rajattomat API-kutsut |
Important
Parannettu suojaus -suunnitelma (3 $/kuukausi) tai sitä korkeampi vaaditaan SMTP-yhteyteen ja legacy TLS 1.0 -porttien tukeen.
Lisätietoja osoitteessa Forward Email Pricing.
Luo salasana
Ennen laitteen konfigurointia, luo salasana Forward Emailissa:
- Kirjaudu sisään osoitteessa Forward Email
- Siirry kohtaan Oma tili → Domainit → [Sinun domainisi] → Aliakset
- Luo tai valitse alias (esim.
camera@yourdomain.com) - Klikkaa "Generate Password" aliaksen vieressä
- Kopioi luotu salasana – tätä käytät SMTP-todennukseen
Tip
Jokaisella aliaksella voi olla oma salasana. Tämä on hyödyllistä, kun haluat seurata, mikä laite lähetti minkäkin sähköpostin.
Konfiguroi laitteesi
Käytä näitä asetuksia kamerassasi, tulostimessasi, skannerissasi tai muussa vanhassa laitteessa:
| Asetus | Arvo |
|---|---|
| SMTP-palvelin | smtp.forwardemail.net |
| Portti (SSL/TLS) | 2455 |
| Portti (STARTTLS) | 2555 (vaihtoehtoinen) |
| Käyttäjätunnus | Aliaksesi sähköpostiosoite (esim. camera@yourdomain.com) |
| Salasana | "Generate Password" -kohdassa luotu salasana |
| Todennus | Pakollinen |
| Salaus | SSL/TLS (suositeltu) tai STARTTLS |
Warning
Nämä portit käyttävät vanhentunutta TLS 1.0 -protokollaa, jolla on tunnettuja tietoturva-aukkoja (BEAST, POODLE). Käytä vain, jos laitteesi ei tue moderneja TLS 1.2+ -versioita.
Konfiguroi laitteesi näillä asetuksilla, niin se lähettää sähköpostit suoraan Forward Emailin kautta ilman paikallista välipalvelinta.
Lisätietoja löytyy Forward Emailin UKK:sta Legacy TLS -tuesta.
Vaihtoehto 2: Perusta Postfix SMTP -välipalvelin
Jos et käytä Forward Emailia tai haluat paikallisen välipalveluratkaisun, asenna Postfix Raspberry Pi:hin toimimaan välittäjänä. Tämä toimii minkä tahansa sähköpostipalveluntarjoajan kanssa (Gmail, Outlook, Yahoo, AOL jne.).
Asenna Postfix
sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y
Asennuksen aikana:
- Valitse "Internet Site"
- Syötä Pi:n isäntänimi (esim.
raspberrypi-ftp) kohtaan "System mail name"
Valitse Sähköpostipalveluntarjoajasi
| Palveluntarjoaja | SMTP-palvelin | Portti | Sovellussalasana vaaditaan? |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | Kyllä |
| Outlook | smtp-mail.outlook.com | 587 | Kyllä |
| Yahoo | smtp.mail.yahoo.com | 465 | Kyllä |
| AOL | smtp.aol.com | 587 | Kyllä |
Hanki Sovellussalasana
Useimmat palveluntarjoajat vaativat sovellussalasanoja kolmannen osapuolen sovelluksille. Luo sellainen sähköpostipalveluntarjoajasi suojausasetuksista:
- Gmail: Google Account Security
- Outlook: Microsoft Account Security
- Yahoo: Yahoo Account Security
- AOL: AOL Account Security
Important
Älä koskaan käytä tavallista sähköpostisalasanasi. Käytä aina sovellussalasanaa.
Määritä SASL-todennus
Luo salasana tiedosto valitsemallesi palveluntarjoajalle. Tässä esimerkissä käytetään Yahoo:
sudo mkdir -p /etc/postfix/sasl
sudo chmod 700 /etc/postfix/sasl
sudo nano /etc/postfix/sasl/sasl_passwd
Lisää tämä rivi (säädä palvelin ja portti palveluntarjoajasi mukaan):
[smtp.mail.yahoo.com]:465 your_email@yahoo.com:your_app_password
Gmailille käytä:
[smtp.gmail.com]:587 your_email@gmail.com:your_app_password
Suojaa ja hajauta tiedosto:
sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd
Määritä Sähköpostiosoitteiden Uudelleenkirjoitus
Uudelleenkirjoita paikalliset sähköpostiosoitteet vastaamaan sähköpostipalveluntarjoajaasi:
sudo mkdir -p /etc/postfix/map
sudo chmod 700 /etc/postfix/map
sudo nano /etc/postfix/map/regex_map
Lisää tämä rivi (korvaa HOSTNAME Pi:n isäntänimelläsi ja käytä omaa sähköpostiasi):
/.+@HOSTNAME/ your_email@provider.com
Esimerkki:
/.+@raspberrypi-ftp/ john@yahoo.com
Suojaa tiedosto:
sudo chmod 600 /etc/postfix/map/regex_map
Määritä Postfixin Pääasetukset
Muokkaa pääkonfiguraatiota:
sudo nano /etc/postfix/main.cf
Etsi ja päivitä relay host (tai lisää tiedoston loppuun):
relayhost = [smtp.mail.yahoo.com]:465
Lisää nämä asetukset tiedoston loppuun:
# 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
Gmailille (portti 587) aseta smtp_tls_wrappermode = no yes sijaan.
Warning
Päivitä mynetworks todellisella verkkoalueellasi. Lisää vain luotetut verkot – kaikki näissä verkoissa olevat laitteet voivat välittää sähköpostia ilman todennusta.
Yleisiä verkkoalueita:
| Verkkoväli | IP-osoitealue |
|---|---|
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 |
Päivitä Palomuuri ja Käynnistä Uudelleen
sudo ufw allow 25/tcp comment 'SMTP for local devices'
sudo systemctl restart postfix
Varmista, että Postfix on käynnissä:
sudo systemctl status postfix
Testaa Välitys
Lähetä testisähköposti:
echo "Test from Postfix" | mail -s "Test" your_email@provider.com
Tarkista lokit:
sudo tail -f /var/log/mail.log
Etsi status=sent vahvistukseksi onnistumisesta.
Määritä Laitteesi
Kamerasi tai laitteen asetuksissa:
- SMTP-palvelin: Pi:n IP-osoite (esim.
192.168.1.100) - SMTP-portti:
25 - Todennus: Ei
- Salaus: Ei (vain paikallisverkossa)
Vianmääritys
Jos ongelmia ilmenee, tarkista nämä lokitiedostot:
FTP-palvelin:
sudo tail -f /var/log/vsftpd.log
Fail2ban:
sudo fail2ban-client status
sudo tail -f /var/log/fail2ban.log
Tiedostovalvonta:
sudo journalctl -u ftp-monitor.service -f
Postfix-sähköposti:
sudo tail -f /var/log/mail.log
mailq # Näytä postijono
Yhteenveto
Raspberry Pi on nyt täydellinen automatisoitu järjestelmä, jossa on turvalliset tiedostojen lataukset, automaattiset sähköposti-ilmoitukset liitteineen sekä SMTP-välitysominaisuudet vanhemmille laitteille. Käytitpä sitten Forward Emailin vanhoja TLS-portteja tai paikallista Postfix-välitystä, vanhemmat laitteet voivat nyt lähettää sähköposteja luotettavasti nykyaikaisten sähköpostipalveluntarjoajien kautta.