ProFTPD als sftp Server

Security 1. März 2026

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

  1. Public-Key-Auth erzwingen (kein Passwort)
  2. Moderne Cipher und Key-Exchange nutzen
  3. Chroot-Jail für alle Benutzer
  4. Timeouts setzen
  5. Login-Versuche limitieren
  6. Detailliertes Logging
  7. Firewall richtig konfigurieren
  8. Ed25519-Schlüssel verwenden

Tags