FTP Zugang zu Webserver absichern: FTPS auf Debian Server aktivieren

Wie der ein oder andere vielleicht schon in meinem Google+ Post gelesen hat, ging es gestern beim WP Meetup Potsdam um das Thema Sicherheit. Eines meiner wichtigsten Anliegen war hierbei, ein verschlüsselter Zugang per FTP, damit das Passwort nicht einfach abgefangen werden und somit der Server infiziert werden kann.

Konfigurieren des FTPS Zugangs

Zuerst einmal muss man die grundlegende Konfiguration für den Zugang für FTPS erstellen. Die meisten FTP Server sind nämlich nicht ab Werk darauf ausgelegt, auch per SSL verschlüsselte Verbindungen zu akzeptieren. Ich zeige die Einrichtung hier Beispielhaft an meinem Server „Debian GNU/Linux 6.0.9 (squeeze)“ und dem FTP-Server „ProFTPD Version 1.3.3a“, der darauf verwendet wird. Bei euch können sich einige Details unterscheiden, aber grundsätzlich wird es sehr ähnlich ablaufen.

Zuerst einmal müsste ihr die TLS Konfigurationsdatei für den ProFTPD Server anpassen. Dazu öffnet ihr diese einfach per Konsole z.B. im Vim:

vi /etc/proftpd/tls.conf

Darin findet ihr schon fast die gesamte fertige Konfiguration, die aber komplett auskommentiert ist. Ihr müsste also bei so gut wie jeder Zeile mit einem Kommentarsymbol (#) vor dem Befehl, die Teile einkommentieren. Bei meiner Konfiguration wurden nur die beiden Zeilen mit den TLSOptions nicht einkommentiert. Meine Konfiguiration sieht nun also ohne Kommentare wie folgt aus:

<IfModule mod_tls.c>
	TLSEngine                   on
	TLSLog                      /var/log/proftpd/tls.log
	TLSProtocol                 SSLv23
	TLSRSACertificateFile       /etc/ssl/certs/proftpd.crt
	TLSRSACertificateKeyFile    /etc/ssl/private/proftpd.key
	TLSCACertificateFile        /etc/ssl/certs/CA.pem
	TLSVerifyClient             off
	TLSRequired                 on
	TLSRenegotiate              required off
</IfModule>

Wofür die einzelnen Zeilen stehen, wird jeweils in den Kommentaren darüber erklärt. Dies hier zeigt wie gesagt die Basiskonfiguration, wie sie von Debian vorgegeben ist. Im Kommentar von Simon findet ihr noch ein paar Ergänzungen, die die Verbindung noch etwas mehr absichern. Wenn ihr euch also an etwas mehr als das bloße Einkommentieren heran wagt, dann passt die Konfiguration am besten an.

Zertifikat für den SSL Zugang erstellen

Damit ihr per SSL eine FTP-Verbindung aufbauen könnt, muss ein Zertifikat erstellt werden. Eine Anleitung dazu findet ihr auch in der Konfigurationsdatei. Der Befehl dazu lautet wie folgt:

openssl req -x509 -newkey rsa:4096 \
          -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
          -nodes -days 365

Hiermit erstellt ihr euch ein selbstsigniertes Zertifikat, das den RSA-Verschlüsselungsalgorithmus verwendet und ein Jahr gültig ist. Diese Datei sollte zusätzlich so eingeschränkt werden, das nur der Administrator diese lesen kann. Das macht ihr mit diesem Befehl:

chmod 0600 /etc/ssl/private/proftpd.key

FTPS Konfiguration einbinden

Damit die Konfiguration auch aktiv wird, muss die tls.conf Datei auch in die ProFTPD Konfiguration importiert werden. Dazu öffnet ihr die allgemeine Konfigurationsdatei von ProFTPD:

vi /etc/proftpd/proftpd.conf

Bei meiner Konfiguration musste ich dann in Zeile 128 den Include Befehl einkommentieren, damit die Datei eingebunden wurde. Es sollte bei euch auch wie folgt aussehen:

#
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf

Jetzt habt ihr die Konfiguration schon vollständig abgeschlossen und es kann schon fast losgehen. Aber ein wichtiger Schritt fehlt natürlich noch.

FTP-Dienst neustarten

Als letztes müsst ihr nur noch einmal den ProFTPD Dienst neustarten:

/etc/init.d/proftpd restart

Auf meinem Server gab es dabei einen Fehler, denn eine Datei wurde nicht gefunden und der FTP-Server hat daher den Start verweigert:

Stopping ftp server: proftpd.
Starting ftp server: proftpd - Fatal: TLSCACertificateFile: '/etc/ssl/certs/CA.pem' does not exist on line 31 of '/etc/proftpd/tls.conf'
 failed!

Der Fehler lag darin, dass bei mir die Datei /etc/ssl/certs/CA.pem nicht vorhanden war. Sie hieß stattdessen /etc/ssl/certs/ca.pem und da UNIX-Systeme zwischen Groß- und Kleinschreibung unterscheiden, fand das System die Datei nicht. Ich habe daher in der Datei /etc/proftpd/tls.conf in Zeile 31 (bzw. Zeile 7 in dem verkürzten Auszug) den Dateinamen korrigiert (klein geschrieben) und anschließend konnte ich den FTP-Dienst ohne weitere Fehlermeldung neu starten.

FTPS-Zugang testen

Wurde der Dienst erfolgreich neu gestartet, könnt ihr den neuen Zugang auch gleich mal mit einem FTP-Programm testen. Solltet ihr zuvor schon den unverschlüsselten Zugang mit normalen FTP eingerichtet haben, dann versucht mal, euch damit anzumelden. Es sollte mit einer Fehlermeldung abgebrochen werden, in der ihr darauf hingewiesen werdet, dass ihr euch über SSL/TLS verbinden müsst. Stellt also einfach den Zugang auf FTPS um und testet es erneut. Der Nutzername und das Passwort bleiben unverändert.

Fazit

Wie ihr also seht ist es gar nicht so aufwändig, den Zugang per FTPS zu aktivieren. Ihr solltet das am besten noch heute machen, wenn ihr es nicht ohnehin schon tut. Da ihr die ganze Zeit zuvor das Passwort immer unverschlüsselt übertragen habt, wäre es auch empfehlenswert, wenn ihr bei der Gelegenheit gleich mal euer FTP-Passwort ändert. Ihr könnt euch ja einfach mit einem Passwort-Generator ein schönes erstellen lassen.

Ich hoffe, dass ihr euren FTP-Server ab sofort nur noch verschlüsselt nutzt. Und sollte es dennoch zu spät sein und ihr müsst infizierte Dateien reparieren, dann seht euch einfach das Skript aus dem Google+ Artikel an, das ich am Anfang des Artikels verlinkt habe.

Bonus Tipp

Jetzt habe ich euch so schön erklärt, wie man mit FTPS seinen FTP-Zugang verschlüsselt und somit absichern kann. Aber eigentlich würde ich euch etwas ganz anderes raten: Nutzt am besten gleich SFTP, sofern das bei euch verfügbar ist. Dabei stellt ihr nämlich eine Verbindung über das sehr sichere Secure Shell Protokoll (SSH) her. Das ist noch einmal eine ganze Ecke sicherer, gerade dann, wenn ihr es mit der Public-Key-Authentifizierung und einem Passphrase nutzt. Denn dann muss der Angreifer nicht nur Benutzernamen und Passwort (bzw. Passphrase) ausspionieren, sondern er muss auch in den Besitzt eures Private Keys kommen.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

10 Kommentare » Schreibe einen Kommentar

  1. Hallo Bernhard,

    da man es bei G+ schlecht lesen kann, hier nochmal die empfohlenen Konfigurationsänderungen der tls.conf:

    TLSProtocol     TLSv1.2
    TLSCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM"
    TLSDHParamFile <name eines generierten dhfiles>
    TLSServerCipherPreference on [erst ab 1.3.5rc1 verfügbar]
    

    Eine ausführliche Doku gibt es hier: http://www.proftpd.org/docs/contrib/mod_tls.html

    • Da es gerade aufkam:

      Als kleine Anmerkung sei noch gesagt, dass für TLS 1.2 und TLS 1.1 mindestens OpenSSL Version 1.0.1 installiert sein sollte. Debian 6 z.B. bietet das leider noch nicht, sondern verwendet noch eine OpenSSl 0.98. In diesem Fall sollte die Einschränkung auf TLSv1 eingerichtet werden. Leider bedingt dies auch eine Abschwächung der zu nutzenden Ciphers, da z.b. GCM noch kein Teil von TLS1.0 ist.

      Eine genaue Auflistung der möglichen Ciphers habe ich nicht parat, in dem Fall sollte aber folgendes funktionieren:

      TLSCipherSuite "HIGH:!MEDIUM:!LOW:!RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM"
      

      Sollte es dann noch Probleme mit einigen Clients geben muss man im schlimmsten Fall RC4 wieder aktivieren. Dies gilt aber inzwischen als gebrochen wird aber im Browserbereich von älteren IE Versionen noch genutzt.

      • Vielen Dank für deine Anmerkungen!

        Ich habe es bei mir jetzt so abgeändert, dass ich statt SSL den TLSv1 verwende. Läuft genauso gut wie zuvor. Also, einfach mal ausprobieren!

  2. Es hat sich leider eine Dopplung (MEDIUM und LOW) in meiner CipherSuite eingeschlichen. Kommt davon, wenn man zwei Ciphers zusammenkopiert und selbst noch was ändert. Richtig sieht es so aus:

    TLSCipherSuite "HIGH !MEDIUM !LOW !RC4 !aNULL !eNULL !3DES !MD5 !EXP !PSK !SRP !DSS"
    

    Der Parameter oben wird trotzdem funktionieren, so sieht es aber schöner aus. 🙂

  3. Schöner Artikel!

    Meine bisherigen Versuche einen testweise augesetzten FTP-Server sicherer zu machen, hatten immer zur Folge, dass die Benutzer nur noch mit entsprechenden FTP-Clients auf die Daten zugreifen konnte, wo vorher einfach der Link im Browser gereicht hat.

    Gibt es für diesen Umstand eine Lösung? Getestet habe ich bislang nur mit FileZilla.

    Viele Grüße
    Thomas

    • Ich weiß nicht ganz, was du mit „wo vorher ein Link im Browser gereicht hat“ meinst. Ich vermute mal, dass damit gemeint ist, dass eine solche per FTP hochgeladene Datei nicht mehr über eine URL aufrufbar war. Ist das soweit richtig?

      Wenn ja, dann hängt es sehr wahrscheinlich mit den Zugriffsrechten auf die Dateien zusammen. Wenn du unterschiedliche Unix User für den FTP-Nutzer und den Webserver verwendest, dann kann das sehr schnell passieren. Aber eigentlich sollte der Webserver immer zumindest Leserechte auf Dateien haben, die über einen FTP-Nutzer hochgeladen wurden.

  4. Hallo, sehr schönes Tutorial!
    Jedoch habe ich das selbe Problem wie du

    Starting ftp server: proftpd2015-10-28 19:11:32,237 vps214360.ovh.net proftpd[1421]: fatal: TLSCACertificateFile: ‚/etc/ssl/certs/ca.pem‘ does not exist on line 31 of ‚/etc/proftpd/tls.con

    Ich habe die datei schon umbenannt leider ohne Erfolg, hast du ein Tipp für mich?

    • Bist du sicher, dass du sie korrekt benannt hast? Ein Unix-System ist ja „case-sensitive“, das heißt, dass die Groß-/Kleinschreibung wichtig ist.

      • Es funktioniert inzwischen, danke! Jedoch komme ich irgendwie jede 3-4 Stunden nicht mehr auf mein Server da steht dann nur noch die Verzeichnisse werden Abgerufen, server läuft dennoch, proftpd auch einwandfrei keine Probleme, Ports sind frei .. Selbst Neuinstallation vom kompletten root hatte ich probiert (Da er sowieso zum privaten Gebrauch momentan ist)
        Kannst du dir erklären wieso ? Wenn ich dann den root server neu starte, komme ich wieder perfekt drauf. Fehlermeldungen gibt es keine.

        • Das kann viel Ursachen haben. Ich bin aber auch kein Unix-Experte und kann dir jetzt auf Anhieb keinen Tipp geben. Da musst du wohl mal den Support oder einschlägige Foren um Hilfe bitten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert