> ## Content Index
> Fetch the complete content index at: https://blog.lange-it.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# ProFTPD als sftp Server
- URL: https://blog.lange-it.com/proftpd-als-sftp-server/
- Published: 2026-03-01T14:00:27.000Z
- Updated: 2026-03-01T15:11:46.000Z
- Author: Peter Lange
- Tags: Security, Ubuntu, ProFTPd, SFTP

## Installation von ProFTPD

Zunächst installierst du ProFTPD mit den notwendigen Modulen:

```bash
sudo apt update
sudo apt install proftpd-basic proftpd-mod-sftp

```

---

## Konfiguration von ProFTPD

Bearbeite die Hauptkonfigurationsdatei:

```bash
sudo nano /etc/proftpd/proftpd.conf

```

Passe folgende Einstellungen an oder füge sie hinzu:

### Grundlegende Einstellungen

```bash
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:

```bash
<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:

```bash
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):

```bash
sudo useradd -m -s /bin/bash ftpuser
sudo passwd ftpuser

```

Stelle sicher, dass das Home-Verzeichnis die richtigen Berechtigungen hat:

```bash
sudo chmod 755 /home/ftpuser

```

---

## ProFTPD starten und aktivieren

Starte den Service:

```bash
sudo systemctl restart proftpd
sudo systemctl enable proftpd

```

Überprüfe den Status:

```bash
sudo systemctl status proftpd

```

---

## Firewall konfigurieren

Falls du UFW verwendest, öffne Port 2222:

```bash
sudo ufw allow 2222/tcp

```

---

## Verbindung testen

Verbinde dich mit einem SFTP-Client (z.B. FileZilla oder über die Kommandozeile):

```bash
sftp -P 2222 ftpuser@localhost

```

Oder mit ssh:

```bash
ssh -p 2222 ftpuser@localhost

```

---

## Logs überprüfen

Falls Probleme auftreten, schau in die Logs:

```bash
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:

```bash
sudo nano /etc/ssh/sshd_config

```

Kommentiere diese Zeile aus oder entferne sie:

```bash
# Subsystem sftp /usr/lib/openssh/sftp-server

```

Dann SSHD neustarten:

```bash
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:

```bash
sudo nano /etc/ssh/sshd_config

```

Suche diese Zeile:

```bash
Subsystem sftp /usr/lib/openssh/sftp-server

```

Kommentiere sie aus oder lösche sie:

```bash
# Subsystem sftp /usr/lib/openssh/sftp-server

```

Speichern (Ctrl+X, dann Y, dann Enter) und SSHD neustarten:

```bash
sudo systemctl restart ssh

```

Überprüfe, dass SSHD noch läuft:

```bash
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:

```bash
# 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 aes256-gcm@openssh.com,aes128-gcm@openssh.com,chacha20-poly1305@openssh.com
  SFTPKeyExchanges curve25519-sha256,curve25519-sha256@libssh.org
  SFTPHostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
  SFTPMACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com
  
  # 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

```bash
# 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

```bash
# 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

```bash
# Nur lokale oder spezifische IPs erlauben (optional)
<Limit ALL>
  AllowAll
</Limit>

# TCP-Keepalive aktivieren
TCPBacklog 100

```

---

## SSH-Schlüssel richtig generieren

Nutze moderne Algorithmen:

```bash
# 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:

```bash
# 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

```bash
# 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

```bash
# Logs rotieren (logrotate)
sudo nano /etc/logrotate.d/proftpd

```

Inhalt:

```bash
/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