Debian ProFTP: Unterschied zwischen den Versionen

Aus Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 5: Zeile 5:
==Installation==
==Installation==
  apt-get update
  apt-get update
  apt-get install adduser proftpd
  apt-get install adduser proftpd inetutils-inetd
Nach dem Download startet ein Script, das nachfrägt, ob proFTPd '''''from inetd''''' oder '''''standalone''''' laufen soll. Bei niedrigem FTP-Aufkommen sollte '''''from inetd''''' gewählt werden, da der Server dann nur bei Bedarf gestartet wird und nicht permanent Ressourcen verbraucht.
Nach dem Download startet ein Script, das nachfrägt, ob proFTPd '''''from inetd''''' oder '''''standalone''''' laufen soll. Bei niedrigem FTP-Aufkommen sollte '''''from inetd''''' gewählt werden, da der Server dann nur bei Bedarf gestartet wird und nicht permanent Ressourcen verbraucht.


==Konfigurtion==
==Konfiguration==
Der FTP-Server ist bereits relativ gut vorkonfiguriert, so dass nur kleinere Anpassungen nötig sind:
Der FTP-Server ist bereits relativ gut vorkonfiguriert, so dass nur kleinere Anpassungen nötig sind:
  vi /etc/proftpd/proftpd.conf
  vi /etc/proftpd/proftpd.conf
Folgenden Änderungen durchführen:
Folgende Änderungen durchführen:
 
Standardmäßig gibt ProFTP vor dem Login eine Wilkommensnachricht in der Form "ProFTPD 1.3.1 Server ..." aus. Damit weiß ein potentieller Angreifer, dass es sich beim FTP-Server um einen ProFTP und sogar die Versionsnummer. Dies kann einen evtl. Angriffsversuch erleichtern. Die Meldung kann angepasst werden z.B. mittels (Zeile einfügen):
Serverident        on "'''''FTP-Server ready'''''"
Damit wird nur noch "'''''FTP-Server ready'''''" ausgegeben, bevor sich ein User anmelden kann.


Damit Proftpd erst seine Welcome-Meldung ausgibt, nachdem der User sein Passwort eingegeben hat, folgende Option '''on''' setzen
DeferWelcome      on
Definition der für passives FTP benutzten Ports:
Definition der für passives FTP benutzten Ports:
  PassivePorts      60019 60049
  PassivePorts      60019 60149
Damit sich angemeldete User nur in Ihrem zugewiesenen home-Verzeichnis bewegen können folgende option auskommentieren (#-Zeichen am Anfang der Zeile entfernen):
Damit sich angemeldete User nur in Ihrem zugewiesenen home-Verzeichnis bewegen können folgende Option auskommentieren (#-Zeichen am Anfang der Zeile entfernen):
  DefaultRoot        ~
  DefaultRoot        ~
Damit sich User einloggen können, die keine Login-Shell haben, folgende Option auskommentieren:
Damit sich User einloggen können, die keine Login-Shell haben, folgende Option auskommentieren:
Zeile 37: Zeile 39:
  addgroup ftpusers
  addgroup ftpusers


Im folgenden werden die beiden Möglichkeiten beschrieben am Beispiel des users ftpuser (bei Bedarf '''''ftpuser''''' und '''''/home/ftpuser''''' anpassen. Das /home/ - Verzeichnis eines Users sollte üblicherweise identisch mit dem Usernamen sein):
Im folgenden werden die beiden Möglichkeiten beschrieben am Beispiel des users ftpuser (bei Bedarf '''''ftpuser''''' anpassen. Das /home/ - Verzeichnis eines Users sollte üblicherweise identisch mit dem Usernamen sein):
 


'''Loginberechtigter User:'''
'''Loginberechtigter User:'''
  adduser --home '''''/home/ftpuser''''' --shell /bin/bash --ingroup ftpusers '''''ftpuser'''''
  adduser --shell /bin/bash --ingroup ftpusers '''''ftpuser'''''
Der adduser Befehl stellt einige Fragen zum neuen User (z.B. Name, Raumnummer, ...) inclusive Passwort.


'''Nicht loginberechtigter User'''
'''Nicht loginberechtigter User'''
  adduser --home '''''/home/ftpuser''''' --shell /bin/false --ingroup ftpusers --disabled-login '''''ftpuser'''''
  adduser --shell /bin/false --ingroup ftpusers --disabled-login '''''ftpuser'''''
 
Der adduser Befehl stellt ebenfalls einige Fragen, es wird aber kein Passwort eingerichtet, da ein nicht login berechtigter User normalerweise keines benötigt. Damit sich der neue User per FTP anmelden darf, muß noch ein Passwort angelegt werden:
Die beiden Befehle fragen einige Details (z.B. Passwort) zum neuen User ab.
passwd '''''ftpuser'''''
 


'''Bereits vorhandene User (z.B. user_old der Gruppe ftpusers zufügen:'''
'''Bereits vorhandene User (z.B. user_old der Gruppe ftpusers zufügen:'''
Zeile 67: Zeile 70:


==Optional: FTP-Server aus dem Internet erreichbar==
==Optional: FTP-Server aus dem Internet erreichbar==
Um den FTP-Server aus dem Internet erreichbar zu machen, muß der Port 21 und die Passive-Ports 60019...60049 im DSL-Router an die IP-Adresse des Servers weitergeleitet werden.
Um den FTP-Server aus dem Internet erreichbar zu machen, muß der Port 21 und die Passive-Ports 60019...60149 im DSL-Router an die IP-Adresse des Servers weitergeleitet werden.
Zusätzlich ist eine kleine Anpassung an der Konfiguration erforderlich:
 
 
==Optional: FTP mit SSL/TLS Verschlüsselung==
Da bei FTP das Passwort und die Daten unverschlüsselt übertragen werden, empfiehlt es sich, die Übertragung mittels SSL/TLS zu verschlüsseln. Damit sowohl unverschlüsselte als auch TLS/SSL verschlüsselte Verbindungen aus dem lokalen Netz als auch aus dem Internet möglich sind, ist ein sog. Virtualhost erforderlich, der die Anfragen aus dem Internet handhabt.
 
Voraussetzung:
OpenSSL
 
 
===ProFTP Konfigurieren===
'''TLS aktivieren:'''
  vi /etc/proftpd/proftpd.conf
  vi /etc/proftpd/proftpd.conf
Den Eintrag '''''MasqueradeAddress''' auf die Dyndns-Adresse z.B. '''Domain.org''' setzen:
Die Zeile auskommentieren (#-Zeichen am Zeilenanfang entfernen)
  MasqueradeAddress  '''Domain.org'''
Include /etc/proftpd/tls.conf
Ans Ende folgende Zeilen anfügen und den Eintrag '''''IP_des_SERVER''''' mit der IP und '''''dyndomain.org''''' mit der eigenen Domain ersetzen:
#External Virtual SSL-FTP-Server
<VirtualHost '''''IP_des_SERVER'''''>
  ServerName                      "Private FTP server"
  Serverident                    on "FTP-Server ready"
  Port                            2021
  MasqueradeAddress               '''''dyndomain.org'''''
  IdentLookups                    off
  Umask                          027
  AllowOverwrite                  on
  DefaultRoot                    ~
  PassivePorts                    60019 60149
  RequireValidShell              off
  DefaultRoot                    ~
  RootLogin                      off
  TLSEngine                      on
  TLSRSACertificateFile          /etc/ssl/CA/certs/server-cert.pem
  TLSRSACertificateKeyFile        /etc/ssl/CA/key/server-key.pem
  TLSOptions                      NoSessionReuseRequired
</VirtualHost>
 
 
'''TLS konfigurieren:'''
vi /etc/proftpd/tls.conf
Folgende Änderungen durchführen (evtl. Kommentarzeichen # am Zeilenanfang entfernen):
TLSEngine                              on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                            SSLv23
TLSRSACertificateFile                  /etc/ssl/CA/certs/server-cert.pem
TLSRSACertificateKeyFile                /etc/ssl/CA/key/server-key.pem
TLSCACertificateFile                    /etc/ssl/CA/cacert.pem
TLSOptions                              NoSessionReuseRequired
Mit Hilfe obiger Einstellungen ist der FTP-Server verschlüsselt und unverschlüsselt erreichbar. Es kann FTPS erzwungen werden (keine unverschlüsselte Verbindung mehr möglich), indem die folgende Option zusätzlich gesetzt wird:
TLSRequired                            on
 
 
'''InetD konfigurieren:'''
 
vi /etc/inetd.conf
 
Nach der Zeile
ftp    stream  tcp    nowait  root    /usr/sbin/tcpd /usr/sbin/proftpd
Folgende Zeile einfügen:
2021    stream  tcp    nowait  root    /usr/sbin/tcpd /usr/sbin/proftpd
InetD neu starten:
/etc/init.d/inetutils-inetd restart
 
 
'''Portfreigabe im Router'''
Im DSL-Router Port 21 auf den Port 2021 des FTP-Servers weiterleiten
 
===Client konfigurieren===
 
Damit der FTP-Client SSL/TLS Verschlüsselung verwendet, muss dieser dafür konfiguriert werden. Die Einstellungen hängen vom Client ab. Z.B. für Filezilla, das für Windows und Linux frei verfügbar ist (Servermanager):
Servertyp: FTPES - FTP über explizites TLS/SSL
 
{{Hinweis|
Manche FTP-Clients (z.B. Filezilla) bieten auch die Möglichkeit '''FTPS - implizites TLS/SSL''' zu verwenden. Dies unterstützt ProFTP in obiger Konfiguration nicht. Auch die evtl. vorhandene Option SFTP zu verwenden ist nicht mit ProFTP kompatibel. Dafür ist ein SSH-Server erforderlich.
}}
 
 
===Funktionstest===
'''lokale Verbindung:'''
 
'''''IP_des_SERVER''''' im FTP-Client eingeben
Passive Verbindung
 
Nach Herstellung der Verbindung sollte im FTP-Programm eine Ausgabe in folgender Form erscheinen:
Befehl: PASV
Antwort: 227 Entering Passive Mode (192,168,178,100,234,118).
* Der Server teilt dem Client mit, dass dieser mit dem Server via IP 192.168.178.100 auf Port 234*256+118=60022 kommunizieren soll
* lokale Verbindung OK, wenn die angegebene IP-Adresse der lokalen Adresse des FTP-Servers entspricht
 
 
'''Verbindung via Internet:'''
 
  '''''dyndomain.org''''' im FTP-Client eingeben
Passive Verbindung
 
Nach Herstellung der Verbindung sollte im FTP-Programm eine Ausgabe in folgender Form erscheinen:
Befehl: PASV
Antwort: 227 Entering Passive Mode (93,212,141,123,234,128)
* Der Server teilt dem Client mit, dass dieser mit dem Server via IP 93.212.141.123 auf Port 234*256+128=60032 kommunizieren soll
* Verbindung via Internet OK, wenn die angegebene IP der externen IP-Adresse (DSL-Anschluss)entspricht
 
Wenn User und Passwort korrekt angegeben wurden, sollte in beiden Fällen eine FTP-Verbindung aufgebaut werden.

Aktuelle Version vom 21. August 2013, 17:41 Uhr

Allgemein

proFTPd (http://www.proftpd.org) ist ein sicherer und "full-featured" FTP-Server.


Installation

apt-get update
apt-get install adduser proftpd inetutils-inetd

Nach dem Download startet ein Script, das nachfrägt, ob proFTPd from inetd oder standalone laufen soll. Bei niedrigem FTP-Aufkommen sollte from inetd gewählt werden, da der Server dann nur bei Bedarf gestartet wird und nicht permanent Ressourcen verbraucht.

Konfiguration

Der FTP-Server ist bereits relativ gut vorkonfiguriert, so dass nur kleinere Anpassungen nötig sind:

vi /etc/proftpd/proftpd.conf

Folgende Änderungen durchführen:

Standardmäßig gibt ProFTP vor dem Login eine Wilkommensnachricht in der Form "ProFTPD 1.3.1 Server ..." aus. Damit weiß ein potentieller Angreifer, dass es sich beim FTP-Server um einen ProFTP und sogar die Versionsnummer. Dies kann einen evtl. Angriffsversuch erleichtern. Die Meldung kann angepasst werden z.B. mittels (Zeile einfügen):

Serverident        on "FTP-Server ready"

Damit wird nur noch "FTP-Server ready" ausgegeben, bevor sich ein User anmelden kann.

Definition der für passives FTP benutzten Ports:

PassivePorts       60019 60149

Damit sich angemeldete User nur in Ihrem zugewiesenen home-Verzeichnis bewegen können folgende Option auskommentieren (#-Zeichen am Anfang der Zeile entfernen):

DefaultRoot        ~

Damit sich User einloggen können, die keine Login-Shell haben, folgende Option auskommentieren:

RequireValidShell  off

Der User root sollte aus Sicherheitsgründen nicht loginberechtigt sein. Deshalb folgende Option ergänzen (nach dem Eintrag DefaultRoot):

RootLogin          off

Nur die User, die der Gruppe ftpusers (siehe nächster Abschnitt) angehören, sollen berechtigt werden, sich per ftp anzumelden. Folgende Zeilen unmittelbar vor dem ersten <IfModule ...> - Eintrag einfügen:

# Login nur von Mitgliedern der Gruppe ftpuser erlauben
<Limit LOGIN>
  DenyGroup !ftpusers
</Limit>


User anlegen

Alle User, die sich per ftp anmelden können sollen, müssen der Gruppe ftpusers angehören (siehe vorhergehendes Kapitel). Neue angelegte User können direkt dieser Grppe zugeordnet werden bzw. bereits bestehende dieser zugefügt werden.

Es ist möglich, für ftp spezielle User anzulegen, die sich nur via ftp anmelden können, nicht aber an einer shell (z.B. via putty) (siehe nicht loginberechtiger User). Alle User, die sich nicht per Shell anmelden können sollen, sollten als nicht loginberechtigte User angelegt werden.

addgroup ftpusers

Im folgenden werden die beiden Möglichkeiten beschrieben am Beispiel des users ftpuser (bei Bedarf ftpuser anpassen. Das /home/ - Verzeichnis eines Users sollte üblicherweise identisch mit dem Usernamen sein):


Loginberechtigter User:

adduser --shell /bin/bash --ingroup ftpusers ftpuser

Der adduser Befehl stellt einige Fragen zum neuen User (z.B. Name, Raumnummer, ...) inclusive Passwort.

Nicht loginberechtigter User

adduser --shell /bin/false --ingroup ftpusers --disabled-login ftpuser

Der adduser Befehl stellt ebenfalls einige Fragen, es wird aber kein Passwort eingerichtet, da ein nicht login berechtigter User normalerweise keines benötigt. Damit sich der neue User per FTP anmelden darf, muß noch ein Passwort angelegt werden:

passwd ftpuser

Bereits vorhandene User (z.B. user_old der Gruppe ftpusers zufügen:

adduser user_old ftpusers


Funktionstest

  • Mittels FTP-Programm:
    • FTP-Programm öffnen
    • Server-Adresse: IP_Des_Server
    • User: ftpuser
    • Passwort: FTP_PWD
    • Verbindung herstellen
    • Es sollte kein Fehler gemeldet werden und der Verzeichnisinhalt sollte zu sehen sein
  • Mittels Webbrowser:


Optional: FTP-Server aus dem Internet erreichbar

Um den FTP-Server aus dem Internet erreichbar zu machen, muß der Port 21 und die Passive-Ports 60019...60149 im DSL-Router an die IP-Adresse des Servers weitergeleitet werden.


Optional: FTP mit SSL/TLS Verschlüsselung

Da bei FTP das Passwort und die Daten unverschlüsselt übertragen werden, empfiehlt es sich, die Übertragung mittels SSL/TLS zu verschlüsseln. Damit sowohl unverschlüsselte als auch TLS/SSL verschlüsselte Verbindungen aus dem lokalen Netz als auch aus dem Internet möglich sind, ist ein sog. Virtualhost erforderlich, der die Anfragen aus dem Internet handhabt.

Voraussetzung: OpenSSL


ProFTP Konfigurieren

TLS aktivieren:

vi /etc/proftpd/proftpd.conf

Die Zeile auskommentieren (#-Zeichen am Zeilenanfang entfernen)

Include /etc/proftpd/tls.conf

Ans Ende folgende Zeilen anfügen und den Eintrag IP_des_SERVER mit der IP und dyndomain.org mit der eigenen Domain ersetzen:

#External Virtual SSL-FTP-Server
<VirtualHost IP_des_SERVER>
  ServerName                      "Private FTP server"
  Serverident                     on "FTP-Server ready"
  Port                            2021
  MasqueradeAddress               dyndomain.org
  IdentLookups                    off
  Umask                           027
  AllowOverwrite                  on
  DefaultRoot                     ~
  PassivePorts                    60019 60149
  RequireValidShell               off
  DefaultRoot                     ~
  RootLogin                       off
  TLSEngine                       on
  TLSRSACertificateFile           /etc/ssl/CA/certs/server-cert.pem
  TLSRSACertificateKeyFile        /etc/ssl/CA/key/server-key.pem
  TLSOptions                      NoSessionReuseRequired
</VirtualHost>


TLS konfigurieren:

vi /etc/proftpd/tls.conf

Folgende Änderungen durchführen (evtl. Kommentarzeichen # am Zeilenanfang entfernen):

TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23
TLSRSACertificateFile                   /etc/ssl/CA/certs/server-cert.pem
TLSRSACertificateKeyFile                /etc/ssl/CA/key/server-key.pem
TLSCACertificateFile                    /etc/ssl/CA/cacert.pem
TLSOptions                              NoSessionReuseRequired

Mit Hilfe obiger Einstellungen ist der FTP-Server verschlüsselt und unverschlüsselt erreichbar. Es kann FTPS erzwungen werden (keine unverschlüsselte Verbindung mehr möglich), indem die folgende Option zusätzlich gesetzt wird:

TLSRequired                             on


InetD konfigurieren:

vi /etc/inetd.conf

Nach der Zeile

ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/proftpd

Folgende Zeile einfügen:

2021    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/proftpd

InetD neu starten:

/etc/init.d/inetutils-inetd restart


Portfreigabe im Router Im DSL-Router Port 21 auf den Port 2021 des FTP-Servers weiterleiten

Client konfigurieren

Damit der FTP-Client SSL/TLS Verschlüsselung verwendet, muss dieser dafür konfiguriert werden. Die Einstellungen hängen vom Client ab. Z.B. für Filezilla, das für Windows und Linux frei verfügbar ist (Servermanager):

Servertyp: FTPES - FTP über explizites TLS/SSL
Bulbgraph.png Hinweis:

Manche FTP-Clients (z.B. Filezilla) bieten auch die Möglichkeit FTPS - implizites TLS/SSL zu verwenden. Dies unterstützt ProFTP in obiger Konfiguration nicht. Auch die evtl. vorhandene Option SFTP zu verwenden ist nicht mit ProFTP kompatibel. Dafür ist ein SSH-Server erforderlich.


Funktionstest

lokale Verbindung:

IP_des_SERVER im FTP-Client eingeben
Passive Verbindung

Nach Herstellung der Verbindung sollte im FTP-Programm eine Ausgabe in folgender Form erscheinen:

Befehl:	PASV
Antwort:	227 Entering Passive Mode (192,168,178,100,234,118).
  • Der Server teilt dem Client mit, dass dieser mit dem Server via IP 192.168.178.100 auf Port 234*256+118=60022 kommunizieren soll
  • lokale Verbindung OK, wenn die angegebene IP-Adresse der lokalen Adresse des FTP-Servers entspricht


Verbindung via Internet:

dyndomain.org im FTP-Client eingeben
Passive Verbindung

Nach Herstellung der Verbindung sollte im FTP-Programm eine Ausgabe in folgender Form erscheinen:

Befehl:	PASV
Antwort:	227 Entering Passive Mode (93,212,141,123,234,128)
  • Der Server teilt dem Client mit, dass dieser mit dem Server via IP 93.212.141.123 auf Port 234*256+128=60032 kommunizieren soll
  • Verbindung via Internet OK, wenn die angegebene IP der externen IP-Adresse (DSL-Anschluss)entspricht

Wenn User und Passwort korrekt angegeben wurden, sollte in beiden Fällen eine FTP-Verbindung aufgebaut werden.