Raspberry Pi'nizi E-posta Aktarımlı Güvenli Bir FTP Sunucusuna Dönüştürün
Elinizde toz tutan bir Raspberry Pi mi var? En yeni Pi 5, Pi 4, Pi Zero veya daha eski bir model olsun, bu rehber size onu güçlü, otomatik dosya sunucusuna ve e-posta aktarımlı bir sisteme nasıl dönüştüreceğinizi gösterecek. Güvenlik kameraları, IoT cihazları ve daha fazlası için mükemmel.
Uyumlu modeller: 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 ve Raspberry Pi Zero.
Note
Bu rehber, Ubuntu Server 22.04 LTS çalışan bir Raspberry Pi 3 Model B üzerinde test edilip doğrulanmıştır.
Ne İnşa Ediyoruz
Bu rehber sizi aşağıdakileri içeren tam bir sistem kurulumunda yönlendirecek:
- Ubuntu Server 22.04 LTS: Pi için sağlam ve hafif bir işletim sistemi.
- Güvenli Bir FTP Sunucusu (vsftpd): Dosyaları güvenli şekilde bırakmak için.
- Güvenlik Duvarı (UFW) ve Fail2ban: Kötü niyetlileri engellemek için.
- Otomatik Dosya İşleyici: Yeni dosyaları alıp e-posta eki olarak gönderen ve ardından kendini temizleyen bir betik.
- Eski Cihazlar İçin E-posta Seçenekleri: Modern TLS desteklemeyen cihazlar için iki yöntem:
- Forward Email'in legacy TLS 1.0 portlarını kullanmak (en kolay)
- Postfix SMTP aktarıcısı kurmak (herhangi bir e-posta sağlayıcısıyla çalışır)
Hazır mısınız? Başlayalım.
Bölüm 1: Pi'nize Ubuntu Server Kurmak
İlk olarak, Raspberry Pi üzerinde Ubuntu Server çalıştırın. Raspberry Pi Imager sayesinde bu şaşırtıcı derecede kolay.
İhtiyacınız Olanlar
- Yukarıdaki listede belirtilen herhangi bir uyumlu Raspberry Pi
- Bir microSD kart (en az 8GB, 16GB+ önerilir)
- MicroSD kart okuyuculu bir bilgisayar
- Pi modelinize uygun güç kaynağı
- İnternet bağlantısı (Ethernet veya Wi-Fi)
Note
Raspberry Pi 2 veya Pi Zero gibi eski modeller daha yavaş olabilir ancak bu kurulum için sorunsuz çalışacaktır.
İşletim Sistemini Yazdırmak
-
Raspberry Pi Imager'ı edinin: resmi web sitesinden indirin.
-
İşletim Sistemini Seçin: Imager'da "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu" seçeneklerini takip edin.
- 64-bit modeller (Pi 3, 4, 5, Zero 2 W) için "Ubuntu Server 22.04.1 LTS (64-bit)" seçin.
- Eski 32-bit modeller (Pi 2, Pi Zero, Pi Zero W) için "Ubuntu Server 22.04.1 LTS (32-bit)" seçin.
-
Depolama Alanınızı Seçin: MicroSD kartınızı seçin.
Warning
Bu işlem microSD kartınızı tamamen silecektir. Önemli verilerinizi yedeklediğinizden emin olun.
- Gelişmiş Seçenekler Sizin Dostunuz: Dişli simgesine (⚙️) tıklayarak Pi'nizi monitör ve klavye olmadan (headless) kullanmak için ayarlayın.
- Hostname: Pi'nize bir isim verin (örneğin,
pi-server). - SSH: Etkinleştirin ve bir kullanıcı adı ile şifre belirleyin.
- Wi-Fi: Ethernet kullanmıyorsanız Wi-Fi bilgilerinizi girin.
- Yerel Ayar: Saat diliminizi ve klavye düzeninizi ayarlayın.
- Hostname: Pi'nize bir isim verin (örneğin,
- Yaz! "WRITE" düğmesine tıklayın ve imajlayıcının işini yapmasına izin verin.
Başlatma ve Bağlanma
İmajlayıcı işi bitirdikten sonra, microSD kartı Pi'ye takın ve fişe takın. Başlaması için birkaç dakika bekleyin. Arka planda bazı ilk ayarları yapıyor. Yönlendiricinizin yönetim sayfasından IP adresini bulun, ardından SSH ile bağlanın:
ssh your_username@your_pi_ip_address
Giriş yaptınız! Raspberry Pi artık yapılandırmaya hazır.
Bölüm 2: Güvenli Bir FTP Sunucusu Kurma
Sonraki adım, maksimum güvenlik için yapılandırılmış vsftpd (Çok Güvenli FTP Daemon) kurmaktır.
Kurulum ve Yapılandırma
-
vsftpd'yi yükleyin:
sudo apt update sudo apt install vsftpd -y -
Yapılandırma dosyasını yedekleyin:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup -
Yapılandırmayı düzenleyin:
sudo nano /etc/vsftpd.conf
Tip
Eğer bir satır yorum satırıysa (başında # varsa), # işaretini kaldırarak yorumdan çıkarın.
Aşağıdaki değişiklikleri yapın:
| Ayar | Değer | Amaç |
|---|---|---|
anonymous_enable |
NO |
Anonim FTP erişimini devre dışı bırak |
local_enable |
YES |
Yerel kullanıcıların giriş yapmasına izin ver |
write_enable |
YES |
Dosya yüklemelerini etkinleştir |
local_umask |
022 |
Dosya izinlerini ayarla (dosyalar için 644, dizinler için 755) |
chroot_local_user |
YES |
Kullanıcıları ev dizinlerine hapset |
allow_writeable_chroot |
YES |
Chroot jail içinde yüklemelere izin ver |
-
Pasif Port Aralığını Ekle: Dosyanın sonuna aşağıdaki satırları ekleyin. Bu, güvenlik duvarı için gereklidir.
pasv_enable=YES pasv_min_port=40000 pasv_max_port=50000 -
Kayıtları Etkinleştir: Fail2ban için kayıt tutmayı etkinleştirmek üzere aşağıdaki satırları ekleyin.
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES -
Kaydet ve Yeniden Başlat:
Ctrl+O,Enter,Ctrl+Xtuşlarına basın, ardından servisi yeniden başlatın:sudo systemctl restart vsftpd
Bir FTP Kullanıcısı Oluşturma
FTP erişimi için özel, kısıtlanmış bir kullanıcı oluşturun.
-
Kullanıcıyı oluşturun:
sudo adduser ftpuserParola belirlemek için yönergeleri izleyin. Diğer alanlar (isim, telefon vb.) boş bırakılabilir.
-
Dizin yapısını oluşturun:
sudo mkdir -p /home/ftpuser/ftp/uploads/home/ftpuser/ftp- Ana FTP dizini/home/ftpuser/ftp/uploads- Dosyaların yükleneceği yer
-
İzinleri ayarlayın:
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp/uploads
Bölüm 3: Güvenlik Duvarı ve Kaba Kuvvet Koruması
Pi'yi UFW (Basit Güvenlik Duvarı) ve Fail2ban ile güvence altına alın.
UFW Kurulumu
-
UFW'yi yükleyin:
sudo apt install ufw -y -
Varsayılan politikaları ayarlayın:
sudo ufw default deny incoming sudo ufw default allow outgoing -
SSH'ye izin verin (kritik!):
sudo ufw allow ssh comment 'SSH erişimi'
Warning
Güvenlik duvarını etkinleştirmeden önce her zaman SSH'ye izin verin, yoksa kendinizi kilitlersiniz!
-
FTP portlarına izin verin:
sudo ufw allow 20/tcp comment 'FTP veri' sudo ufw allow 21/tcp comment 'FTP kontrol' sudo ufw allow 40000:50000/tcp comment 'FTP pasif mod' -
Güvenlik duvarını etkinleştirin:
sudo ufw enable
Fail2ban Kurulumu
Fail2ban, tekrar eden başarısız giriş denemelerinden sonra IP adreslerini otomatik olarak engeller.
-
Fail2ban'ı yükleyin:
sudo apt install fail2ban -y -
Yerel yapılandırma dosyası oluşturun:
sudo nano /etc/fail2ban/jail.local -
Aşağıdaki yapılandırmaları ekleyin:
[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
Çalıştırılabilir yapın:
sudo chmod +x /usr/local/bin/ftp-monitor.sh
Systemd Servisi Oluşturun
sudo nano /etc/systemd/system/ftp-monitor.service
Bu içeriği ekleyin:
[Unit]
Description=FTP Yükleme Monitörü
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ftp-monitor.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Servisi etkinleştirin ve başlatın:
sudo systemctl daemon-reload
sudo systemctl enable ftp-monitor.service
sudo systemctl start ftp-monitor.service
Durumu kontrol edin:
sudo systemctl status ftp-monitor.service
Bölüm 5: Eski Cihazlar için E-posta Seçenekleri
FOSSCAM kameralar gibi cihazlar genellikle modern TLS sürümlerini desteklemez. İki çözüm vardır:
Seçenek 1: Forward Email'in Eski TLS 1.0 Portlarını Kullanın (Önerilen)
Forward Email kullanıyorsanız, bu en kolay çözümdür. Forward Email, kameralar, yazıcılar, tarayıcılar ve faks makineleri gibi eski cihazlar için özel olarak eski TLS 1.0 portları sağlar.
Fiyatlandırma
Forward Email birkaç plan sunar:
| Plan | Fiyat | Özellikler |
|---|---|---|
| Ücretsiz | $0/ay | Sadece e-posta yönlendirme (gönderim yok) |
| Gelişmiş Koruma | $3/ay | SMTP erişimi + eski TLS 1.0 portları |
| Takım | $9/ay | Gelişmiş + takım özellikleri |
| Kurumsal | $250/ay | Takım + sınırsız API istekleri |
Important
SMTP erişimi ve eski TLS 1.0 port desteği için Gelişmiş Koruma planı ($3/ay) veya üzeri gereklidir.
Daha fazla bilgi için Forward Email Fiyatlandırma sayfasına bakın.
Şifrenizi Oluşturun
Cihazınızı yapılandırmadan önce Forward Email'de bir şifre oluşturun:
- Forward Email sitesine giriş yapın
- Hesabım → Alan Adları → [Alan Adınız] → Takma Adlar bölümüne gidin
- Bir takma ad oluşturun veya seçin (örneğin,
camera@yourdomain.com) - Takma adın yanındaki "Şifre Oluştur" butonuna tıklayın
- Oluşturulan şifreyi kopyalayın - SMTP kimlik doğrulaması için bunu kullanacaksınız
Tip
Her takma adın kendi şifresi olabilir. Bu, hangi cihazın hangi e-postayı gönderdiğini takip etmek için faydalıdır.
Cihazınızı Yapılandırın
Kameranızda, yazıcınızda, tarayıcınızda veya diğer eski cihazlarda bu ayarları kullanın:
| Ayar | Değer |
|---|---|
| SMTP Sunucusu | smtp.forwardemail.net |
| Port (SSL/TLS) | 2455 |
| Port (STARTTLS) | 2555 (alternatif) |
| Kullanıcı Adı | Takma ad e-posta adresiniz (örneğin camera@yourdomain.com) |
| Şifre | "Şifre Oluştur" ile aldığınız şifre |
| Kimlik Doğrulama | Gerekli |
| Şifreleme | SSL/TLS (önerilen) veya STARTTLS |
Warning
Bu portlar, bilinen güvenlik açıkları (BEAST, POODLE) bulunan eski TLS 1.0 protokolünü kullanır. Cihazınız modern TLS 1.2+ desteklemiyorsa kullanın.
Cihazınızı bu ayarlarla yapılandırın, böylece yerel bir aktarma sunucusuna ihtiyaç duymadan doğrudan Forward Email üzerinden e-posta gönderebilir.
Daha fazla detay için Forward Email Eski TLS Desteği SSS sayfasına bakın.
Seçenek 2: Postfix SMTP Aktarıcısı Kurun
Forward Email kullanmıyorsanız veya yerel bir aktarma çözümü tercih ediyorsanız, Raspberry Pi üzerinde Postfix kurarak aracı olarak kullanabilirsiniz. Bu, Gmail, Outlook, Yahoo, AOL gibi herhangi bir e-posta sağlayıcısıyla çalışır.
Postfix Kurulumu
sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y
Kurulum sırasında:
- "Internet Site" seçin
- "Sistem posta adı" için Pi'nizin ana bilgisayar adını girin (örneğin,
raspberrypi-ftp)
E-posta Sağlayıcınızı Seçin
| Sağlayıcı | SMTP Sunucusu | Port | Uygulama Şifresi Gerekli mi? |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | Evet |
| Outlook | smtp-mail.outlook.com | 587 | Evet |
| Yahoo | smtp.mail.yahoo.com | 465 | Evet |
| AOL | smtp.aol.com | 587 | Evet |
Uygulamaya Özel Şifre Alın
Çoğu sağlayıcı üçüncü taraf uygulamalar için uygulama şifreleri gerektirir. Bunları e-posta sağlayıcınızın güvenlik ayarlarından oluşturun:
- Gmail: Google Hesap Güvenliği
- Outlook: Microsoft Hesap Güvenliği
- Yahoo: Yahoo Hesap Güvenliği
- AOL: AOL Hesap Güvenliği
Important
Normal e-posta şifrenizi asla kullanmayın. Her zaman uygulamaya özel şifre kullanın.
SASL Kimlik Doğrulamasını Yapılandırın
Seçtiğiniz sağlayıcı için şifre dosyasını oluşturun. Bu örnek Yahoo kullanmaktadır:
sudo mkdir -p /etc/postfix/sasl
sudo chmod 700 /etc/postfix/sasl
sudo nano /etc/postfix/sasl/sasl_passwd
Bu satırı ekleyin (sağlayıcınıza göre sunucu ve portu ayarlayın):
[smtp.mail.yahoo.com]:465 your_email@yahoo.com:your_app_password
Gmail için kullanın:
[smtp.gmail.com]:587 your_email@gmail.com:your_app_password
Dosyayı güvenli hale getirin ve hashleyin:
sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd
E-posta Adresi Eşlemesini Yapılandırın
Yerel e-posta adreslerini e-posta sağlayıcınıza uyacak şekilde yeniden yazın:
sudo mkdir -p /etc/postfix/map
sudo chmod 700 /etc/postfix/map
sudo nano /etc/postfix/map/regex_map
Bu satırı ekleyin (HOSTNAME yerine Pi'nizin ana bilgisayar adını ve kendi e-postanızı kullanın):
/.+@HOSTNAME/ your_email@provider.com
Örnek:
/.+@raspberrypi-ftp/ john@yahoo.com
Dosyayı güvenli hale getirin:
sudo chmod 600 /etc/postfix/map/regex_map
Postfix Ana Ayarlarını Yapılandırın
Ana yapılandırmayı düzenleyin:
sudo nano /etc/postfix/main.cf
Relay host'u bulun ve güncelleyin (veya dosyanın sonuna ekleyin):
relayhost = [smtp.mail.yahoo.com]:465
Dosyanın sonuna şu ayarları ekleyin:
# SMTP Relay Yapılandırması
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
# Ağ ayarları
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24
Tip
Gmail (port 587) için smtp_tls_wrappermode = yes yerine smtp_tls_wrappermode = no olarak ayarlayın.
Warning
mynetworks değerini gerçek ağ aralığınızla güncelleyin. Sadece güvenilir ağları ekleyin - bu ağlardaki herhangi bir cihaz kimlik doğrulama olmadan posta iletebilir.
Yaygın ağ aralıkları:
| Ağ Aralığı | IP Adresi Aralığı |
|---|---|
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 |
Güvenlik Duvarını Güncelleyin ve Yeniden Başlatın
sudo ufw allow 25/tcp comment 'Yerel cihazlar için SMTP'
sudo systemctl restart postfix
Postfix'in çalıştığını doğrulayın:
sudo systemctl status postfix
Relay'i Test Edin
Test e-postası gönderin:
echo "Postfix'ten Test" | mail -s "Test" your_email@provider.com
Logları kontrol edin:
sudo tail -f /var/log/mail.log
Başarıyı doğrulamak için status=sent ifadesini arayın.
Cihazınızı Yapılandırın
Kamera veya cihaz ayarlarınızda:
- SMTP Sunucusu: Pi'nizin IP adresi (örneğin,
192.168.1.100) - SMTP Portu:
25 - Kimlik Doğrulama: Yok
- Şifreleme: Yok (yalnızca yerel ağ)
Sorun Giderme
Sorunlar ortaya çıkarsa, bu günlük dosyalarını kontrol edin:
FTP Sunucusu:
sudo tail -f /var/log/vsftpd.log
Fail2ban:
sudo fail2ban-client status
sudo tail -f /var/log/fail2ban.log
Dosya İzleyici:
sudo journalctl -u ftp-monitor.service -f
Postfix Posta:
sudo tail -f /var/log/mail.log
mailq # Posta kuyruğunu görüntüle
Sonuçlandırma
Raspberry Pi artık güvenli dosya yüklemeleri, ekli otomatik e-posta bildirimleri ve eski cihazlar için SMTP aktarma yetenekleri ile tam otomatik bir sistemdir. Forward Email'in eski TLS portlarını veya yerel bir Postfix aktarıcısını kullanıyor olun, eski cihazlar artık modern e-posta sağlayıcıları üzerinden güvenilir şekilde e-posta gönderebilir.