Proftpd - FTP-Verschlüsselung

CryOrDies

Member
Hallo liebe Freunde.
Ich helfe dabei einem Kumpel auf seinem kleinen Home-Server ein FTP-Server einzurichten.

Die Grundlegenden Einstellungen sind selbsterklärend, aber jetzt kommt der Punkt an dem ich nicht 100% bescheid weis "Verschlüsselung"

Da da von außerhalb private Daten übertragen werden sollen, brauchen wir einmal Login- und Datenkanalverschlüsselung.

Ich habe den Anhand von Tutorials jetzt auf Explizites FTP über TLS anfordern eingestellt. Ist es da Login- und Datenkanalverschlüsselung gegeben?
Die Passiven Ports sind in der Firewall auf dem Server freigegeben.
Über Tipps um das ganze zu modifizieren und sicherer zu machen würde ich mich freuen
Verwendet wird Proftpd.

Config:
Code:
#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
# 

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6				off
# If set on you can experience a longer connection delay in many cases.
IdentLookups			off

ServerName			"FTP"
ServerType			standalone
DeferWelcome			off

MultilineRFC2228		on
DefaultServer			on
ShowSymlinks			on

TimeoutNoTransfer		600
TimeoutStalled			600
TimeoutIdle			1200

DisplayLogin                    welcome.msg
DisplayChdir               	.message true
ListOptions                	"-l"

DenyFilter			\*.*/

# Use this to jail all users in their homes 


# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
RequireValidShell		off

# Port 21 is the standard FTP port.
Port				8021

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
PassivePorts                  64550 64555

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress		1.2.3.4

# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances			30

# Set the user and group that the server normally runs at.
#User				proftpd
#Group				nogroup
#UseFtpUsers off
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask				022  022
# Normally, we want files to be overwriteable.
AllowOverwrite			on

# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd		off

# This is required to use both PAM-based authentication and local passwords
AuthOrder			mod_auth_pam.c* mod_auth_unix.c

# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile			off

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

# Logging onto /var/log/lastlog is enabled but set to off by default
UseLastlog on

# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime.  If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or <Anonymous>), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>


# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default. 
<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

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

#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf

# A basic anonymous configuration, no upload directories.

# <Anonymous ~ftp>
#   User				ftp
#   Group				nogroup
#   # We want clients to be able to login with "anonymous" as well as "ftp"
#   UserAlias			anonymous ftp
#   # Cosmetic changes, all files belongs to ftp user
#   DirFakeUser	on ftp
#   DirFakeGroup on ftp
# 
#   RequireValidShell		off
# 
#   # Limit the maximum number of anonymous logins
#   MaxClients			10
# 
#   # We want 'welcome.msg' displayed at login, and '.message' displayed
#   # in each newly chdired directory.
#   DisplayLogin			welcome.msg
#   DisplayChdir		.message
# 
#   # Limit WRITE everywhere in the anonymous chroot
#   <Directory *>
#     <Limit WRITE>
#       DenyAll
#     </Limit>
#   </Directory>
# 
#   # Uncomment this if you're brave.
#   # <Directory incoming>
#   #   # Umask 022 is a good standard umask to prevent new files and dirs
#   #   # (second parm) from being group and world writable.
#   #   Umask				022  022
#   #            <Limit READ WRITE>
#   #            DenyAll
#   #            </Limit>
#   #            <Limit STOR>
#   #            AllowAll
#   #            </Limit>
#   # </Directory>
# 
# </Anonymous>

# Include other custom configuration files
Include /etc/proftpd/conf.d/
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf

TLS.conf:

Code:
#
# Proftpd sample configuration for FTPS connections.
#
# Note that FTPS impose some limitations in NAT traversing.
# See http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
# for more information.
#

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23
#
# Server SSL certificate. You can generate a self-signed certificate using 
# a command like:
#
# openssl req -x509 -newkey rsa:1024 \
#          -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
#          -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key 
# chmod 0640 /etc/ssl/private/proftpd.key
# 
TLSRSACertificateFile                   /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile                /etc/ssl/private/proftpd.key
#
# CA the server trusts...
#TLSCACertificateFile 			 /etc/ssl/certs/ca.pem
# ...or avoid CA cert and be verbose
#TLSOptions                      NoCertRequest EnableDiags 
# ... or the same with relaxed session use for some clients (e.g. FireFtp)
#TLSOptions                      NoSessionReuseRequired
#
#
# Per default drop connection if client tries to start a renegotiate
# This is a fix for CVE-2009-3555 but could break some clients.
#
TLSOptions 							AllowClientRenegotiations
#
# Authenticate clients that want to use FTP over TLS?
#
TLSVerifyClient                         off
#
# Are clients required to use FTP over TLS when talking to this server?
#
TLSRequired                             on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations.  Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
TLSRenegotiate                          required off
</IfModule>
 
TLS.conf:

Code:
#
# Proftpd sample configuration for FTPS connections.
#
# Note that FTPS impose some limitations in NAT traversing.
# See http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
# for more information.
#

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
[B][COLOR="Red"]TLSProtocol                             SSLv23[/COLOR][/B]
#
# Server SSL certificate. You can generate a self-signed certificate using 
# a command like:
#
# openssl req -x509 -newkey rsa:1024 \
#          -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
#          -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key 
# chmod 0640 /etc/ssl/private/proftpd.key
# 
TLSRSACertificateFile                   /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile                /etc/ssl/private/proftpd.key
#
# CA the server trusts...
#TLSCACertificateFile 			 /etc/ssl/certs/ca.pem
# ...or avoid CA cert and be verbose
#TLSOptions                      NoCertRequest EnableDiags 
# ... or the same with relaxed session use for some clients (e.g. FireFtp)
#TLSOptions                      NoSessionReuseRequired
#
#
# Per default drop connection if client tries to start a renegotiate
# This is a fix for CVE-2009-3555 but could break some clients.
#
TLSOptions 							AllowClientRenegotiations
#
# Authenticate clients that want to use FTP over TLS?
#
TLSVerifyClient                         off
#
# Are clients required to use FTP over TLS when talking to this server?
#
TLSRequired                             on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations.  Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
TLSRenegotiate                          required off
</IfModule>
Das Rote dort gefällt mir gar nicht (SSLv3 ist nicht mehr sicher https://www.openssl.org/~bodo/ssl-poodle.pdf und von SSLv2 brauchen wir gar nicht erst reden). Verwende besser:

Code:
TLSProtocol TLSv1
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3
Der Rest sieht auf ersten Blick in Ordnung aus.
 
Das Rote dort gefällt mir gar nicht (SSLv3 ist nicht mehr sicher https://www.openssl.org/~bodo/ssl-poodle.pdf und von SSLv2 brauchen wir gar nicht erst reden). Verwende besser:

Code:
TLSProtocol TLSv1
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3
Der Rest sieht auf ersten Blick in Ordnung aus.
Danke für deinen Beitrag. Ich habe die zwei Zeilen eingefügt.
Ist den somit das Ziel Login- und Datentransfer verschlüsselt erreicht?
Lg
 
Wenn du nicht mehr über Port 21 ohne STARTTLS connecten kannst, ist das Ziel erreicht.
Prüfe es doch mal mit openssl.
 
Das Rote dort gefällt mir gar nicht (SSLv3 ist nicht mehr sicher https://www.openssl.org/~bodo/ssl-poodle.pdf und von SSLv2 brauchen wir gar nicht erst reden). Verwende besser:

Code:
TLSProtocol TLSv1
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3
Der Rest sieht auf ersten Blick in Ordnung aus.

Nachdem ich das geändert habe, habe ich den Server neugestartet.
Heute wollte ich dann auf den FTP verbinden und bekamm folgende Fehlermeldung:

Code:
Befehl:	AUTH TLS
Antwort:	234 AUTH TLS successful
Status:	Initialisiere TLS...
Fehler:	GnuTLS error -12: A TLS fatal alert has been received.
Fehler:	Herstellen der Verbindung zum Server fehlgeschlagen

Ich bin mir nicht ganz sicher was der Fehler bedeutet.

lg
 
Wie sieht ein connect mit
openssl s_client -connect example.org:21 -starttls ftp
aus?

Code:
cryordies@Home-System:~$ openssl s_client -connect localhost:8021 -starttls ftp                                                                                                                                                         CONNECTED(00000003)
depth=0 C = DE, ST = Some-State, O = Home-Systems
verify error:num=18:self signed certificate
verify return:1
depth=0 C = DE, ST = Some-State, O = Home-Systems
verify return:1
---
Certificate chain
 0 s:/C=DE/ST=Some-State/O=Home-Systems
   i:/C=DE/ST=Some-State/O=Home-Systems
---
Server certificate
-----BEGIN CERTIFICATE-----
(entfernt)
-----END CERTIFICATE-----
subject=/C=DE/ST=Some-State/O=Home-Systems
issuer=/C=DE/ST=Some-State/O=Home-Systems
---
No client certificate CA names sent
---
SSL handshake has read 2252 bytes and written 453 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-XXX-XXXXXX
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-XXX-XXXXXX
    Session-ID: (entfernt)
    Session-ID-ctx:
    Master-Key: (entfernt)
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1417893329
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
220 ProFTPD 1.3.5 Server (Home-FTP) [127.0.0.1]
 
Last edited by a moderator:
Nimm die Zeile

Code:
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3
mal aus der Config heraus, starte ProFTPd neu und versuche es dann noch mal. Eventuell hat dein Client Probleme mit der Cipher Strength. Ansonsten wären die Logs von ProFTPd auch interessant.
 
Wenn es mit openssl über Prot 21 mit STARTTLS geht, liegt eher ein Problem mit dem Client vor.
Dein kurzes Log vom Client ist da ja nicht sonderlich aussagefähig.

Du bist sicher, dass du den Client über Port 21 mit FTPES verbinden lässt?

Solltest du Windows verwenden, achte darauf, dass die eigene Firewall des PC mit der StatefulInspection dazwischen funken kann.
 
Guten Mittag und schönen Sonntag.

Ich habe die Zeile
Code:
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3
auskommentiert, und nur
Code:
TLSProtocol                             TLSv1
drin. Da funktioniert eine Verbindung.
Ich verwende FileZilla als Client, der gab mir nur diese 5 Zeilen als Fehler herraus.
Ich könnte mir gut vorstellen, dass FileZilla mit dem Cipher Strength probleme hat. Ich hab mal vor längerer Zeit was ähnliches in einem Forum gelesen wo es auch um denn Cipher Strength ging.

Weiß einer von euch ob es FTP-Client gibt der da keine Probleme mit hat?

lg
 
WinSCP (FTPS, FTPES, SFTP, SSH) klappt wunderbar.

Oder welches Betriebssystem?

Windows benutze ich.
Mit WinSCP bekomm ich ebenfalls folgende Fehlermeldung:
Code:
SSL3 alert read: fatal: handshake failure
TLS connect: error in SSLv2/v3 read server hello A
TLS Verbindung kann nicht aufgebaut werden
Verbindung zum entferneten Rechner abgebrochen
Verbindung fehlgeschlagen.

So ist der Abschnitt der TLS.conf
Code:
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
#TLSProtocol                             SSLv23
TLSProtocol                             TLSv1
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3

Das steht in der tls.log:

Code:
2014-12-09 00:58:05,796 mod_tls/2.6[20404]: TLS/TLS-C requested, starting TLS handshake
2014-12-09 00:58:05,844 mod_tls/2.6[20404]: unable to accept TLS connection: protocol error:
  (1) error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher
2014-12-09 00:58:05,844 mod_tls/2.6[20404]: TLS/TLS-C negotiation failed on control channel
2014-12-09 00:58:19,676 mod_tls/2.6[20409]: TLS/TLS-C requested, starting TLS handshake
2014-12-09 00:58:19,725 mod_tls/2.6[20409]: unable to accept TLS connection: protocol error:
  (1) error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher
2014-12-09 00:58:19,725 mod_tls/2.6[20409]: TLS/TLS-C negotiation failed on control channel

Kommentiere ich den TLSCipherSuite aus, dann funktioniert es.
 
Das "TLSCipherSuite" verbietet noch mal explizit SSLv2 und 3.0, dein Client (bzw. wahrscheinlich beide, also deine Clients) versucht aber SSL 3.0 zu verwenden. Man kann also davon ausgehen, dass wenn "TLSCipherSuite" auskommentiert ist, einfach SSLv3 verwendet wird. Da ich persönlich nicht mal einen FTP-Client installiert habe und ausschließlich SSH/rsync zum Transfer von Dateien verwende (Peppermint Five Workstation), kann ich dir leider nicht so gut dabei helfen, das Problem zu finden. Ein Screenshot deiner Einstellungen der FTP-Verbindung würde ggf, helfen, bzw. würde ich an deiner Stelle mal "FTPES" testen, falls momentan "FTPS" ausgewählt ist und außerdem die Verschlüsselung von SSL auf TLS umstellen, sofern du so eine Einstellung findest.
 
Wenn ich deine Cipher nehme, kann eben kein Protokoll ausgehandelt werden. Habe ich mit WinSCP, mit Notepad++ und anderen Clients getestet.

Warum MEDIUM? Du kannst doch unsichere Chiffren rauswerfen.

Wenn ich
Code:
TLSCipherSuite ALL:+HIGH:+DH:+EDH:!LOW:!MEDIUM:!SSLv2:!DES:!3DES:!EXP:!RC4:!MD5:!aNULL
verwende, klappt es.
 
Last edited by a moderator:
@infinitnet
Wenn du dich auf die POODLE-Attacke beziehst, wo findet denn bei meiner Konfiguration der Chiffren der Fallback auf das Protokoll SSL3 statt?
 
Last edited by a moderator:
Question: I am having trouble connecting to my SSL/TLS-enabled proftpd; my FTPS client shows this error:

error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
What is wrong?
Answer: It depends; the first thing is to check your TLSLog to see what errors, if any, are logged by the mod_tls module. For example, you might see:
Dec 14 10:47:58 mod_tls/2.4.1[13393]: unable to accept TLS connection: protocol error:
(1) error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher
The most common causes of these problems are: a) overly restrictive TLSCipherSuite configuration, or b) missing server certificate (i.e. TLSRSACertificateFile, TLSDSACertificateFile, or TLSPKCS12File). The file configured for the server certificate might also be badly formatted, which would result in the same error.
http://www.proftpd.org/docs/howto/TLS.html
 
Code:
TLSCipherSuite ALL:+HIGH:+DH:+EDH:!LOW:!MEDIUM:!SSLv2:!DES:!3DES:!EXP:!RC4:!MD5:!aNULL

Mit dem Cipher funktioniert es. Habe es mit WinSCP und FileZilla probiert.
Wenn ich mich jetzt mit WinSCP verbinde und schaue mir die Informationen zu Server und Protokol an steht da ein Punkt der mir nicht gefällt:

Dateiübertragungsprotokoll = FTP
Kryptografie Protokoll = TLS explizite Verschlüsselung, TLSv1
Verschlüsselungsalgorithmus = TLSv1/SSLv3: DHE-RSA-AES256-SHA, 4096 bit RSA

Infinitnet schrieb ja SSLv2/3 ist nicht mehr sicher...

Wenn ich den cipher abänderere in
Code:
TLSCipherSuite ALL:+HIGH:+DH:+EDH:!LOW:!MEDIUM:!SSLv2:[COLOR="Red"]!SSLv3:[/COLOR]!DES:!3DES:!EXP:!RC4:!MD5:!aNULL

Verbindet der Client nicht mehr.
WinSCP:
Code:
SSL3 alert read: fatal: handshake failure
TLS connect: error in SSLv2/v3 read server hello A
TLS Verbindung kann nicht aufgebaut werden
Verbindung zum entferneten Rechner abgebrochen
Verbindung fehlgeschlagen.

Aktueller tls.config Abschnitt:
Code:
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             TLSv1
TLSCipherSuite ALL:+HIGH:+DH:+EDH:!LOW:!MEDIUM:!SSLv2:!DES:!3DES:!EXP:!RC4:!MD5:!aNULL



Lg
 
Last edited by a moderator:
Back
Top