vsFTPd, Fillezila, SFTP, FTPS

qdsqsdqds
Pour pouvoir établir une connexion en SFTP, si SSH est activé, le serveur FTP ne rencontrera pas de problème particulier, cependant pour une connexion en FTPS il faudra au préalable créer des certificats.

Configuration une connexion en SFTP

Si SSH est activé sur votre serveur il ne devrait y avoir aucun problème particulier pour se connecter en SFTP via FilleZilla par exemple.
Il est cependant important de préciser qu’avec les droits par défaut les répertoires de tous les utilisateurs seront accessibles en lecture et vous pourrez remonter jusqu’au répertoire racine

SFTP et FTPS étant deux choses bien distinctes, un serveur FTP n’est pas nécessaire pour se connecter en SFTP

Empêcher la connexion en SFTP

@ TODO

Configuration vsFTPd pour une connexion en FTPS

Création du certificat pour vsFTPD

Pour créer un certificat :

# /usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
ou
# openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
  • -x509 : le type de certificat
  • -req : Nouvelle requête
  • -days : Validité du certificat en nombre de jours
  • -in : Indique le fichier de la requête
  • -signkey : Indique la clé à utiliser
  • -out : Indique le fichier de sortie
  • -req : Gestionnaire de requête
  • -new : Nouvelle requête
  • -key : Indique la clé à utiliser
  • -out : Indique le fichier de sortie

Résultat de la commandes et procédure

Generating a 1024 bit RSA private key
..++++++
..............................++++++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR // Mettre le code du pays, ou pas
State or Province Name (full name) [Some-State]:France // Pays correspodnant
Locality Name (eg, city) []:Paris // Ville que vous voulez
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Alin // Votre entreprise
Organizational Unit Name (eg, section) []:Serveur Personnel // Département entreprise
Common Name (e.g. server FQDN or YOUR name) []:monsite.fr // /!\ le FQDN - Important /!\
Email Address []: [email protected] // Adresse Mail

Il est important de correctement renseigner le FQDN de votre serveur, sans quoi le certificat sera considéré comme suspect et votre client FTP, comme FileZilla par exemple vous le signalera.


Question : Comment faire Lorsque le serveur héberge plusieurs site ? Existe-t-il un nom générique ?

Notes : La bannière d’accueil sur le client FTP (comme fileezilla) n’apparaît plus en TLS

Configuration du fichier /etc/vsftpd

Ajouter les éléments suivant (ou rectifier-les)

# Autoriser les connexion en FTPS
ssl_enable=YES

# Not Allow anonymous users to use secured SSL connections
allow_anon_ssl=NO

# All non-anonymous logins are forced to use a secure SSL connection in order to
# send and receive data on data connections.
force_local_data_ssl=NO

# All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

# Emplacement du certificat généré précédement
rsa_cert_file=/etc/ssl/private/vsftpd.pem

# Cette option permet, entre autres, à Filezilla de fonctionener
ssl_ciphers=HIGH

Incompatibilités avec le pare-feu

Si vous utiliser un firewal qui fonctionne sur liste blanche vous devriez avoir ce genre d’erreur :

Statut :    Résolution de l'adresse de ec****ne.fr
Statut : Connexion à 198.x.x.x:21...
Statut : Connexion établie, attente du message d'accueil...
Statut : Initialisation de TLS...
Statut : Vérification du certificat...
Statut : Connexion TLS établie.
Statut : Connecté
Statut : Récupération du contenu du dossier...
Commande : PWD
Réponse : 257 "/"
Commande : TYPE I
Réponse : 200 Switching to Binary mode.
Commande : PASV
Réponse : 227 Entering Passive Mode (198,x,x,x,51,40).
Commande : LIST
Erreur : Connection interrompue après 20 secondes d'inactivité
Erreur : Impossible de récupérer le contenu du dossier
Statut : Déconnecté du serveur

(Note : le serveur à l’adresse IP 198.xxx.xxx.xxx a ouvert le port 51*256+40=13096 pour les données)

On pourrait éventuellement autoriser les adresses IP, ou une plage à se connecter, mais il n’est pas pertinent de proceder de cette façon là :

iptables -A INPUT -s  @IPkiSeConnecte -j ACCEPT
iptables -A OUTPUT -d @IPkiSeConnecte -j ACCEPT

Détails du problème

Il faut savoir que que pour établir une connexion en FTPS, le serveur FTP à besoin d’un port aléatoire, de ce fait il faudrait ouvrir une large plage de port pour pouvoir utiliser le FTPS, ce qui, à mon avis, n’est pas cohérent avec le principe de sécurité.

Étant donné que FTP utilise un port secondaire dynamique pour les flux de données et même si de nombreux pare-feu ont été conçus pour surveiller les messages de contrôle du protocole FTP afin de déterminer les connexions de données secondaires à autoriser, ils ne pourront pas déterminer le numéro de port TCP d’une connexion négocié entre le client et le serveur FTP si la connexion de contrôle FTP est chiffrée à l’aide de TLS/SSL.

Par conséquent, dans de nombreux réseaux protégés par un pare-feu, un déploiement FTPS échouera alors qu’un déploiement FTP non chiffré fonctionnera. Ce problème peut être résolu en utilisant un nombre limité de ports pour les données et en configurant le pare-feu pour ouvrir ces ports.

Solution pour faire fonctionner le FTPS

J’ai trouvé une solution pour utiliser le FTPS sans ouvrir une plage trop grande (pour VSftpd)
Config de vsftp.conf, rajouter par exemple un port range de 10 ports:

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090

Dans iptables, autoriser la plage :

iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT

Piste de réflexion

  • Utiliser SSH

    • Facile, pas de serveur à configurer (sauf SSH éventuellement)
    • Enlever le droit r sur other à toute l’arborescence et les sous dossier
  • Utiliser FTPS

    • Les Accès et droits sont directement paramétrables dans le serveur FTP
    • Ne supprimera pas le SFTP (SSH)
    • Comment uniquement désactiver SFTP ? Possible
    • Fichier de configuration /etc/ssh/sshd_config

Documentation

http://slacksite.com/other/ftp.html
https://en.wikipedia.org/wiki/FTPS#Firewall_incompatibilities
https://www.it-connect.fr/quelle-est-la-difference-entre-ftps-et-sftp
https://craym.eu/tutoriels/ftp/configuration_filezilla.html#SFTP_filezilla
https://serverfault.com/questions/421161/how-to-configure-vsftpd-to-work-with-passive-mode(modifié)

> Partager <