Transforme seu Raspberry Pi em um Servidor FTP Seguro com Relay de Email
Tem um Raspberry Pi juntando poeira? Seja o mais recente Pi 5, um Pi 4, Pi Zero ou até um modelo mais antigo, este guia mostrará como transformá-lo em um servidor de arquivos poderoso e automatizado com capacidades de relay de email. Perfeito para câmeras de segurança, dispositivos IoT e muito mais.
Compatível com: 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 e Raspberry Pi Zero.
Note
Este guia foi testado e verificado em um Raspberry Pi 3 Model B rodando Ubuntu Server 22.04 LTS.
O Que Estamos Construindo
Este guia irá guiá-lo na configuração de um sistema completo que inclui:
- Ubuntu Server 22.04 LTS: Um sistema operacional leve e robusto para o Pi.
- Um Servidor FTP Seguro (vsftpd): Para enviar arquivos com segurança.
- Um Firewall (UFW) & Fail2ban: Para manter os invasores afastados.
- Um Processador Automático de Arquivos: Um script que captura novos arquivos, envia-os por email como anexos e depois faz a limpeza.
- Opções de Email para Dispositivos Legados: Duas abordagens para dispositivos que não suportam TLS moderno:
- Usar as portas TLS 1.0 legadas do Forward Email (mais fácil)
- Configurar um relay SMTP Postfix (funciona com qualquer provedor de email)
Pronto? Vamos começar.
Parte 1: Instalando o Ubuntu Server no Seu Pi
Primeiro de tudo, coloque o Ubuntu Server rodando no Raspberry Pi. Isso é surpreendentemente fácil graças ao Raspberry Pi Imager.
O Que Você Vai Precisar
- Qualquer Raspberry Pi compatível (veja a lista acima)
- Um cartão microSD (mínimo 8GB, recomendado 16GB+)
- Um computador com leitor de cartão microSD
- Fonte de alimentação adequada para seu modelo de Pi
- Acesso à internet (Ethernet ou Wi-Fi)
Note
Modelos mais antigos como o Raspberry Pi 2 ou Pi Zero podem ser mais lentos, mas funcionarão bem para esta configuração.
Gravando o SO
-
Obtenha o Raspberry Pi Imager: Baixe-o do site oficial.
-
Escolha o SO: No imager, selecione "CHOOSE OS" > "Other general-purpose OS" > "Ubuntu".
- Para modelos 64-bit (Pi 3, 4, 5, Zero 2 W), escolha "Ubuntu Server 22.04.1 LTS (64-bit)".
- Para modelos 32-bit mais antigos (Pi 2, Pi Zero, Pi Zero W), escolha "Ubuntu Server 22.04.1 LTS (32-bit)".
-
Escolha seu armazenamento: Selecione seu cartão microSD.
Warning
Isso apagará completamente seu cartão microSD. Certifique-se de ter feito backup de tudo que for importante.
- Opções avançadas são suas amigas: Clique no ícone de engrenagem (⚙️) para configurar o Pi para modo headless (sem monitor ou teclado).
- Hostname: Dê um nome ao seu Pi (ex.:
pi-server). - SSH: Ative e defina um nome de usuário e senha.
- Wi-Fi: Se não estiver usando Ethernet, insira os dados do seu Wi-Fi.
- Locale: Defina seu fuso horário e layout de teclado.
- Hostname: Dê um nome ao seu Pi (ex.:
- Escreva! Clique no botão "WRITE" e deixe o imager fazer seu trabalho.
Inicializando e Conectando
Quando o imager terminar, insira o cartão microSD no Pi e conecte-o. Dê alguns minutos para inicializar. Ele está fazendo uma configuração inicial em segundo plano. Encontre o endereço IP no painel de administração do seu roteador e conecte via SSH:
ssh seu_usuario@endereco_ip_do_pi
Você está dentro! O Raspberry Pi agora está pronto para configuração.
Parte 2: Configurando um Servidor FTP Seguro
Em seguida, configure o vsftpd (Very Secure FTP Daemon), configurado para máxima segurança.
Instalação e Configuração
-
Instale o vsftpd:
sudo apt update sudo apt install vsftpd -y -
Faça backup do arquivo de configuração:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup -
Edite a configuração:
sudo nano /etc/vsftpd.conf
Tip
Se uma linha estiver comentada (começa com #), descomente removendo o #.
Faça estas alterações:
| Configuração | Valor | Propósito |
|---|---|---|
anonymous_enable |
NO |
Desabilitar acesso FTP anônimo |
local_enable |
YES |
Permitir login de usuários locais |
write_enable |
YES |
Habilitar upload de arquivos |
local_umask |
022 |
Definir permissões de arquivos (644 para arquivos, 755 para diretórios) |
chroot_local_user |
YES |
Prender usuários ao diretório home |
allow_writeable_chroot |
YES |
Permitir uploads dentro do jail chroot |
-
Adicione o intervalo de portas passivas: Adicione estas linhas ao final do arquivo. Isso é necessário para o firewall.
pasv_enable=YES pasv_min_port=40000 pasv_max_port=50000 -
Habilite o registro de logs: Adicione estas linhas para ativar o log para o Fail2ban.
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES -
Salve e reinicie: Pressione
Ctrl+O,Enter,Ctrl+X, depois reinicie o serviço:sudo systemctl restart vsftpd
Criando um Usuário FTP
Crie um usuário dedicado e restrito para acesso FTP.
-
Crie o usuário:
sudo adduser ftpuserSiga as instruções para definir uma senha. Os outros campos (nome, telefone, etc.) podem ser deixados em branco.
-
Crie a estrutura de diretórios:
sudo mkdir -p /home/ftpuser/ftp/uploads/home/ftpuser/ftp- Diretório principal do FTP/home/ftpuser/ftp/uploads- Onde os arquivos serão enviados
-
Defina as permissões:
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp sudo chmod 755 /home/ftpuser/ftp/uploads
Parte 3: Firewall e Proteção contra Força Bruta
Proteja o Pi com UFW (Uncomplicated Firewall) e Fail2ban.
Configurando o UFW
-
Instale o UFW:
sudo apt install ufw -y -
Defina as políticas padrão:
sudo ufw default deny incoming sudo ufw default allow outgoing -
Permita SSH (crítico!):
sudo ufw allow ssh comment 'SSH access'
Warning
Sempre permita SSH antes de ativar o firewall, ou você ficará trancado para fora!
-
Permita as portas 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' -
Ative o firewall:
sudo ufw enable
Configurando o Fail2ban
O Fail2ban bloqueia automaticamente endereços IP após tentativas repetidas de login falhadas.
-
Instale o Fail2ban:
sudo apt install fail2ban -y -
Crie uma configuração local:
sudo nano /etc/fail2ban/jail.local -
Adicione estas configurações:
[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
Torne-o executável:
sudo chmod +x /usr/local/bin/ftp-monitor.sh
Crie um Serviço Systemd
sudo nano /etc/systemd/system/ftp-monitor.service
Adicione este conteúdo:
[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
Habilite e inicie o serviço:
sudo systemctl daemon-reload
sudo systemctl enable ftp-monitor.service
sudo systemctl start ftp-monitor.service
Verifique o status:
sudo systemctl status ftp-monitor.service
Parte 5: Opções de Email para Dispositivos Legados
Dispositivos como câmeras FOSSCAM frequentemente não suportam versões modernas do TLS. Existem duas soluções:
Opção 1: Use as Portas TLS 1.0 Legadas do Forward Email (Recomendado)
Se você está usando o Forward Email, esta é a solução mais fácil. O Forward Email fornece portas dedicadas TLS 1.0 legadas especificamente para dispositivos mais antigos como câmeras, impressoras, scanners e máquinas de fax.
Preços
O Forward Email oferece vários planos:
| Plano | Preço | Recursos |
|---|---|---|
| Gratuito | $0/mês | Apenas encaminhamento de email (sem envio) |
| Proteção Aprimorada | $3/mês | Acesso SMTP + portas TLS 1.0 legadas |
| Equipe | $9/mês | Proteção Aprimorada + recursos para equipe |
| Empresarial | $250/mês | Equipe + solicitações ilimitadas de API |
Important
O plano Proteção Aprimorada ($3/mês) ou superior é necessário para acesso SMTP e suporte às portas TLS 1.0 legadas.
Saiba mais em Forward Email Pricing.
Gere Sua Senha
Antes de configurar seu dispositivo, gere uma senha no Forward Email:
- Faça login em Forward Email
- Navegue para Minha Conta → Domínios → [Seu Domínio] → Aliases
- Crie ou selecione um alias (ex.:
camera@seudominio.com) - Clique em "Generate Password" ao lado do alias
- Copie a senha gerada - você usará isso para autenticação SMTP
Tip
Cada alias pode ter sua própria senha. Isso é útil para rastrear qual dispositivo enviou qual email.
Configure Seu Dispositivo
Use estas configurações na sua câmera, impressora, scanner ou outro dispositivo legado:
| Configuração | Valor |
|---|---|
| Servidor SMTP | smtp.forwardemail.net |
| Porta (SSL/TLS) | 2455 |
| Porta (STARTTLS) | 2555 (alternativa) |
| Usuário | Seu email alias (ex.: camera@seudominio.com) |
| Senha | A senha gerada em "Generate Password" |
| Autenticação | Obrigatória |
| Criptografia | SSL/TLS (recomendado) ou STARTTLS |
Warning
Essas portas usam o protocolo TLS 1.0 obsoleto que possui vulnerabilidades conhecidas (BEAST, POODLE). Use somente se seu dispositivo não suportar TLS moderno 1.2+.
Basta configurar seu dispositivo com essas configurações e ele enviará emails diretamente pelo Forward Email sem precisar de um servidor relay local.
Para mais detalhes, veja o FAQ do Forward Email sobre Suporte a TLS Legado.
Opção 2: Configure um Relay SMTP Postfix
Se você não usa o Forward Email, ou prefere uma solução de relay local, configure o Postfix no Raspberry Pi para atuar como intermediário. Isso funciona com qualquer provedor de email (Gmail, Outlook, Yahoo, AOL, etc.).
Instale o Postfix
sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y
Durante a instalação:
- Selecione "Internet Site"
- Insira o nome do host do seu Pi (por exemplo,
raspberrypi-ftp) para "System mail name"
Escolha Seu Provedor de Email
| Provedor | Servidor SMTP | Porta | Senha de App Necessária? |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | Sim |
| Outlook | smtp-mail.outlook.com | 587 | Sim |
| Yahoo | smtp.mail.yahoo.com | 465 | Sim |
| AOL | smtp.aol.com | 587 | Sim |
Obtenha uma Senha Específica para App
A maioria dos provedores exige senhas de app para aplicações de terceiros. Gere uma nas configurações de segurança do seu provedor de email:
- Gmail: Google Account Security
- Outlook: Microsoft Account Security
- Yahoo: Yahoo Account Security
- AOL: AOL Account Security
Important
Nunca use sua senha de email normal. Sempre use uma senha específica para app.
Configure a Autenticação SASL
Crie o arquivo de senha para o provedor escolhido. Este exemplo usa Yahoo:
sudo mkdir -p /etc/postfix/sasl
sudo chmod 700 /etc/postfix/sasl
sudo nano /etc/postfix/sasl/sasl_passwd
Adicione esta linha (ajuste servidor e porta para seu provedor):
[smtp.mail.yahoo.com]:465 seu_email@yahoo.com:sua_senha_de_app
Para Gmail, use:
[smtp.gmail.com]:587 seu_email@gmail.com:sua_senha_de_app
Proteja e gere o hash do arquivo:
sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd
Configure o Mapeamento de Endereços de Email
Reescreva endereços de email locais para corresponder ao seu provedor:
sudo mkdir -p /etc/postfix/map
sudo chmod 700 /etc/postfix/map
sudo nano /etc/postfix/map/regex_map
Adicione esta linha (substitua HOSTNAME pelo nome do host do seu Pi e use seu email):
/.+@HOSTNAME/ seu_email@provedor.com
Exemplo:
/.+@raspberrypi-ftp/ joao@yahoo.com
Proteja o arquivo:
sudo chmod 600 /etc/postfix/map/regex_map
Configure as Configurações Principais do Postfix
Edite a configuração principal:
sudo nano /etc/postfix/main.cf
Encontre e atualize o relay host (ou adicione no final):
relayhost = [smtp.mail.yahoo.com]:465
Adicione estas configurações no final do arquivo:
# Configuração do Relay SMTP
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
# Configurações de rede
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.0/24
Tip
Para Gmail (porta 587), defina smtp_tls_wrappermode = no em vez de yes.
Warning
Atualize mynetworks com o intervalo real da sua rede. Adicione apenas redes confiáveis - qualquer dispositivo nessas redes pode enviar emails sem autenticação.
Intervalos comuns de rede:
| Intervalo de Rede | Faixa de Endereços 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 |
Atualize o Firewall e Reinicie
sudo ufw allow 25/tcp comment 'SMTP para dispositivos locais'
sudo systemctl restart postfix
Verifique se o Postfix está rodando:
sudo systemctl status postfix
Teste o Relay
Envie um email de teste:
echo "Teste do Postfix" | mail -s "Teste" seu_email@provedor.com
Verifique os logs:
sudo tail -f /var/log/mail.log
Procure por status=sent para confirmar sucesso.
Configure Seu Dispositivo
Nas configurações da sua câmera ou dispositivo:
- Servidor SMTP: O endereço IP do seu Pi (ex.:
192.168.1.100) - Porta SMTP:
25 - Autenticação: Nenhuma
- Criptografia: Nenhuma (somente rede local)
Solução de Problemas
Se surgirem problemas, verifique estes arquivos de log:
Servidor FTP:
sudo tail -f /var/log/vsftpd.log
Fail2ban:
sudo fail2ban-client status
sudo tail -f /var/log/fail2ban.log
Monitor de Arquivos:
sudo journalctl -u ftp-monitor.service -f
Postfix Mail:
sudo tail -f /var/log/mail.log
mailq # Ver fila de emails
Finalizando
O Raspberry Pi agora é um sistema automatizado completo com uploads de arquivos seguros, notificações automáticas por email com anexos e capacidades de retransmissão SMTP para dispositivos legados. Seja usando as portas TLS legadas do Forward Email ou um relay Postfix local, dispositivos mais antigos agora podem enviar emails de forma confiável através de provedores modernos.