Alakítsd Raspberry Pi-d biztonságos FTP szerverré email továbbítással

Porosodik egy Raspberry Pi-d? Legyen az legújabb Pi 5, Pi 4, Pi Zero vagy akár egy régebbi modell, ez az útmutató megmutatja, hogyan alakíthatod át egy erőteljes, automatizált fájlszerverré email továbbítási képességekkel. Tökéletes biztonsági kamerákhoz, IoT eszközökhöz és még sok máshoz.

Kompatibilis: 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 és Raspberry Pi Zero.

Note

Ezt az útmutatót egy Raspberry Pi 3 Model B-n teszteltük és igazoltuk Ubuntu Server 22.04 LTS futtatásával.

Mit építünk

Ez az útmutató végigvezet egy teljes rendszer beállításán, amely tartalmazza:

  • Ubuntu Server 22.04 LTS: Egy szilárd, könnyű operációs rendszer a Pi-hez.
  • Biztonságos FTP szerver (vsftpd): Biztonságos fájlátvitelhez.
  • Tűzfal (UFW) és Fail2ban: Hogy távol tartsuk a rosszindulatúkat.
  • Automatizált fájlkezelő: Egy script, amely új fájlokat fogad, email mellékletként elküldi, majd takarít maga után.
  • Email opciók régebbi eszközökhöz: Két megoldás olyan eszközöknek, amelyek nem támogatják a modern TLS-t:
    • Forward Email régi TLS 1.0 portjainak használata (legkönnyebb)
    • Postfix SMTP relay beállítása (bármely email szolgáltatóval működik)

Készen állsz? Vágjunk bele.

1. rész: Ubuntu Server telepítése a Pi-dre

Először is, futtasd az Ubuntu Servert a Raspberry Pi-n. Ez meglepően egyszerű a Raspberry Pi Imager segítségével.

Amire szükséged lesz

  • Bármely kompatibilis Raspberry Pi (lásd fent)
  • Egy microSD kártya (minimum 8GB, ajánlott 16GB+)
  • Egy számítógép microSD kártya olvasóval
  • Megfelelő tápegység a Pi modellhez
  • Internetkapcsolat (Ethernet vagy Wi-Fi)

Note

Régebbi modellek, mint a Raspberry Pi 2 vagy Pi Zero lassabbak lehetnek, de ez a beállítás jól működik velük is.

Az operációs rendszer telepítése

  1. Szerezd be a Raspberry Pi Imager-t: Töltsd le a hivatalos weboldalról.

  2. Válaszd ki az operációs rendszert: Az imagerben válaszd a "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu" menüpontot.

    • 64-bites modellekhez (Pi 3, 4, 5, Zero 2 W) válaszd a "Ubuntu Server 22.04.1 LTS (64-bit)" verziót.
    • Régebbi 32-bites modellekhez (Pi 2, Pi Zero, Pi Zero W) válaszd a "Ubuntu Server 22.04.1 LTS (32-bit)" verziót.
  3. Válaszd ki a tárolót: Válaszd ki a microSD kártyádat.

Warning

Ez törölni fogja a microSD kártyád tartalmát. Győződj meg róla, hogy minden fontos adatot lementettél.

  1. Haladó beállítások a barátod: Kattints a fogaskerék ikonra (⚙️), hogy beállítsd a Pi-t headless módra (monitor és billentyűzet nélkül).
    • Hostname: Adj nevet a Pi-dnek (pl. pi-server).
    • SSH: Engedélyezd, és állíts be felhasználónevet és jelszót.
    • Wi-Fi: Ha nem Ethernetet használsz, add meg a Wi-Fi adataidat.
    • Locale: Állítsd be az időzónát és a billentyűzetkiosztást.
  2. Írj! Kattints a "WRITE" gombra, és hagyd, hogy az imager elvégezze a dolgát.

Indítás és csatlakozás

Miután az imager befejezte, helyezd be a microSD kártyát a Pi-be, és csatlakoztasd. Adj neki néhány percet az indításhoz. Háttérben némi kezdeti beállítást végez. Keresd meg az IP-címét a router admin oldalán, majd csatlakozz SSH-n keresztül:

ssh your_username@your_pi_ip_address

Bent vagy! A Raspberry Pi most már készen áll a konfigurálásra.

2. rész: Biztonságos FTP szerver beállítása

Ezután állítsd be a vsftpd-t (Very Secure FTP Daemon), maximális biztonságra konfigurálva.

Telepítés és konfiguráció

  1. Telepítsd a vsftpd-t:

    sudo apt update
    sudo apt install vsftpd -y
    
  2. Készíts biztonsági másolatot a konfigurációs fájlról:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. Szerkeszd a konfigurációt:

    sudo nano /etc/vsftpd.conf
    

Tip

Ha egy sor ki van kommentelve (a # jellel kezdődik), távolítsd el a #-t a sor elejéről.

Végezd el ezeket a módosításokat:

Beállítás Érték Cél
anonymous_enable NO Anonim FTP hozzáférés letiltása
local_enable YES Helyi felhasználók bejelentkezésének engedélyezése
write_enable YES Fájl feltöltések engedélyezése
local_umask 022 Fájl jogosultságok beállítása (644 fájloknak, 755 könyvtáraknak)
chroot_local_user YES Felhasználók korlátozása a saját home könyvtárukra
allow_writeable_chroot YES Feltöltések engedélyezése a chroot jail-ben
  1. Passzív port tartomány hozzáadása: Add hozzá ezeket a sorokat a fájl végéhez. Ez szükséges a tűzfalhoz.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. Naplózás engedélyezése: Add hozzá ezeket a sorokat a Fail2ban naplózásának engedélyezéséhez.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. Mentés és újraindítás: Nyomd meg a Ctrl+O, Enter, Ctrl+X billentyűket, majd indítsd újra a szolgáltatást:

    sudo systemctl restart vsftpd
    

FTP felhasználó létrehozása

Hozz létre egy dedikált, korlátozott felhasználót az FTP hozzáféréshez.

  1. Felhasználó létrehozása:

    sudo adduser ftpuser
    

    Kövesd az utasításokat a jelszó beállításához. A többi mezőt (név, telefon, stb.) hagyhatod üresen.

  2. Könyvtárstruktúra létrehozása:

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - Fő FTP könyvtár
    • /home/ftpuser/ftp/uploads - Ide kerülnek a feltöltött fájlok
  3. Jogosultságok beállítása:

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

3. rész: Tűzfal és brute-force védelem

Biztosítsd a Pi-t UFW-vel (Egyszerűsített tűzfal) és Fail2ban-nel.

UFW beállítása

  1. Telepítsd az UFW-t:

    sudo apt install ufw -y
    
  2. Állítsd be az alapértelmezett szabályokat:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. Engedélyezd az SSH-t (kritikus!):

    sudo ufw allow ssh comment 'SSH access'
    

Warning

Mindig engedélyezd az SSH-t a tűzfal bekapcsolása előtt, különben kizárod magad!

  1. Engedélyezd az FTP portokat:

    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. Kapcsold be a tűzfalat:

    sudo ufw enable
    

Fail2ban beállítása

A Fail2ban automatikusan blokkolja az IP-címeket ismételt sikertelen bejelentkezési kísérletek után.

  1. Telepítsd a Fail2ban-t:

    sudo apt install fail2ban -y
    
  2. Hozz létre egy helyi konfigurációt:

    sudo nano /etc/fail2ban/jail.local
    
  3. Add hozzá ezeket a konfigurációkat:

    [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

Tedd futtathatóvá:

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

Hozz létre egy Systemd szolgáltatást

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

Add hozzá ezt a tartalmat:

[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

Engedélyezd és indítsd el a szolgáltatást:

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

Ellenőrizd az állapotot:

sudo systemctl status ftp-monitor.service

5. rész: E-mail beállítások régi eszközökhöz

Az olyan eszközök, mint a FOSSCAM kamerák gyakran nem támogatják a modern TLS verziókat. Két megoldás létezik:

Ha Forward Emailt használsz, ez a legegyszerűbb megoldás. A Forward Email dedikált régi TLS 1.0 portokat biztosít kifejezetten régebbi eszközök, például kamerák, nyomtatók, szkennerek és faxgépek számára.

Árazás

A Forward Email több csomagot kínál:

Csomag Ár Jellemzők
Ingyenes $0/hó Csak e-mail továbbítás (küldés nélkül)
Fokozott védelem $3/hó SMTP hozzáférés + régi TLS 1.0 portok
Csapat $9/hó Fokozott + csapat funkciók
Vállalati $250/hó Csapat + korlátlan API kérések

Important

Az Fokozott védelem csomag ($3/hó) vagy magasabb szükséges az SMTP hozzáféréshez és a régi TLS 1.0 port támogatásához.

További információk: Forward Email Árazás.

Jelszó generálása

A készülék konfigurálása előtt generálj jelszót a Forward Emailben:

  1. Jelentkezz be a Forward Email oldalra
  2. Navigálj a Saját fiók → Domain-ek → [A te domain-ed] → Álnév menüpontra
  3. Hozz létre vagy válassz ki egy álnevet (pl. camera@yourdomain.com)
  4. Kattints az "Jelszó generálása" gombra az álnév mellett
  5. Másold ki a generált jelszót – ezt fogod használni az SMTP hitelesítéshez

Tip

Minden álnévhez külön jelszó rendelhető. Ez hasznos, hogy nyomon tudd követni, melyik eszköz melyik e-mailt küldte.

A készülék konfigurálása

Használd ezeket a beállításokat a kamerádban, nyomtatódban, szkenneredben vagy más régi eszközödben:

Beállítás Érték
SMTP szerver smtp.forwardemail.net
Port (SSL/TLS) 2455
Port (STARTTLS) 2555 (alternatív)
Felhasználónév Az álneved e-mail címe (pl. camera@yourdomain.com)
Jelszó A "Jelszó generálása" által létrehozott jelszó
Hitelesítés Kötelező
Titkosítás SSL/TLS (ajánlott) vagy STARTTLS

Warning

Ezek a portok az elavult TLS 1.0 protokollt használják, amely ismert biztonsági sebezhetőségekkel rendelkezik (BEAST, POODLE). Csak akkor használd, ha az eszközöd nem támogatja a modern TLS 1.2+-t.

Egyszerűen konfiguráld az eszközöd ezekkel a beállításokkal, és az e-maileket közvetlenül a Forward Emailen keresztül küldi majd, helyi relay szerver nélkül.

További részletekért lásd a Forward Email GYIK a régi TLS támogatásról.

2. lehetőség: Postfix SMTP relay beállítása

Ha nem használod a Forward Emailt, vagy helyi relay megoldást szeretnél, állítsd be a Postfixet a Raspberry Pi-n, hogy közvetítőként működjön. Ez bármely e-mail szolgáltatóval működik (Gmail, Outlook, Yahoo, AOL stb.).

Postfix telepítése

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

Telepítés közben:

  • Válassza a "Internet Site" lehetőséget
  • Adja meg a Pi hosztnevét (pl. raspberrypi-ftp) a "System mail name" mezőbe

Válassza ki az e-mail szolgáltatóját

Szolgáltató SMTP szerver Port Szükséges alkalmazásjelszó?
Gmail smtp.gmail.com 587 Igen
Outlook smtp-mail.outlook.com 587 Igen
Yahoo smtp.mail.yahoo.com 465 Igen
AOL smtp.aol.com 587 Igen

Szerezzen alkalmazás-specifikus jelszót

A legtöbb szolgáltató alkalmazásjelszót kér harmadik féltől származó alkalmazásokhoz. Generáljon egyet az e-mail szolgáltatója biztonsági beállításaiban:

Important

Soha ne használja a szokásos e-mail jelszavát. Mindig alkalmazás-specifikus jelszót használjon.

SASL hitelesítés beállítása

Hozza létre a jelszófájlt a választott szolgáltatóhoz. Ez a példa a Yahoo-t használja:

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

Adja hozzá ezt a sort (állítsa be a szervert és portot a szolgáltatója szerint):

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

Gmail esetén használja:

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

Biztosítsa és titkosítsa a fájlt:

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

E-mail cím leképezés beállítása

Írja át a helyi e-mail címeket, hogy megfeleljenek az e-mail szolgáltatójának:

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

Adja hozzá ezt a sort (cserélje le a HOSTNAME-et a Pi hosztnevére, és használja a saját e-mail címét):

/.+@HOSTNAME/    your_email@provider.com

Példa:

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

Biztosítsa a fájlt:

sudo chmod 600 /etc/postfix/map/regex_map

Postfix fő beállításainak konfigurálása

Szerkessze a fő konfigurációt:

sudo nano /etc/postfix/main.cf

Keresse meg és frissítse a relay hostot (vagy adja hozzá a végén):

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

Adja hozzá ezeket a beállításokat a fájl végéhez:

# SMTP Relay konfiguráció
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

# Hálózati beállítások
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24

Tip

Gmail esetén (587-es port) állítsa a smtp_tls_wrappermode = no értékre a yes helyett.

Warning

Frissítse a mynetworks értékét a tényleges hálózati tartományával. Csak megbízható hálózatokat adjon hozzá – ezekről a hálózatokról bármely eszköz hitelesítés nélkül képes levelet továbbítani.

Gyakori hálózati tartományok:

Hálózati tartomány IP cím tartomány
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

Tűzfal frissítése és újraindítás

sudo ufw allow 25/tcp comment 'SMTP for local devices'
sudo systemctl restart postfix

Ellenőrizze, hogy a Postfix fut-e:

sudo systemctl status postfix

Tesztelje a relay-t

Küldjön teszt e-mailt:

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

Ellenőrizze a naplókat:

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

Keresse a status=sent bejegyzést a siker megerősítéséhez.

Eszköz konfigurálása

A kamerája vagy eszköze beállításaiban:

  • SMTP szerver: A Pi IP-címe (pl. 192.168.1.100)
  • SMTP port: 25
  • Hitelesítés: Nincs
  • Titkosítás: Nincs (csak helyi hálózat)

Hibakeresés

Ha problémák merülnek fel, ellenőrizze ezeket a naplófájlokat:

FTP szerver:

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

Fail2ban:

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

Fájlfigyelő:

sudo journalctl -u ftp-monitor.service -f

Postfix levél:

sudo tail -f /var/log/mail.log
mailq  # Levél sor megtekintése

Befejezés

A Raspberry Pi most már egy teljesen automatizált rendszer biztonságos fájlfeltöltéssel, automatikus e-mail értesítésekkel mellékletekkel, és SMTP átjátszó képességekkel régebbi eszközök számára. Akár a Forward Email régi TLS portjait, akár egy helyi Postfix átjátszót használ, a régebbi eszközök most már megbízhatóan küldhetnek e-maileket modern e-mail szolgáltatókon keresztül.