Ubah Raspberry Pi Anda Menjadi Server FTP Aman dengan Relay Email

Punya Raspberry Pi yang tidak terpakai? Baik itu Pi 5 terbaru, Pi 4, Pi Zero, atau bahkan model lama, panduan ini akan menunjukkan cara mengubahnya menjadi server file yang kuat dan otomatis dengan kemampuan relay email. Sempurna untuk kamera keamanan, perangkat IoT, dan lainnya.

Kompatibel dengan: 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, dan Raspberry Pi Zero.

Note

Panduan ini telah diuji dan diverifikasi pada Raspberry Pi 3 Model B yang menjalankan Ubuntu Server 22.04 LTS.

Apa yang Akan Kita Bangun

Panduan ini akan memandu Anda menyiapkan sistem lengkap yang mencakup:

  • Ubuntu Server 22.04 LTS: OS ringan dan stabil untuk Pi.
  • Server FTP Aman (vsftpd): Untuk mengunggah file dengan aman.
  • Firewall (UFW) & Fail2ban: Untuk menjaga agar pihak tidak diinginkan tidak masuk.
  • Pemroses File Otomatis: Skrip yang mengambil file baru, mengirimkannya lewat email sebagai lampiran, lalu membersihkan dirinya sendiri.
  • Opsi Email untuk Perangkat Legacy: Dua pendekatan untuk perangkat yang tidak mendukung TLS modern:
    • Gunakan port TLS 1.0 legacy Forward Email (paling mudah)
    • Siapkan relay SMTP Postfix (bekerja dengan penyedia email apa pun)

Siap? Mari mulai.

Bagian 1: Mendapatkan Ubuntu Server di Pi Anda

Hal pertama yang harus dilakukan adalah menjalankan Ubuntu Server di Raspberry Pi. Ini sangat mudah berkat Raspberry Pi Imager.

Apa yang Anda Butuhkan

  • Raspberry Pi yang kompatibel (lihat daftar di atas)
  • Kartu microSD (minimal 8GB, disarankan 16GB ke atas)
  • Komputer dengan pembaca kartu microSD
  • Catu daya yang sesuai untuk model Pi Anda
  • Akses internet (Ethernet atau Wi-Fi)

Note

Model lama seperti Raspberry Pi 2 atau Pi Zero mungkin lebih lambat tapi tetap bisa digunakan untuk pengaturan ini.

Mem-flash OS

  1. Dapatkan Raspberry Pi Imager: Unduh dari situs resmi.

  2. Pilih OS: Di imager, pilih "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".

    • Untuk model 64-bit (Pi 3, 4, 5, Zero 2 W), pilih "Ubuntu Server 22.04.1 LTS (64-bit)".
    • Untuk model 32-bit lama (Pi 2, Pi Zero, Pi Zero W), pilih "Ubuntu Server 22.04.1 LTS (32-bit)".
  3. Pilih Penyimpanan: Pilih kartu microSD Anda.

Warning

Ini akan menghapus seluruh isi kartu microSD Anda. Pastikan Anda sudah membackup data penting.

  1. Opsi Lanjutan adalah Teman Anda: Klik ikon roda gigi (⚙️) untuk mengatur Pi dalam mode headless (tanpa monitor atau keyboard).
    • Hostname: Beri nama Pi Anda (misal, pi-server).
    • SSH: Aktifkan dan atur nama pengguna serta kata sandi.
    • Wi-Fi: Jika tidak menggunakan Ethernet, masukkan detail Wi-Fi Anda.
    • Locale: Atur zona waktu dan tata letak keyboard.
  2. Tulis! Klik tombol "WRITE" dan biarkan imager melakukan tugasnya.

Booting Up & Connecting

Setelah imager selesai, masukkan kartu microSD ke dalam Pi dan colokkan. Beri beberapa menit untuk booting. Sistem sedang melakukan beberapa pengaturan awal di latar belakang. Temukan alamat IP-nya dari halaman admin router Anda, lalu sambungkan melalui SSH:

ssh your_username@your_pi_ip_address

Anda sudah masuk! Raspberry Pi sekarang siap untuk dikonfigurasi.

Bagian 2: Menyiapkan Server FTP yang Aman

Selanjutnya, siapkan vsftpd (Very Secure FTP Daemon), yang dikonfigurasi untuk keamanan maksimal.

Instalasi & Konfigurasi

  1. Pasang vsftpd:

    sudo apt update
    sudo apt install vsftpd -y
    
  2. Cadangkan file konfigurasi:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. Edit konfigurasi:

    sudo nano /etc/vsftpd.conf
    

Tip

Jika sebuah baris dikomentari (dimulai dengan #), hapus tanda # untuk mengaktifkannya.

Lakukan perubahan berikut:

Pengaturan Nilai Tujuan
anonymous_enable NO Nonaktifkan akses FTP anonim
local_enable YES Izinkan pengguna lokal untuk masuk
write_enable YES Aktifkan unggahan file
local_umask 022 Atur izin file (644 untuk file, 755 untuk direktori)
chroot_local_user YES Batasi pengguna ke direktori home mereka
allow_writeable_chroot YES Izinkan unggahan di jail chroot
  1. Tambahkan Rentang Port Pasif: Tambahkan baris berikut di akhir file. Ini diperlukan untuk firewall.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. Aktifkan Logging: Tambahkan baris berikut untuk mengaktifkan logging bagi Fail2ban.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. Simpan dan Mulai Ulang: Tekan Ctrl+O, Enter, Ctrl+X, lalu mulai ulang layanan:

    sudo systemctl restart vsftpd
    

Membuat Pengguna FTP

Buat pengguna khusus yang dibatasi untuk akses FTP.

  1. Buat pengguna:

    sudo adduser ftpuser
    

    Ikuti petunjuk untuk mengatur kata sandi. Kolom lain (nama, telepon, dll.) bisa dikosongkan.

  2. Buat struktur direktori:

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - Direktori utama FTP
    • /home/ftpuser/ftp/uploads - Tempat file akan diunggah
  3. Atur izin:

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

Bagian 3: Firewall dan Perlindungan Brute-Force

Amankan Pi dengan UFW (Uncomplicated Firewall) dan Fail2ban.

Menyiapkan UFW

  1. Pasang UFW:

    sudo apt install ufw -y
    
  2. Atur kebijakan default:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. Izinkan SSH (penting!):

    sudo ufw allow ssh comment 'SSH access'
    

Warning

Selalu izinkan SSH sebelum mengaktifkan firewall, atau Anda akan terkunci dari akses!

  1. Izinkan port 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'
    
  2. Aktifkan firewall:

    sudo ufw enable
    

Menyiapkan Fail2ban

Fail2ban secara otomatis memblokir alamat IP setelah beberapa kali percobaan login gagal.

  1. Pasang Fail2ban:

    sudo apt install fail2ban -y
    
  2. Buat konfigurasi lokal:

    sudo nano /etc/fail2ban/jail.local
    
  3. Tambahkan konfigurasi berikut:

    [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

Jadikan dapat dieksekusi:

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

Buat Layanan Systemd

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

Tambahkan konten ini:

[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

Aktifkan dan mulai layanan:

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

Periksa status:

sudo systemctl status ftp-monitor.service

Bagian 5: Opsi Email untuk Perangkat Legacy

Perangkat seperti kamera FOSSCAM sering kali tidak mendukung versi TLS modern. Ada dua solusi:

Jika Anda menggunakan Forward Email, ini adalah solusi termudah. Forward Email menyediakan port TLS 1.0 legacy khusus untuk perangkat lama seperti kamera, printer, pemindai, dan mesin faks.

Harga

Forward Email menawarkan beberapa paket:

Paket Harga Fitur
Gratis $0/bulan Penerusan email saja (tanpa pengiriman)
Perlindungan Ditingkatkan $3/bulan Akses SMTP + port TLS 1.0 legacy
Tim $9/bulan Perlindungan Ditingkatkan + fitur tim
Perusahaan $250/bulan Tim + permintaan API tanpa batas

Important

Paket Perlindungan Ditingkatkan ($3/bulan) atau lebih tinggi diperlukan untuk akses SMTP dan dukungan port TLS 1.0 legacy.

Pelajari lebih lanjut di Forward Email Pricing.

Buat Kata Sandi Anda

Sebelum mengonfigurasi perangkat Anda, buat kata sandi di Forward Email:

  1. Masuk ke Forward Email
  2. Navigasi ke Akun Saya → Domain → [Domain Anda] → Alias
  3. Buat atau pilih alias (misalnya, camera@yourdomain.com)
  4. Klik "Generate Password" di samping alias
  5. Salin kata sandi yang dibuat - Anda akan menggunakannya untuk otentikasi SMTP

Tip

Setiap alias dapat memiliki kata sandi sendiri. Ini berguna untuk melacak perangkat mana yang mengirim email.

Konfigurasikan Perangkat Anda

Gunakan pengaturan ini di kamera, printer, pemindai, atau perangkat legacy lainnya:

Pengaturan Nilai
Server SMTP smtp.forwardemail.net
Port (SSL/TLS) 2455
Port (STARTTLS) 2555 (alternatif)
Nama Pengguna Email alias Anda (misalnya, camera@yourdomain.com)
Kata Sandi Kata sandi dari "Generate Password"
Otentikasi Diperlukan
Enkripsi SSL/TLS (direkomendasikan) atau STARTTLS

Warning

Port ini menggunakan protokol TLS 1.0 yang sudah usang dan memiliki kerentanan keamanan yang diketahui (BEAST, POODLE). Gunakan hanya jika perangkat Anda tidak mendukung TLS 1.2+ modern.

Cukup konfigurasikan perangkat Anda dengan pengaturan ini dan perangkat akan mengirim email langsung melalui Forward Email tanpa perlu server relay lokal.

Untuk detail lebih lanjut, lihat FAQ Forward Email tentang Dukungan TLS Legacy.

Opsi 2: Atur Relay SMTP Postfix

Jika Anda tidak menggunakan Forward Email, atau lebih memilih solusi relay lokal, atur Postfix di Raspberry Pi untuk bertindak sebagai perantara. Ini bekerja dengan penyedia email apa pun (Gmail, Outlook, Yahoo, AOL, dll.).

Instal Postfix

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

Selama instalasi:

  • Pilih "Internet Site"
  • Masukkan hostname Pi Anda (misalnya, raspberrypi-ftp) untuk "System mail name"

Pilih Penyedia Email Anda

Penyedia Server SMTP Port Perlu Password Aplikasi?
Gmail smtp.gmail.com 587 Ya
Outlook smtp-mail.outlook.com 587 Ya
Yahoo smtp.mail.yahoo.com 465 Ya
AOL smtp.aol.com 587 Ya

Dapatkan Password Khusus Aplikasi

Sebagian besar penyedia memerlukan password aplikasi untuk aplikasi pihak ketiga. Buat satu dari pengaturan keamanan penyedia email Anda:

Important

Jangan pernah menggunakan password email biasa Anda. Selalu gunakan password khusus aplikasi.

Konfigurasikan Otentikasi SASL

Buat file password untuk penyedia yang Anda pilih. Contoh ini menggunakan Yahoo:

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

Tambahkan baris ini (sesuaikan server dan port untuk penyedia Anda):

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

Untuk Gmail, gunakan:

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

Amankan dan hash file tersebut:

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

Konfigurasikan Pemetaan Alamat Email

Tulis ulang alamat email lokal agar sesuai dengan penyedia email Anda:

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

Tambahkan baris ini (ganti HOSTNAME dengan hostname Pi Anda dan gunakan email Anda):

/.+@HOSTNAME/    your_email@provider.com

Contoh:

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

Amankan file tersebut:

sudo chmod 600 /etc/postfix/map/regex_map

Konfigurasikan Pengaturan Utama Postfix

Edit konfigurasi utama:

sudo nano /etc/postfix/main.cf

Cari dan perbarui relay host (atau tambahkan di akhir):

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

Tambahkan pengaturan ini di akhir file:

# Konfigurasi 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

# Pengaturan jaringan
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24

Tip

Untuk Gmail (port 587), atur smtp_tls_wrappermode = no bukan yes.

Warning

Perbarui mynetworks dengan rentang jaringan Anda yang sebenarnya. Hanya tambahkan jaringan yang dipercaya - perangkat apa pun di jaringan ini dapat mengirim email tanpa otentikasi.

Rentang jaringan umum:

Rentang Jaringan Rentang Alamat 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

Perbarui Firewall dan Mulai Ulang

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

Verifikasi Postfix berjalan:

sudo systemctl status postfix

Uji Relay

Kirim email uji:

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

Periksa log:

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

Cari status=sent untuk memastikan keberhasilan.

Konfigurasikan Perangkat Anda

Di pengaturan kamera atau perangkat Anda:

  • Server SMTP: Alamat IP Pi Anda (misalnya, 192.168.1.100)
  • Port SMTP: 25
  • Autentikasi: Tidak ada
  • Enkripsi: Tidak ada (hanya jaringan lokal)

Pemecahan Masalah

Jika terjadi masalah, periksa file log berikut:

Server FTP:

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

Fail2ban:

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

Pemantau File:

sudo journalctl -u ftp-monitor.service -f

Postfix Mail:

sudo tail -f /var/log/mail.log
mailq  # Lihat antrean email

Menyelesaikan

Raspberry Pi sekarang menjadi sistem otomatis lengkap dengan unggahan file yang aman, notifikasi email otomatis dengan lampiran, dan kemampuan relay SMTP untuk perangkat lama. Baik menggunakan port TLS warisan Forward Email atau relay Postfix lokal, perangkat lama kini dapat mengirim email dengan andal melalui penyedia email modern.