Debian ProFTP: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 74: | Zeile 74: | ||
==Optional: FTP mit SSL/TLS Verschlüsselung== | ==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 | 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: | Voraussetzung: | ||
Zeile 85: | Zeile 85: | ||
Die Zeile auskommentieren (#-Zeichen am Zeilenanfang entfernen) | Die Zeile auskommentieren (#-Zeichen am Zeilenanfang entfernen) | ||
Include /etc/proftpd/tls.conf | 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: | 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 | #External Virtual SSL-FTP-Server | ||
<VirtualHost '''''IP_des_SERVER'''''> | <VirtualHost '''''IP_des_SERVER'''''> | ||
ServerName "Private FTP server" | ServerName "Private FTP server" | ||
Port | Port 2021 | ||
MasqueradeAddress '''''dyndomain.org''''' | |||
IdentLookups off | IdentLookups off | ||
Umask 027 | Umask 027 | ||
Zeile 118: | Zeile 117: | ||
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: | 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 | TLSRequired on | ||
'''InetD konfigurieren:''' | |||
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 | |||
'''Portfreigabe im Router''' | |||
Im DSL-Router Port 21 auf den Port 2021 des FTP-Servers weiterleiten | |||
Version vom 10. Juli 2011, 12:39 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.
Konfigurtion
Der FTP-Server ist bereits relativ gut vorkonfiguriert, so dass nur kleinere Anpassungen nötig sind:
vi /etc/proftpd/proftpd.conf
Folgenden Ä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 60049
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:
- Webbrowser öffnen
- Adresse eingeben: ftp://ftpuser:FTP_PWD@IP_Des_Server
- Es sollte kein Fehler gemeldet werden und der Verzeichnisinhalt sollte zu sehen sein
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.
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" Port 2021 MasqueradeAddress dyndomain.org IdentLookups off Umask 027 AllowOverwrite on DefaultRoot ~ PassivePorts 60019 60049 RequireValidShell off DefaultRoot ~ RootLogin off TLSEngine on TLSRSACertificateFile /etc/ssl/CA/certs/server-cert.pem TLSRSACertificateKeyFile /etc/ssl/CA/key/server-key.pem </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:
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
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
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.