הפוך את ה-Raspberry Pi שלך לשרת FTP מאובטח עם העברת אימייל

יש לך Raspberry Pi שמאגר אבק? בין אם זה ה-Pi 5 האחרון, Pi 4, Pi Zero, או אפילו דגם ישן יותר, המדריך הזה יראה לך איך להפוך אותו לשרת קבצים חזק ואוטומטי עם יכולות העברת אימייל. מושלם למצלמות אבטחה, מכשירי IoT, ועוד.

תואם עם: 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, ו-Raspberry Pi Zero.

Note

מדריך זה נבדק ואומת על Raspberry Pi 3 Model B עם Ubuntu Server 22.04 LTS.

מה אנחנו בונים

המדריך הזה ילווה אותך בהקמת מערכת מלאה שכוללת:

  • Ubuntu Server 22.04 LTS: מערכת הפעלה יציבה וקלה ל-Pi.
  • שרת FTP מאובטח (vsftpd): להורדת קבצים בצורה מאובטחת.
  • חומת אש (UFW) ו-Fail2ban: כדי לשמור על הפורצים בחוץ.
  • מעבד קבצים אוטומטי: סקריפט שתופס קבצים חדשים, שולח אותם באימייל כקבצים מצורפים, ואז מנקה אחריו.
  • אפשרויות אימייל למכשירים ישנים: שתי גישות למכשירים שלא תומכים ב-TLS מודרני:
    • שימוש ביציאות TLS 1.0 הישנות של Forward Email (הכי פשוט)
    • הקמת שרת SMTP Relay עם Postfix (עובד עם כל ספק אימייל)

מוכנים? בואו נתחיל.

חלק 1: התקנת Ubuntu Server על ה-Pi שלך

קודם כל, התקן את Ubuntu Server על ה-Raspberry Pi. זה קל להפתיע בזכות Raspberry Pi Imager.

מה תצטרך

  • כל Raspberry Pi תואם (ראה רשימה למעלה)
  • כרטיס microSD (מינימום 8GB, מומלץ 16GB ומעלה)
  • מחשב עם קורא כרטיסי microSD
  • ספק כוח מתאים לדגם ה-Pi שלך
  • חיבור אינטרנט (Ethernet או Wi-Fi)

Note

דגמים ישנים כמו Raspberry Pi 2 או Pi Zero עשויים להיות איטיים יותר אך יעבדו טוב עם ההתקנה הזו.

התקנת מערכת ההפעלה

  1. הורד את Raspberry Pi Imager: הורד אותו מה-אתר הרשמי.

  2. בחר את מערכת ההפעלה: באימגר, בחר "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".

    • לדגמים 64 ביט (Pi 3, 4, 5, Zero 2 W), בחר "Ubuntu Server 22.04.1 LTS (64-bit)".
    • לדגמים ישנים 32 ביט (Pi 2, Pi Zero, Pi Zero W), בחר "Ubuntu Server 22.04.1 LTS (32-bit)".
  3. בחר את האחסון שלך: בחר את כרטיס ה-microSD שלך.

Warning

פעולה זו תמחק את כל תוכן כרטיס ה-microSD. ודא שגיבית כל דבר חשוב.

  1. אפשרויות מתקדמות הן החברים שלך: לחץ על סמל הגלגל שיניים (⚙️) כדי להגדיר את ה-Pi במצב ללא ראש (headless) – ללא צורך במוניטור או מקלדת.
    • Hostname: תן ל-Pi שלך שם (למשל, pi-server).
    • SSH: הפעל אותו והגדר שם משתמש וסיסמה.
    • Wi-Fi: אם אינך משתמש ב-Ethernet, הזן את פרטי ה-Wi-Fi שלך.
    • Locale: הגדר את אזור הזמן ופריסת המקלדת שלך.
  2. כתוב! לחץ על כפתור "WRITE" ותן למכשיר התמונה לעשות את שלו.

אתחול וחיבור

כאשר המכשיר סיים, הכנס את כרטיס ה-microSD ל-Pi וחבר אותו לחשמל. המתן כמה דקות לאתחול. הוא מבצע הגדרות ראשוניות ברקע. מצא את כתובת ה-IP שלו בדף הניהול של הנתב שלך, ואז התחבר דרך SSH:

ssh your_username@your_pi_ip_address

אתה בפנים! ה-Raspberry Pi מוכן כעת להגדרה.

חלק 2: הקמת שרת FTP מאובטח

לאחר מכן, התקן את vsftpd (Very Secure FTP Daemon), מוגדר לביטחון מקסימלי.

התקנה והגדרה

  1. התקן את vsftpd:

    sudo apt update
    sudo apt install vsftpd -y
    
  2. גבה את קובץ ההגדרות:

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
    
  3. ערוך את ההגדרות:

    sudo nano /etc/vsftpd.conf
    

Tip

אם שורה מנותבת (מתחילה ב-#), הסר את ה-# כדי לבטל את ההערה.

בצע את השינויים הבאים:

הגדרה ערך מטרה
anonymous_enable NO השבתת גישה אנונימית ל-FTP
local_enable YES אפשר למשתמשים מקומיים להתחבר
write_enable YES אפשר העלאת קבצים
local_umask 022 הגדרת הרשאות קבצים (644 לקבצים, 755 לתיקיות)
chroot_local_user YES כליאת משתמשים לתיקיית הבית שלהם
allow_writeable_chroot YES אפשר העלאות בתוך כליאת ה-chroot
  1. הוסף טווח פורטים פסיביים: הוסף את השורות הבאות בסוף הקובץ. זה נדרש לחומת האש.

    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  2. הפעלת רישום: הוסף את השורות הבאות כדי להפעיל רישום עבור Fail2ban.

    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    log_ftp_protocol=YES
    
  3. שמור והפעל מחדש: לחץ Ctrl+O, Enter, Ctrl+X, ואז הפעל מחדש את השירות:

    sudo systemctl restart vsftpd
    

יצירת משתמש FTP

צור משתמש ייעודי ומוגבל לגישה ל-FTP.

  1. צור את המשתמש:

    sudo adduser ftpuser
    

    עקוב אחר ההנחיות כדי להגדיר סיסמה. שדות אחרים (שם, טלפון וכו') ניתן להשאיר ריקים.

  2. צור את מבנה התיקיות:

    sudo mkdir -p /home/ftpuser/ftp/uploads
    
    • /home/ftpuser/ftp - תיקיית ה-FTP הראשית
    • /home/ftpuser/ftp/uploads - המקום שבו יועלו הקבצים
  3. הגדר הרשאות:

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

חלק 3: חומת אש והגנה מפני התקפות כוח גס

אבטח את ה-Pi עם UFW (חומת אש פשוטה) ו-Fail2ban.

הגדרת UFW

  1. התקן את UFW:

    sudo apt install ufw -y
    
  2. הגדר מדיניות ברירת מחדל:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
  3. אפשר SSH (קריטי!):

    sudo ufw allow ssh comment 'SSH access'
    

Warning

תמיד אפשר SSH לפני הפעלת חומת האש, אחרת תינעל מחוץ למערכת!

  1. אפשר פורטי 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. הפעל את חומת האש:

    sudo ufw enable
    

הגדרת Fail2ban

Fail2ban חוסם אוטומטית כתובות IP לאחר ניסיונות כניסה כושלים חוזרים.

  1. התקן את Fail2ban:

    sudo apt install fail2ban -y
    
  2. צור קובץ הגדרות מקומי:

    sudo nano /etc/fail2ban/jail.local
    
  3. הוסף את ההגדרות הבאות:

    [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

הפוך את זה לביצועי:

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

צור שירות Systemd

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

הוסף את התוכן הבא:

[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

הפעל והפעל את השירות:

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

בדוק את הסטטוס:

sudo systemctl status ftp-monitor.service

חלק 5: אפשרויות דוא"ל למכשירים ישנים

מכשירים כמו מצלמות FOSSCAM לעיתים לא תומכים בגרסאות TLS מודרניות. יש שתי פתרונות:

אם אתה משתמש ב-Forward Email, זו הפתרון הקל ביותר. Forward Email מספק יציאות TLS 1.0 ישנות ייעודיות במיוחד למכשירים ישנים כמו מצלמות, מדפסות, סורקים ומכונות פקס.

תמחור

Forward Email מציע מספר תוכניות:

תוכנית מחיר תכונות
חינם $0/חודש העברת דוא"ל בלבד (ללא שליחה)
הגנה משופרת $3/חודש גישה ל-SMTP + יציאות TLS 1.0 ישנות
צוות $9/חודש הגנה משופרת + תכונות צוות
ארגוני $250/חודש צוות + בקשות API בלתי מוגבלות

Important

נדרשת תוכנית הגנה משופרת ($3/חודש) או גבוהה יותר לגישה ל-SMTP ותמיכה ביציאות TLS 1.0 ישנות.

למידע נוסף ב-תמחור Forward Email.

צור את הסיסמה שלך

לפני הגדרת המכשיר שלך, צור סיסמה ב-Forward Email:

  1. התחבר ל-Forward Email
  2. עבור אל החשבון שלי → דומיינים → [הדומיין שלך] → כינויים
  3. צור או בחר כינוי (למשל, camera@yourdomain.com)
  4. לחץ על "צור סיסמה" ליד הכינוי
  5. העתק את הסיסמה שנוצרה - תשתמש בה לאימות SMTP

Tip

לכל כינוי יכולה להיות סיסמה משלו. זה שימושי למעקב איזה מכשיר שלח איזה דוא"ל.

הגדר את המכשיר שלך

השתמש בהגדרות אלו במצלמה, מדפסת, סורק או מכשיר ישן אחר:

הגדרה ערך
שרת SMTP smtp.forwardemail.net
יציאה (SSL/TLS) 2455
יציאה (STARTTLS) 2555 (אלטרנטיבי)
שם משתמש דוא"ל הכינוי שלך (למשל, camera@yourdomain.com)
סיסמה הסיסמה מ-"צור סיסמה"
אימות נדרש
הצפנה SSL/TLS (מומלץ) או STARTTLS

Warning

יציאות אלו משתמשות בפרוטוקול TLS 1.0 מיושן עם פגיעויות אבטחה ידועות (BEAST, POODLE). השתמש רק אם המכשיר שלך אינו תומך ב-TLS מודרני 1.2+.

פשוט הגדר את המכשיר עם ההגדרות הללו והוא ישלח דוא"ל ישירות דרך Forward Email ללא צורך בשרת ריליי מקומי.

למידע נוסף, ראה את שאלות נפוצות של Forward Email על תמיכה ב-TLS ישן.

אפשרות 2: הגדר ריליי SMTP עם Postfix

אם אינך משתמש ב-Forward Email, או מעדיף פתרון ריליי מקומי, הגדר את Postfix על ה-Raspberry Pi לפעול כמתווך. זה עובד עם כל ספק דוא"ל (Gmail, Outlook, Yahoo, AOL וכו').

התקן את Postfix

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

בעת ההתקנה:

  • בחר "אתר אינטרנט"
  • הזן את שם המארח של ה-Pi שלך (למשל, raspberrypi-ftp) עבור "System mail name"

בחר את ספק הדואר האלקטרוני שלך

ספק שרת SMTP פורט דרוש סיסמת אפליקציה?
Gmail smtp.gmail.com 587 כן
Outlook smtp-mail.outlook.com 587 כן
Yahoo smtp.mail.yahoo.com 465 כן
AOL smtp.aol.com 587 כן

קבל סיסמת אפליקציה ספציפית

רוב הספקים דורשים סיסמאות אפליקציה עבור יישומים צד שלישי. צור אחת מהגדרות האבטחה של ספק הדואר שלך:

Important

לעולם אל תשתמש בסיסמת הדואר הרגילה שלך. תמיד השתמש בסיסמת אפליקציה ספציפית.

הגדר אימות SASL

צור את קובץ הסיסמה עבור הספק שבחרת. בדוגמה זו משתמשים ב-Yahoo:

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

הוסף שורה זו (התאם את השרת והפורט לספק שלך):

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

עבור Gmail, השתמש ב:

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

אבטח ו-hash את הקובץ:

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

הגדר מיפוי כתובות דואר אלקטרוני

שנה כתובות דואר אלקטרוני מקומיות כך שיתאימו לספק הדואר שלך:

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

הוסף שורה זו (החלף את HOSTNAME בשם המארח של ה-Pi שלך והשתמש בדואר האלקטרוני שלך):

/.+@HOSTNAME/    your_email@provider.com

דוגמה:

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

אבטח את הקובץ:

sudo chmod 600 /etc/postfix/map/regex_map

הגדר את ההגדרות הראשיות של Postfix

ערוך את הקובץ הראשי:

sudo nano /etc/postfix/main.cf

מצא ועדכן את ה-relay host (או הוסף בסוף):

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

הוסף את ההגדרות הבאות בסוף הקובץ:

# הגדרת 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

# הגדרות רשת
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24

Tip

עבור Gmail (פורט 587), הגדר smtp_tls_wrappermode = no במקום yes.

Warning

עדכן את mynetworks עם טווח הרשת האמיתי שלך. הוסף רק רשתות מהימנות - כל מכשיר ברשתות אלו יכול להעביר דואר ללא אימות.

טווחי רשת נפוצים:

טווח רשת טווח כתובות 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

עדכן את חומת האש והפעל מחדש

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

אמת ש-Postfix פועל:

sudo systemctl status postfix

בדוק את ה-Relay

שלח דואר בדיקה:

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

בדוק את הלוגים:

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

חפש status=sent לאישור הצלחה.

הגדר את המכשיר שלך

בהגדרות המצלמה או המכשיר שלך:

  • שרת SMTP: כתובת ה-IP של ה-Pi שלך (למשל, 192.168.1.100)
  • פורט SMTP: 25
  • אימות: ללא
  • הצפנה: ללא (רק ברשת מקומית)

פתרון בעיות

אם מתעוררות בעיות, בדוק את קבצי הלוג הבאים:

שרת FTP:

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

Fail2ban:

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

מוניטור קבצים:

sudo journalctl -u ftp-monitor.service -f

דואר Postfix:

sudo tail -f /var/log/mail.log
mailq  # הצג תור דואר

סיום

ה-Raspberry Pi הוא כעת מערכת אוטומטית מלאה עם העלאות קבצים מאובטחות, התראות דואר אלקטרוני אוטומטיות עם קבצים מצורפים, ויכולות העברת SMTP למכשירים ישנים. בין אם משתמשים בפורטים TLS ישנים של Forward Email או במעביר Postfix מקומי, מכשירים ישנים יכולים כעת לשלוח דואר אלקטרוני באופן אמין דרך ספקי דואר מודרניים.