Přeměňte svůj Raspberry Pi na zabezpečený FTP server s přeposíláním e-mailů

Máte Raspberry Pi, které jen sbírá prach? Ať už je to nejnovější Pi 5, Pi 4, Pi Zero nebo i starší model, tento průvodce vám ukáže, jak z něj udělat výkonný, automatizovaný souborový server s možností přeposílání e-mailů. Ideální pro bezpečnostní kamery, IoT zařízení a další.

Kompatibilní s: 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 a Raspberry Pi Zero.

Note

Tento průvodce byl testován a ověřen na Raspberry Pi 3 Model B s Ubuntu Server 22.04 LTS.

Co budujeme

Tento průvodce vás provede nastavením kompletního systému, který zahrnuje:

  • Ubuntu Server 22.04 LTS: Stabilní, lehký operační systém pro Pi.
  • Zabezpečený FTP server (vsftpd): Pro bezpečné ukládání souborů.
  • Firewall (UFW) a Fail2ban: Pro ochranu proti neoprávněnému přístupu.
  • Automatizovaný zpracovatel souborů: Skript, který zachytí nové soubory, odešle je jako přílohy e-mailem a poté je smaže.
  • E-mailové možnosti pro starší zařízení: Dva přístupy pro zařízení, která nepodporují moderní TLS:
    • Použití legacy TLS 1.0 portů Forward Email (nejjednodušší)
    • Nastavení Postfix SMTP relé (funguje s jakýmkoli poskytovatelem e-mailu)

Připraveni? Pojďme na to.

Část 1: Instalace Ubuntu Server na váš Pi

Nejdříve si na Raspberry Pi nainstalujte Ubuntu Server. Díky Raspberry Pi Imageru je to překvapivě snadné.

Co budete potřebovat

  • Jakýkoli kompatibilní Raspberry Pi (viz seznam výše)
  • microSD kartu (minimálně 8GB, doporučeno 16GB a více)
  • Počítač s čtečkou microSD karet
  • Vhodný napájecí zdroj pro váš model Pi
  • Připojení k internetu (Ethernet nebo Wi-Fi)

Note

Starší modely jako Raspberry Pi 2 nebo Pi Zero mohou být pomalejší, ale pro toto nastavení budou fungovat dobře.

Nahrání OS

  1. Získejte Raspberry Pi Imager: Stáhněte si ho z oficiálních stránek.

  2. Vyberte OS: V imageru zvolte "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".

    • Pro 64bitové modely (Pi 3, 4, 5, Zero 2 W) vyberte "Ubuntu Server 22.04.1 LTS (64-bit)".
    • Pro starší 32bitové modely (Pi 2, Pi Zero, Pi Zero W) vyberte "Ubuntu Server 22.04.1 LTS (32-bit)".
  3. Vyberte úložiště: Zvolte svou microSD kartu.

Warning

Tímto se microSD karta kompletně vymaže. Ujistěte se, že máte zálohované všechny důležité soubory.

  1. Pokročilé možnosti jsou váš přítel: Klikněte na ikonu ozubeného kola (⚙️) pro nastavení Pi do headless režimu (bez monitoru a klávesnice).
    • Hostname: Pojmenujte svůj Pi (např. pi-server).
    • SSH: Povolit a nastavit uživatelské jméno a heslo.
    • Wi-Fi: Pokud nepoužíváte Ethernet, zadejte údaje k Wi-Fi.
    • Locale: Nastavte časové pásmo a rozložení klávesnice.
  2. Pište! Klikněte na tlačítko "WRITE" a nechte imager pracovat.

Spuštění a připojení

Jakmile imager dokončí, vložte microSD kartu do Pi a zapojte jej. Dejte mu pár minut na spuštění. Na pozadí probíhá počáteční nastavení. Najděte jeho IP adresu na stránce administrace vašeho routeru a připojte se přes SSH:

ssh your_username@your_pi_ip_address

Jste připojeni! Raspberry Pi je nyní připraveno k nastavení.

Část 2: Nastavení zabezpečeného FTP serveru

Dále nastavte vsftpd (Very Secure FTP Daemon), nakonfigurovaný pro maximální bezpečnost.

Instalace a konfigurace

  1. Nainstalujte vsftpd:

    sudo apt update
    sudo apt install vsftpd -y
    
  2. Zálohujte konfigurační soubor:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. Upravte konfiguraci:

    sudo nano /etc/vsftpd.conf
    

Tip

Pokud je řádek zakomentovaný (začíná #), odkomentujte jej odstraněním #.

Proveďte tyto změny:

Nastavení Hodnota Účel
anonymous_enable NO Zakázat anonymní přístup k FTP
local_enable YES Povolit přihlášení místních uživatelů
write_enable YES Povolit nahrávání souborů
local_umask 022 Nastavit oprávnění souborů (644 pro soubory, 755 pro složky)
chroot_local_user YES Uzamknout uživatele do jejich domovského adresáře
allow_writeable_chroot YES Povolit nahrávání v chroot jailu
  1. Přidejte rozsah pasivních portů: Přidejte tyto řádky na konec souboru. Je to potřeba pro firewall.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. Povolit logování: Přidejte tyto řádky pro povolení logování pro Fail2ban.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. Uložte a restartujte: Stiskněte Ctrl+O, Enter, Ctrl+X, poté restartujte službu:

    sudo systemctl restart vsftpd
    

Vytvoření FTP uživatele

Vytvořte dedikovaného, omezeného uživatele pro FTP přístup.

  1. Vytvořte uživatele:

    sudo adduser ftpuser
    

    Postupujte podle pokynů pro nastavení hesla. Ostatní pole (jméno, telefon atd.) můžete nechat prázdná.

  2. Vytvořte adresářovou strukturu:

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - Hlavní FTP adresář
    • /home/ftpuser/ftp/uploads - Kam budou nahrávány soubory
  3. Nastavte oprávnění:

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

Část 3: Firewall a ochrana proti hrubé síle

Zabezpečte Pi pomocí UFW (Uncomplicated Firewall) a Fail2ban.

Nastavení UFW

  1. Nainstalujte UFW:

    sudo apt install ufw -y
    
  2. Nastavte výchozí pravidla:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. Povolte SSH (kritické!):

    sudo ufw allow ssh comment 'SSH access'
    

Warning

Vždy povolte SSH před zapnutím firewallu, jinak se zablokujete!

  1. Povolte FTP porty:

    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. Zapněte firewall:

    sudo ufw enable
    

Nastavení Fail2ban

Fail2ban automaticky blokuje IP adresy po opakovaných neúspěšných pokusech o přihlášení.

  1. Nainstalujte Fail2ban:

    sudo apt install fail2ban -y
    
  2. Vytvořte lokální konfiguraci:

    sudo nano /etc/fail2ban/jail.local
    
  3. Přidejte tyto konfigurace:

    [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

Make it executable:

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

Vytvoření služby Systemd

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

Přidejte tento obsah:

[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

Povolte a spusťte službu:

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

Zkontrolujte stav:

sudo systemctl status ftp-monitor.service

Část 5: E-mailové možnosti pro starší zařízení

Zařízení jako kamery FOSSCAM často nepodporují moderní verze TLS. Existují dvě řešení:

Pokud používáte Forward Email, je to nejjednodušší řešení. Forward Email poskytuje speciální legacy TLS 1.0 porty určené právě pro starší zařízení jako kamery, tiskárny, skenery a faxy.

Ceník

Forward Email nabízí několik plánů:

Plán Cena Funkce
Zdarma 0 $/měsíc Pouze přeposílání e-mailů (bez odesílání)
Enhanced Protection 3 $/měsíc Přístup k SMTP + legacy TLS 1.0 porty
Team 9 $/měsíc Enhanced + týmové funkce
Enterprise 250 $/měsíc Team + neomezené API požadavky

Important

Pro přístup k SMTP a podporu legacy TLS 1.0 portů je vyžadován plán Enhanced Protection (3 $/měsíc) nebo vyšší.

Více informací na Forward Email Pricing.

Vygenerujte si heslo

Před konfigurací zařízení si v Forward Email vygenerujte heslo:

  1. Přihlaste se na Forward Email
  2. Přejděte do Můj účet → Domény → [Vaše doména] → Alias
  3. Vytvořte nebo vyberte alias (např. camera@yourdomain.com)
  4. Klikněte na "Generate Password" vedle aliasu
  5. Zkopírujte vygenerované heslo – použijete ho pro SMTP autentizaci

Tip

Každý alias může mít své vlastní heslo. To je užitečné pro sledování, které zařízení odeslalo který e-mail.

Nakonfigurujte své zařízení

Použijte tato nastavení ve své kameře, tiskárně, skeneru nebo jiném starším zařízení:

Nastavení Hodnota
SMTP server smtp.forwardemail.net
Port (SSL/TLS) 2455
Port (STARTTLS) 2555 (alternativa)
Uživatelské jméno Váš alias e-mail (např. camera@yourdomain.com)
Heslo Heslo z "Generate Password"
Autentizace Povinná
Šifrování SSL/TLS (doporučeno) nebo STARTTLS

Warning

Tyto porty používají zastaralý protokol TLS 1.0, který má známé bezpečnostní zranitelnosti (BEAST, POODLE). Používejte pouze pokud vaše zařízení nepodporuje moderní TLS 1.2+.

Jednoduše nakonfigurujte zařízení s těmito nastaveními a bude odesílat e-maily přímo přes Forward Email bez potřeby lokálního relé serveru.

Pro více informací viz Forward Email FAQ o podpoře legacy TLS.

Možnost 2: Nastavení Postfix SMTP relé

Pokud nepoužíváte Forward Email nebo preferujete lokální relé řešení, nastavte Postfix na Raspberry Pi jako prostředníka. Funguje s jakýmkoliv poskytovatelem e-mailu (Gmail, Outlook, Yahoo, AOL atd.).

Instalace Postfixu

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

Během instalace:

  • Vyberte "Internet Site"
  • Zadejte hostname vašeho Pi (např. raspberrypi-ftp) pro "System mail name"

Vyberte svého poskytovatele e-mailu

Poskytovatel SMTP server Port Vyžaduje heslo aplikace?
Gmail smtp.gmail.com 587 Ano
Outlook smtp-mail.outlook.com 587 Ano
Yahoo smtp.mail.yahoo.com 465 Ano
AOL smtp.aol.com 587 Ano

Získejte heslo specifické pro aplikaci

Většina poskytovatelů vyžaduje hesla aplikací pro aplikace třetích stran. Vygenerujte si ho v nastavení zabezpečení vašeho poskytovatele e-mailu:

Important

Nikdy nepoužívejte své běžné heslo k e-mailu. Vždy používejte heslo specifické pro aplikaci.

Nakonfigurujte SASL autentizaci

Vytvořte soubor s heslem pro vašeho vybraného poskytovatele. Tento příklad používá Yahoo:

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

Přidejte tento řádek (upravte server a port podle vašeho poskytovatele):

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

Pro Gmail použijte:

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

Zabezpečte a zahashujte soubor:

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

Nakonfigurujte mapování e-mailových adres

Přepište lokální e-mailové adresy tak, aby odpovídaly vašemu poskytovateli e-mailu:

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

Přidejte tento řádek (nahraďte HOSTNAME hostname vašeho Pi a použijte svůj e-mail):

/.+@HOSTNAME/    your_email@provider.com

Příklad:

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

Zabezpečte soubor:

sudo chmod 600 /etc/postfix/map/regex_map

Nakonfigurujte hlavní nastavení Postfixu

Upravte hlavní konfiguraci:

sudo nano /etc/postfix/main.cf

Najděte a aktualizujte relay hosta (nebo přidejte na konec):

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

Přidejte tato nastavení na konec souboru:

# 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

Pro Gmail (port 587) nastavte smtp_tls_wrappermode = no místo yes.

Warning

Aktualizujte mynetworks podle vaší skutečné síťové rozsahu. Přidávejte pouze důvěryhodné sítě – jakékoli zařízení v těchto sítích může odesílat poštu bez autentizace.

Běžné síťové rozsahy:

Síťový rozsah Rozsah IP adres
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

Aktualizujte firewall a restartujte

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

Ověřte, že Postfix běží:

sudo systemctl status postfix

Otestujte relay

Pošlete testovací e-mail:

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

Zkontrolujte logy:

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

Hledejte status=sent pro potvrzení úspěchu.

Nakonfigurujte své zařízení

V nastavení vaší kamery nebo zařízení:

  • SMTP Server: IP adresa vašeho Pi (např. 192.168.1.100)
  • SMTP Port: 25
  • Autentizace: Žádná
  • Šifrování: Žádné (pouze lokální síť)

Řešení problémů

Pokud nastanou problémy, zkontrolujte tyto logovací soubory:

FTP Server:

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

Fail2ban:

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

Monitor souborů:

sudo journalctl -u ftp-monitor.service -f

Postfix Mail:

sudo tail -f /var/log/mail.log
mailq  # Zobrazit frontu pošty

Závěr

Raspberry Pi je nyní kompletní automatizovaný systém s bezpečnými nahráváními souborů, automatickými emailovými upozorněními s přílohami a schopnostmi SMTP relé pro starší zařízení. Ať už používáte legacy TLS porty Forward Email nebo lokální Postfix relé, starší zařízení nyní mohou spolehlivě odesílat emaily přes moderní poskytovatele emailů.