vendredi 13 février 2009

VSFTPD + SSL sur Debian Etch 4.0

Nous allons installer vsftpd avec support du SSL sur une debian etch 4.0.
Le serveur ftp n'autorisera que les utilisateurs Linux et refusera systematiquement toute connection anonyme.
Les utilisateurs Linux seront chrootés dans leur repertoire et ne verrons pas les fichiers cachés commençant par un point.

On considere que OpenSSL est déjà correctement installé

On va faire l'habituel update
apt-get update

Puis on installe les paquets vsftp et ftp-ssl
apt-get install vsftpd ftp-ssl

On stoppe aussitot vsftp car il est configuré par défaut
/etc/init.d/vsftpd stop

On supprime le repertoire ftp qui a été créé
rmdir /home/ftp

On copie /etc/vsftpd.conf vers /root/vsftpd.old
cp /etc/vsftpd.conf /root/vsftpd.old

On supprime /etc/vsftpd.conf
rm /etc/vsftpd.conf

On edite /etc/vsftpd.conf
vim /etc/vsftpd.conf

On mets ceci dans le vsftpd.conf

#=======GENERAL===========================================================
#On ne l'utilise pas avec inetd
listen=YES
#On interdit les acces anonymes
anonymous_enable=NO
#On autorise les utilisateurs linux à se connecter
local_enable=YES
#On autorise les utilisateurs à écrire là où ils ont le droit
write_enable=YES
#Tout fichier creer par ftp aura les droits 022 (-rw-r--r--)
local_umask=022
#Affiche les messages quand l'utilisateur va dans certains repertoires
dirmessage_enable=YES
#Activer les logs pour uploads/dowloads
xferlog_enable=YES
#Fichier de logs
xferlog_file=/var/log/vsftpd.log
#Logs dans le format standard
xferlog_std_format=YES
#Timout de session
idle_session_timeout=300
#Data timeout
data_connection_timeout=30
#Le texte qui s'affiche à chaque connection ftp
ftpd_banner=Bienvenue sur le serveur test-local.
#On chroot l'utilisateur dans son repertoire
chroot_local_user=YES
#On definit le nombre maximum d'utilisateurs connectés
max_clients=20
#Nombre maximum d'utilisateurs par IP
max_per_ip=5
#On cache l'affichage des fichiers cachés commençant par un point
force_dot_files=NO
#On cache les noms d'utilisateurs des fichiers
hide_ids=YES
#On utilise l'horloge locale
use_localtime=YES
#Activer le mode de connection passif
pasv_enable=YES
#Quand = NO, oblige à verifier qu'il n'y a pas d'usurpation d'ip
pasv_promiscuous=NO
#Plage de ports utilisés pour le mode passif
pasv_min_port=65000
pasv_max_port=65099
#L'adresse ip du serveur
pasv_address=192.168.1.5
#Controle qu'on utilise bien le port 20
#disabling this option enables vsftpd to run with slightly less privilege
connect_from_port_20=NO

#=======SSL=============================================================
#Chemin du certificat
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
#Activer l'authentification SSL
#ssl_enable=YES
#Autoriser les anonymes à utiliser ssl
#allow_anon_ssl=NO
#Obliger le SSL pour envoyer et recevoir des données
#force_local_data_ssl=NO
#Obliger le login uniquement par SSL
#force_local_logins_ssl=YES
#Utiliser uniquement tlsv1, le protocole le plus securisé
#ssl_sslv2=NO
#ssl_sslv3=NO
#ssl_tlsv1=YES


#======DEBIAN CUSTOMISATION=============================================
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd

On notera que toute la partie SSL est désactivée pour l'instant.

Redemarrer le serveur

/etc/init.d/vsftpd stop
/etc/init.d/vsftpd start

Nous allons verifier que nous pouvons nous connecter ni en utilisateur anonyme ni en root

Tentative en anonyme (user anonyme, mettre une adresse email en mot passe)

local-deb:/etc# ftp localhost
Connected to localhost.
220 Bienvenue sur le serveur test-local.
Name (localhost:test): anonymous
530 Please login with USER and PASS.
530 Please login with USER and PASS.
SSL not available
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> quit
221 Goodbye.

Tentative en root

local-deb:/etc# ftp localhost
Connected to localhost.
220 Bienvenue sur le serveur test-local.
Name (localhost:test): root
530 Please login with USER and PASS.
530 Please login with USER and PASS.
SSL not available
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> quit
221 Goodbye.

Maitenant tentez avec un utilisateur Linux, cela devrait fonctionner.
Profitons-en si besoin pour tester les droits sur les fichiers avec filezilla depuis l'exterieur.

Une fois que tout est ok sans SSL - c'est à dire que les utilisateurs, les droits, les connexions depuis l'exterieur fonctionnent - nous allons activer le SSL

Créons un certificat - Créer les repertoires adéquats si besoin

cd /etc/ssl/certs
openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Décommenter la section SSL comme suit dans le fichier /etc/vsftpd.conf

#Chemin du certificat
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
#Activer l'authentification SSL
ssl_enable=YES
#Autoriser les anonymes à utiliser ssl
allow_anon_ssl=NO
#Obliger le SSL pour envoyer et recevoir des données
force_local_data_ssl=NO
#Obliger le login uniquement par SSL
force_local_logins_ssl=YES
#Utiliser uniquement tlsv1, le protocole le plus securisé
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES

Redemarrer le serveur

/etc/init.d/vsftpd stop
/etc/init.d/vsftpd start

On test en local (ou en distant depuis une autre distribution Linux ayant ftp-ssl)

test@test-local:~$ ftp 192.168.1.5
Connected to 192.168.1.5.
220 Bienvenue sur le serveur test-local.
Name (192.168.1.5:test): test
234 Proceed with negotiation.
[SSL Cipher DES-CBC3-SHA]
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw------- 1 ftp ftp 5499 Feb 12 18:15 vsftpd.old
226 Directory send OK.
ftp> quit
221 Goodbye.

La chaine [SSL Cipher DES-CBC3-SHA] indique que l'on est bien en crypté SSL. Plus haut avant que l'on active le SSL il était indiqué SSL not available.

Maintenant si nous essayons cela avec Filezilla (FTPES / Chiffrement explicite) vous aurez une erreur:

Statut : Connexion à 192.168.1.5:21 en cours...
Statut : Connexion établie. Attente du message d'accueil...
Réponse : 220 Bienvenue sur le serveur test-local.
Commande : AUTH TLS
Réponse : 234 Proceed with negotiation.
Statut : Initialisation TLS...
Statut : Vérification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL établie.
Réponse : 331 Please specify the password.
Commande : PASS ******
Réponse : 230 Login successful.
Commande : SYST
Réponse : 215 UNIX Type: L8
Commande : FEAT
Réponse : 211-Features:
Réponse : AUTH SSL
Réponse : AUTH TLS
Réponse : EPRT
Réponse : EPSV
Réponse : MDTM
Réponse : PASV
Réponse : PBSZ
Réponse : PROT
Réponse : REST STREAM
Réponse : SIZE
Réponse : TVFS
Réponse : 211 End
Commande : PBSZ 0
Réponse : 200 PBSZ set to 0.
Commande : PROT P
Réponse : 200 PROT now Private.
Statut : Connecté
Statut : Récupération du contenu du répertoire...
Commande : PWD
Réponse : 257 "/"
Commande : TYPE I
Réponse : 200 Switching to Binary mode.
Commande : PASV
Réponse : 227 Entering Passive Mode (192,168,1,5,254,3)
Commande : LIST
Réponse : 150 Here comes the directory listing.
Statut : Le serveur n'a pas fermé correctement la connection TLS
Erreur : Connexion interrompue : ECONNABORTED - Connection aborted
Réponse : 226 Directory send OK.
Erreur : Échec à la lecture du contenu du répertoire

Ceci est dû à une incompatibilité entre Filezilla et Vsftpd SSL. Le paquet 2.0.7-1 de VsFTPD est censé résoudre le probleme mais il est actuellement en "testing" et donc indisponible dans les paquets debian stables.

En attendant nous n'avons d'autres choix de supprimer l'obligation de connection par SSL de nos utilisateur. Ainsi ceux qui ont Filezilla se connecterons de maniere classique, et ceux qui le peuvent ou le veulent pourront utiliser le FTP over SSL.

Pour cela il faut changer cette ligne:

#Obliger le login uniquement par SSL
force_local_logins_ssl=YES

En

#Obliger le login uniquement par SSL
force_local_logins_ssl=NO

Et quand VSFTD 2.0.7-1 sera publié on pourra retenter une connection Filezilla<->VsFTPD SSL

Une autre solution consisterait à utiliser le SFTP qui n'est autre que du SCP (Utilisant SSH). Bien que le protocole soit sécurisé, je ne l'adopte pas pour deux raison:
-Le port SSH est fermé au public pour plus de sécurité sur le serveur
-Le SSH ne permet pas de CHROOT est plus permissif au niveau de la manipulation des fichiers.

Sur ce, bonne installation!

Liens
Toutes les options de vsFTPD : http://vsftpd.beasts.org/vsftpd_conf.html
Installer vsFTPD sur une debian : http://www.paradoxal.org/blog/post/2007/06/02/Serveur-Debian-vsftpd
L'etat du paquet 2.0.7-1 qui devrait supporter Filezilla/SSL : http://packages.qa.debian.org/v/vsftpd.html

1 commentaire:

  1. Bonjour Gaylord, merci pour ce post intéressant,

    Je voulais savoir, est ce qu'il y a du nouveau à propos de Filezilla et le SSL?

    Merci

    RépondreSupprimer