vsftpd mit TLS

Auf die Schnelle brauchte ich einen ftp-Server hinter meinem DSL-Anschluß mit dynamischer IP-Adresse. Es sollte aber nicht “nur” ftp sein, sondern die aufbauende Verbindung sollte mit TLS geschützt sein.

Nach der Konfiguration war ein erfolgreicher Verbindungsaufbau mit FileZilla nicht möglich; es gab die Fehlermeldung:

Befehl: PASV
Fehler: GnuTLS-Fehler -15: An unexpected TLS packet was received.
Fehler: Verbindung zum Server getrennt: ECONNABORTED - Verbindung abgebrochen
Fehler: Verzeichnisinhalt konnte nicht empfangen werden
Status: Verbindung zum Server getrennt

oder

Befehl: LIST
Fehler: Die Datenverbindung konnte nicht hergestellt werden: ECONNREFUSED - Verbindung durch Server verweigert
Fehler: Zeitüberschreitung der Verbindung nach 20 Sekunden Inaktivität
Fehler: Verzeichnisinhalt konnte nicht empfangen werden
Status: Verbindung zum Server getrennt

Die notwendigen Parameter um diesen Fehlern zu begegnen sind:

pasv_min_port=40200
pasv_max_port=40300
pasv_address=dein.dyndns.net
pasv_addr_resolve=YES

Ergänzend müssen neben der Aktivierung des dyndns-Services im Heimrouter die TCP-Ports 21 und 40200 bis 40300 auf den ftp-Server weitergeleitet werden.

Für die Vollständigkeit eine komplette “vsftpd.conf” für diesen Zweck:

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
log_ftp_protocol=YES
connect_from_port_20=YES
xferlog_std_format=NO
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
pasv_enable=YES
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH
pasv_min_port=40200
pasv_max_port=40300
pasv_address=dein.dyndns.net
pasv_addr_resolve=YES

Generieren von Zertifikat und Key:

# openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem -days 3650
# openssl rsa -in certs/vsftpd.pem -out /etc/ssl/certs/private/vsftpd.key

Die Kommentarfunktion ist geschlossen.