ProFTPD als sftp Server
Installation von ProFTPD
Zunächst installierst du ProFTPD mit den notwendigen Modulen:
sudo apt update
sudo apt install proftpd-basic proftpd-mod-sftp
Konfiguration von ProFTPD
Bearbeite die Hauptkonfigurationsdatei:
sudo nano /etc/proftpd/proftpd.conf
Passe folgende Einstellungen an oder füge sie hinzu:
Grundlegende Einstellungen
Port 2222
UseIPv6 off
DefaultRoot ~ !adm,!root
RequireValidShell off
SFTP-Modul aktivieren
Suche nach der Sektion <IfModule mod_sftp.c> oder füge sie am Ende der Datei ein:
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
SFTPLog /var/log/proftpd/sftp.log
# SSH-Schlüssel generieren (siehe nächster Schritt)
SFTPHostKey /etc/proftpd/ssh_host_rsa_key
SFTPHostKey /etc/proftpd/ssh_host_ed25519_key
</IfModule>
SSH-Schlüssel generieren
ProFTPD benötigt SSH-Hostschlüssel. Generiere diese mit:
sudo ssh-keygen -t rsa -b 4096 -f /etc/proftpd/ssh_host_rsa_key -N ""
sudo ssh-keygen -t ed25519 -f /etc/proftpd/ssh_host_ed25519_key -N ""
sudo chown proftpd:proftpd /etc/proftpd/ssh_host_*_key*
sudo chmod 600 /etc/proftpd/ssh_host_*_key
Benutzer und Verzeichnisse vorbereiten
Erstelle einen FTP-Benutzer (falls noch nicht vorhanden):
sudo useradd -m -s /bin/bash ftpuser
sudo passwd ftpuser
Stelle sicher, dass das Home-Verzeichnis die richtigen Berechtigungen hat:
sudo chmod 755 /home/ftpuser
ProFTPD starten und aktivieren
Starte den Service:
sudo systemctl restart proftpd
sudo systemctl enable proftpd
Überprüfe den Status:
sudo systemctl status proftpd
Firewall konfigurieren
Falls du UFW verwendest, öffne Port 2222:
sudo ufw allow 2222/tcp
Verbindung testen
Verbinde dich mit einem SFTP-Client (z.B. FileZilla oder über die Kommandozeile):
sftp -P 2222 ftpuser@localhost
Oder mit ssh:
ssh -p 2222 ftpuser@localhost
Logs überprüfen
Falls Probleme auftreten, schau in die Logs:
sudo tail -f /var/log/proftpd/sftp.log
sudo tail -f /var/log/syslog
Szenarien
Wenn du nur ProFTPD für SFTP nutzen möchtest
Dann kannst du das SFTP-Subsystem in SSHD deaktivieren, um Verwirrung zu vermeiden und Ressourcen zu sparen. Bearbeite dafür:
sudo nano /etc/ssh/sshd_config
Kommentiere diese Zeile aus oder entferne sie:
# Subsystem sftp /usr/lib/openssh/sftp-server
Dann SSHD neustarten:
sudo systemctl restart ssh
Wenn du beide parallel nutzen möchtest
Du kannst SSHD und ProFTPD parallel betreiben. Das ist völlig möglich und manchmal sogar sinnvoll:
- SSHD auf Port 22 für SSH-Zugriff
- ProFTPD auf Port 2222 für SFTP
Dann musst du nichts ändern.
Meine Empfehlung
Deaktiviere das SFTP-Subsystem in SSHD, wenn:
- Du ProFTPD als deine einzige SFTP-Lösung nutzen möchtest
- Du zentrale Kontrolle über alle SFTP-Verbindungen haben möchtest
- Du Logging und Authentifizierung über ProFTPD verwalten möchtest
Behalte SSHD-SFTP, wenn:
- Du bereits SSHD mit SFTP nutzt und nicht migrieren möchtest
- Du unterschiedliche Authentifizierungsmethoden brauchst
SFTP nur via ProFTPd? Dann deaktiviere das SFTP-Subsystem in SSHD.
Bearbeite die SSHD-Konfiguration:
sudo nano /etc/ssh/sshd_config
Suche diese Zeile:
Subsystem sftp /usr/lib/openssh/sftp-server
Kommentiere sie aus oder lösche sie:
# Subsystem sftp /usr/lib/openssh/sftp-server
Speichern (Ctrl+X, dann Y, dann Enter) und SSHD neustarten:
sudo systemctl restart ssh
Überprüfe, dass SSHD noch läuft:
sudo systemctl status ssh
State-of-the-Art Sicherheitseinstellungen für ProFTPD
Authentifizierung und Zugriffskontrolle
Füge diese Einstellungen in deine /etc/proftpd/proftpd.conf ein:
# Nur spezifische Benutzer erlauben
<Limit LOGIN>
AllowUser ftpuser
DenyAll
</Limit>
# SSH-Schlüssel-basierte Authentifizierung erzwingen (statt Passwort)
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
# Nur Public-Key-Authentifizierung
SFTPAuthMethods publickey
# Passwort-Auth deaktivieren
AuthUsingAlternateAuthentication off
# Nur sichere Cipher und Key-Exchange-Algorithmen
SFTPCiphers [email protected],[email protected],[email protected]
SFTPKeyExchanges curve25519-sha256,[email protected]
SFTPHostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
SFTPMACs [email protected],[email protected]
# Nur TLS 1.3 für FTPS (falls du auch FTPS nutzt)
TLSProtocol TLSv1.3
TLSCipherSuite HIGH:!aNULL:!MD5
</IfModule>
# Timeout-Einstellungen
TimeoutIdle 300
TimeoutNoTransfer 300
TimeoutStalled 300
# Login-Versuche limitieren
MaxLoginAttempts 3
Dateisystem und Berechtigungen
# Chroot-Jail für alle Benutzer
DefaultRoot ~ !adm,!root
# Keine Shell-Zugriff erforderlich
RequireValidShell off
# Umask für neue Dateien (restriktiv)
Umask 0077
# Keine Symlinks außerhalb des Chroot
<IfModule mod_core.c>
SymlinksProtected on
</IfModule>
Logging und Monitoring
# Detailliertes Logging
SFTPLog /var/log/proftpd/sftp.log
LogFormat default "%h %l %u %t \"%r\" %s %b"
TransferLog /var/log/proftpd/xferlog
# Alle Befehle loggen
<IfModule mod_log.c>
LogFormat auth "%u [%P] %h %t \"%m %f\" %s"
LogFormat write "%u [%P] %h %t \"%m %f\" %s %b"
LogFormat read "%u [%P] %h %t \"%m %f\" %s %b"
LogFormat dir "%u [%P] %h %t \"%m %f\" %s"
</IfModule>
Netzwerk-Sicherheit
# Nur lokale oder spezifische IPs erlauben (optional)
<Limit ALL>
AllowAll
</Limit>
# TCP-Keepalive aktivieren
TCPBacklog 100
SSH-Schlüssel richtig generieren
Nutze moderne Algorithmen:
# Ed25519 (empfohlen - schneller und sicherer)
sudo ssh-keygen -t ed25519 -f /etc/proftpd/ssh_host_ed25519_key -N ""
# RSA mit 4096 Bit (Fallback)
sudo ssh-keygen -t rsa -b 4096 -f /etc/proftpd/ssh_host_rsa_key -N ""
# Berechtigungen setzen
sudo chown proftpd:proftpd /etc/proftpd/ssh_host_*_key*
sudo chmod 600 /etc/proftpd/ssh_host_*_key
sudo chmod 644 /etc/proftpd/ssh_host_*_key.pub
Benutzer-Konfiguration mit SSH-Schlüsseln
Für deinen FTP-Benutzer:
# Home-Verzeichnis mit restriktiven Berechtigungen
sudo mkdir -p /home/ftpuser/.ssh
sudo chmod 700 /home/ftpuser/.ssh
# Öffentliche Schlüssel des Benutzers hinzufügen
sudo nano /home/ftpuser/.ssh/authorized_keys
# Hier den öffentlichen Schlüssel einfügen
sudo chmod 600 /home/ftpuser/.ssh/authorized_keys
sudo chown -R ftpuser:ftpuser /home/ftpuser/.ssh
Firewall-Regeln
# Nur von bestimmten IPs erlauben (Beispiel)
sudo ufw allow from 192.168.1.0/24 to any port 2222/tcp
# Oder allgemein
sudo ufw allow 2222/tcp
Regelmäßige Wartung
# Logs rotieren (logrotate)
sudo nano /etc/logrotate.d/proftpd
Inhalt:
/var/log/proftpd/*.log {
daily
rotate 14
compress
delaycompress
notifempty
create 0640 proftpd adm
sharedscripts
postrotate
systemctl reload proftpd > /dev/null 2>&1 || true
endscript
}
Wichtigste Punkte zusammengefasst
- Public-Key-Auth erzwingen (kein Passwort)
- Moderne Cipher und Key-Exchange nutzen
- Chroot-Jail für alle Benutzer
- Timeouts setzen
- Login-Versuche limitieren
- Detailliertes Logging
- Firewall richtig konfigurieren
- Ed25519-Schlüssel verwenden