Pure-FTPd ist ein kostenloser Open-Source-FTP-Server, der auf Sicherheit ausgelegt ist. In diesem Tutorial lernen wir, wie man einen FTP-Server auf Debian 10 mit Pure-FTPd einrichtet und wie man TLS-Verschlüsselung erzwingt.
Reine FTPd-Funktionen:
- Es unterstützt SSL/TLS-Verschlüsselung und somit können Passwörter und Befehle geschützt werden.
- Es kann auf den meisten Unix-ähnlichen Systemen ausgeführt werden:Linux, BSDs, Solaris, Darwin, HPUX, AIX und sogar iPhone.
- Verfügbar in 21 Sprachen.
- Ermöglicht es Ihnen, aktive Sitzungen zu überwachen.
- Unterstützt ein virtuelles Quotensystem.
- Und vieles mehr
Eine vollständige Liste der Funktionen finden Sie auf der offiziellen Pure-FTPd-Website.
Schritt 1:Pure-FTPd auf Debian 10 Server installieren
Es befindet sich im Software-Repository, geben Sie also den folgenden Befehl ein, um den FTP-Server zu installieren.
sudo apt install pure-ftpd
Nach der Installation wird Pure-FTPd automatisch gestartet, wie mit diesem Befehl zu sehen ist:
systemctl status pure-ftpd
Ausgabe:
● pure-ftpd.service Loaded: loaded (/etc/init.d/pure-ftpd; generated) Active: active (running) since Wed 2021-06-16 13:15:52 UTC; 23s ago Docs: man:systemd-sysv-generator(8) Tasks: 1 (limit: 558) Memory: 972.0K CGroup: /system.slice/pure-ftpd.service └─9223 pure-ftpd (SERVER)
Wenn es nicht ausgeführt wird, starten Sie es mit:
sudo systemctl start pure-ftpd
Und es lauscht auf TCP-Port 21, dem Kontrollport , wie man mit
sehen kannsudo ss -lnpt | grep pure-ftpd
Der andere Port ist der Datenport (TCP-Port 20), der verwendet wird, wenn ein Benutzer Dateien über FTP überträgt.
Der anonyme Zugriff ist standardmäßig deaktiviert. Von nun an können Sie sich mit Ihrem Systemkonto anmelden, aber FTP im Klartext ist unsicher und es wird dringend davon abgeraten. Um einen sicheren FTP-Server zu haben, müssen wir die Kommunikation mit TLS verschlüsseln.
Schritt 2:TLS-Verschlüsselung erzwingen
Um sowohl die Klartext- als auch die TLS-Verschlüsselung zu aktivieren, führen Sie den folgenden Befehl aus, der /etc/pure-ftpd/conf/TLS
erstellt Datei und fügen Sie die Nummer 1 in die Datei ein.
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
Es wird jedoch empfohlen, den Klartext zu deaktivieren und nur die TLS-Verschlüsselung zu verwenden, also fügen Sie stattdessen die Nummer 2 in die Datei ein.
echo 2 | sudo tee /etc/pure-ftpd/conf/TLS
Jetzt haben wir TLS erzwungen, wir müssen ein gültiges TLS-Zertifikat erhalten. Ein selbstsigniertes Zertifikat wird nicht empfohlen, da den Benutzern eine Warnmeldung wie im folgenden Screenshot angezeigt wird.
Schritt 3:Erhalten Sie ein vertrauenswürdiges TLS-Zertifikat von Let’s Encrypt
Führen Sie den folgenden Befehl aus, um den Let’s Encrypt-Client (certbot) aus dem standardmäßigen Debian 10-Repository zu installieren.
sudo apt install certbot
Ich empfehle die Verwendung des standalone
oder webroot
Plugin, um ein TLS-Zertifikat für Pure-FTPd zu erhalten.
Eigenständiges Plugin
Wenn auf Ihrem Debian 10-Server kein Webserver läuft, können Sie das eigenständige Plugin verwenden. Führen Sie den folgenden Befehl aus. Vergessen Sie nicht, einen DNS-A-Eintrag für Ihre Subdomain einzurichten.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com
Wo:
certonly
:Erhalten Sie ein Zertifikat, aber installieren Sie es nicht.--standalone
:Verwenden Sie das eigenständige Plugin, um ein Zertifikat zu erhalten--preferred-challenges http
:Führen Sie eine http-01-Abfrage durch, um unsere Domäne zu validieren, die Port 80 verwendet.--agree-tos
:Stimmen Sie den Nutzungsbedingungen von Let’s Encrypt zu.--email
:Die E-Mail-Adresse wird für die Kontoregistrierung und -wiederherstellung verwendet.-d
:Geben Sie Ihren Domänennamen an.
Wie Sie dem folgenden Screenshot entnehmen können, habe ich das Zertifikat erfolgreich erhalten.
Verwendung des Webroot-Plugins
Wenn Ihr Debian 10-Server über einen Webserver verfügt, ist es eine gute Idee, das Webroot-Plugin zu verwenden, um ein Zertifikat zu erhalten, da das Webroot-Plugin mit so ziemlich jedem Webserver funktioniert und wir das Zertifikat nicht auf dem Webserver installieren müssen.
Zuerst müssen Sie einen virtuellen Host für ftp.example.com
erstellen .
Apache
Wenn Sie Apache verwenden, dann
sudo nano /etc/apache2/sites-available/ftp.example.com.conf
Und fügen Sie die folgenden Zeilen in die Datei ein.
<VirtualHost *:80> ServerName ftp.example.com DocumentRoot /var/www/Pure-FTPd </VirtualHost>
Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.
sudo mkdir /var/www/Pure-FTPd
Legen Sie www-data (Apache-Benutzer) als Eigentümer des Webstammverzeichnisses fest.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Aktivieren Sie diesen virtuellen Host.
sudo a2ensite ftp.example.com
Laden Sie Apache neu, damit die Änderungen wirksam werden.
sudo systemctl reload apache2
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Webroot-Plugin zu erhalten.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Nginx
Wenn Sie Nginx verwenden, dann
sudo nano /etc/nginx/conf.d/ftp.example.com.conf
Fügen Sie die folgenden Zeilen in die Datei ein.
server { listen 80; listen [::]:80; server_name ftp.example.com; root /var/www/Pure-FTPd/; location ~ /.well-known/acme-challenge { allow all; } }
Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.
sudo mkdir -p /var/www/Pure-FTPd
Legen Sie www-data (Nginx-Benutzer) als Eigentümer des Webstamms fest.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Laden Sie Nginx neu, damit die Änderungen wirksam werden.
sudo systemctl reload nginx
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Webroot-Plugin zu erhalten.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Schritt 4:Zertifikat installieren
Pure-FTPd erfordert, dass das Zertifikat und der private Schlüssel in einer Datei mit dem Namen pure-ftpd.pem
kombiniert werden und gespeichert unter /etc/ssl/private/
Verzeichnis.
Wechseln Sie zu /etc/letsencrypt/live/ftp.example.com/
Verzeichnis.
sudo su - cd /etc/letsencrypt/live/ftp.example.com/
Sie können cat
verwenden Befehl, um zwei Dateien wie unten zu einer zu kombinieren.
cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem
Stellen Sie sicher, dass nur der Root-Benutzer die Datei lesen kann.
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
Wir müssen den Diffie-Hellman-Parameter generieren mit:
sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096
Wenn Ihr Server einen einzelnen CPU-Kern hat, wird dies lange dauern (ca. 10 Minuten).
Sobald dies erledigt ist, starten Sie Pure-FTPd neu.
sudo systemctl restart pure-ftpd
Überprüfen Sie den Status, um festzustellen, ob es ausgeführt wird.
systemctl status pure-ftpd
Jetzt können Sie sich über TLS mit Ihrem FTP-Server verbinden.
Schritt 5:FTP-Ports in der Firewall öffnen
Wenn Sie die UFW-Firewall verwenden, führen Sie den folgenden Befehl aus, um die TCP-Ports 20 und 21 zu öffnen.
sudo ufw allow 20,21/tcp
Schritt 6:Mit FTP-Server verbinden
Wenn Sie Nautilus verwenden Dateimanager zum Herstellen einer Verbindung zum FTP-Server über einfachen Text ftp://
Protokoll
Die Verbindung wird abgelehnt.
Statt ftp://
, müssen Sie ftps://
verwenden .
Standardmäßig werden FTP-Benutzer zu /
geleitet Stammverzeichnis auf dem Server.
Bitte beachten Sie, dass Filezilla vertraut standardmäßig keinem Zertifikat (selbstsigniert oder CA-signiert). Benutzer müssen sich entscheiden, dem Zertifikat selbst zu vertrauen.
Warnung vor unbekanntem FileZilla-Zertifikat
Und Sie müssen das explizite FTP-TLS-Protokoll verwenden (ftpes://ftp.example.com
) in Filezilla.
Automatische Verlängerung des TLS-Zertifikats
Sie können einen Cron-Job erstellen, um das TLS-Zertifikat automatisch zu erneuern. Öffnen Sie einfach die Crontab-Datei des Root-Benutzers.
sudo crontab -e
Fügen Sie am Ende der Datei die folgende Zeile hinzu.
@daily certbot renew --quiet && cd /etc/letsencrypt/live/ftp.example.com/ && cat fullchain.pem privkey.pem | tee /etc/ssl/private/pure-ftpd.pem && systemctl reload pure-ftpd
pure-ftpd
muss neu geladen werden damit es das neue Zertifikat und den privaten Schlüssel abholt.