web-dev-qa-db-fra.com

Accès FTP sécurisé; les meilleures pratiques

Nous avons plusieurs applications web (B2B, B2C eCommerce) auxquelles les développeurs ont accès pour télécharger des fichiers.

Je dois m'assurer que la partie FTP est bien sécurisée.

Quelle est la meilleure façon de procéder?

Actuellement, j'ai:

  • Numéro de port modifié, et
  • Définissez une adresse IP statique (notre adresse IP locale uniquement) pour les téléchargements

Est-ce suffisant pour sécuriser l'accès FTP?

21
Smart Bird

bien que @ mahbubut-r-aaman le mentionne en passant, j'ai pensé que je développerais un peu la SSH. La réponse que je dirais pour sécuriser FTP est de ne pas utiliser FTP. La raison étant qu'il (par défaut) envoie les noms d'utilisateur et les mots de passe en clair, ce qui n'est pas considéré comme une approche très sécurisée.

Au lieu de cela, vous pouvez regarder SFTP (qui utilise le protocole SSH) ou FTP (S) qui utilise le protocole FTP avec SSL pour le cryptage.

De plus, je suggère de rechercher une solution comme fail2ban pour aider à bloquer les tentatives de devinette de mot de passe.

changer le port sur lequel il écoute est un peu utile pour éviter le bruit dans vos journaux d'attaques aléatoires, mais vous ne devriez pas vous y fier.

verrouiller l'accès à des adresses IP source spécifiques est une bonne idée si c'est pratique car cela limitera les personnes qui peuvent tenter d'accéder au site.

21
Rory McCune

Le problème avec le FTP standard

Le protocole FTP standard n'est pas sécurisé. N'importe qui sur le réseau (n'importe quel "homme au milieu", comme on l'appelle, qui peut lire et/ou modifier les données sur la connexion) peut voir ce que vous envoyez et modifier les données envoyées. Une connexion FTP typique se présente comme suit:

* TCP connection is made to the server
220 Welcome to this FTP server!
USER <username>
331 Password required for <username>
PASS <password>
<a positive or negative response>

Comme vous pouvez le voir, il n'y a aucune protection du mot de passe. Comme n'importe qui sur le réseau peut lire ceci, un attaquant peut facilement se connecter avec un nom d'utilisateur et un mot de passe volés.

Il existe plusieurs façons de résoudre ce problème. Vous pouvez utiliser autre chose que FTP, mais comme c'est hors sujet ici, je n'entrerai pas dans les détails. FTP lui-même connaît deux versions sécurisées populaires: FTPS et SFTP. Vous pouvez les séparer comme suit: FTPS a un S à la fin, tout comme HTTPS. Et en effet, cela fonctionne exactement de la même manière que HTTPS, qui est par le protocole SSL/TLS. SFTP, avec un S préfixé, utilise SSH pour se connecter et est plus populaire sur les serveurs Linux.

Dans cet article, je me concentrerai sur FTPS.

À propos des mesures que vous avez prises jusqu'à présent

Tout d'abord, c'est une bonne chose que vous cherchiez activement à sécuriser cela. Beaucoup de gens s'en moqueraient tout simplement!

  • Modification du numéro de port

    Cela aide de deux manières, bien que les deux n'en valent pas vraiment la peine.

    1. L'utilisation d'un port alternatif rend un peu moins évident qu'il s'agit du trafic FTP, mais il est toujours très trivial de remarquer quand quelqu'un cherche activement à vous pirater et peut surveiller votre réseau.
    2. Je vois régulièrement des gens scanner des serveurs aléatoires sur le port 21 pour voir s'il y a des comptes non sécurisés actifs, mais un mot de passe comme "1Q3XX" ne serait déjà pas deviné par eux (ils font surtout des attaques par dictionnaire). Il n'est donc pas vraiment avantageux de changer le port si vos mots de passe sont meilleurs que "admin" ou "123456".
  • Le téléchargement peut être effectué à partir d'une IP fixe (notre local)

    Cela aide un peu plus, mais cela vous limite également. Si vous êtes à la maison et que vous remarquez une énorme faille de sécurité dans votre site Web, vous devrez conduire. Avec un mot de passe décent, la limitation de l'IP ne devrait pas être nécessaire, surtout si vous avez un serveur qui prend en charge l'interdiction automatique après trop de tentatives de connexion invalides.

    Vous pouvez configurer un VPN pour éviter d'avoir à conduire, mais à quoi bon si vous pouvez simplement choisir un mot de passe FTP fort?

Suggestion de logiciel

Puisque vous ne l'avez pas mentionné, je suppose que vous êtes ouvert à toute implémentation de client et serveur FTP disponible pour n'importe quel système d'exploitation.

Bien que je n'ai pas testé de nombreux serveurs FTP, FileZilla Server fonctionne bien pour mes besoins, et je suppose que cela fonctionnerait bien pour toute petite organisation. Les fonctionnalités incluent:

  • Plusieurs utilisateurs et groupes d'utilisateurs
  • Autoriser ou refuser l'accès à partir d'adresses IP données, à la fois par utilisateur et globalement pour le serveur
  • FTPS. Comme HTTPS est HTTP sécurisé, FTPS est FTP sécurisé. Il fonctionne entièrement sur SSL/TLS et sécurise les données envoyées. Les données (la connexion et le code) ne peuvent pas être lues ou modifiées par quelqu'un au milieu (comme un pirate sur un réseau wifi public, ou même votre gouvernement ou FAI). Vous pouvez simplement installer votre propre certificat.
  • Vous pouvez forcer l'utilisation de FTPS par utilisateur et forcer l'envoi de fichiers de chiffrement (certains clients ne chiffrent que les données de connexion)
  • L'interdiction automatique après trop de connexions invalides est possible (elle interdit l'IP pendant un certain temps, que vous pouvez définir)
  • La journalisation est prise en charge et vous pouvez définir la durée de stockage des journaux, leur taille, etc.
  • De nombreuses autres fonctionnalités non liées à la sécurité, comme la limitation/limitation de la vitesse, la limitation du nombre de clients simultanés, la définition du port d'écoute, la définition d'un message de bienvenue, etc.
  • La configuration est en XML et il y a un panneau d'administration (le panneau d'administration peut être connecté à distance et est protégé par un mot de passe). Cela signifie que vous pouvez également automatiser l'ajout d'utilisateurs au fichier XML si vous le souhaitez.
  • Un inconvénient est qu'il est uniquement Windows.

Si vous utilisez un serveur Linux, vous pouvez rechercher des serveurs FTP avec des options similaires. La fonction de loin la plus importante à rechercher dans un serveur est FTPS ou SFTP, et la possibilité de forcer cela pour que personne ne puisse se connecter accidentellement sans cryptage. En plus de cela, l'autobanning et la journalisation sont plutôt importants.

Alors pour le client, je pense encore une fois que FileZilla est une très bonne option.

  • Il prend en charge FTPS et SFTP, et même les certificats clients pour l'authentification.
  • Vous devez explicitement approuver le certificat envoyé par le serveur, éventuellement stocker et approuver le certificat. Si un certificat est falsifié par un pirate, vous le saurez car il vous demande à nouveau "voulez-vous faire confiance à ce certificat inconnu?".
  • Multi-plateforme (fonctionne sur Windows, Mac et Linux)
  • Beaucoup plus d'options comme la navigation dans les répertoires synchronisés, un gestionnaire de site (stockez les connexions pour différents serveurs), comparez les fichiers dans la liste des répertoires local et distant en fonction de la taille et de la date de modification, des vitesses limites et des transferts simultanés, etc.
15
Luc

Les étapes suivantes vous aideront à sécuriser l'accès FTP

  • Désactiver l'accès anonyme
  • Configurez votre site FTP en aveugle
  • Activer les quotas de disque
  • Utiliser les restrictions de durée de connexion
  • Restreindre l'accès par IP
  • Audit des événements de connexion
  • Activer l'exigence de mot de passe fort
  • Activer le verrouillage du compte et le seuil de verrouillage du compte
  • Rendre l'accès SSH obligatoire

MODIFIER:

EDIT: Exemple d'implémentation

EDIT: J'aime la réponse de @Rory McCune. Belle et grande explication.

Au lieu d'utiliser FTP, mieux vaut regarder SFTP (qui utilise le protocole SSH) ou FTP (S) qui utilise le protocole FTP avec SSL pour le cryptage.

fail2ban est une bonne solution pour aider à bloquer les tentatives de devinette de mot de passe.

Changer le port sur lequel il écoute est un peu utile pour éviter le bruit dans vos journaux d'attaques aléatoires.

EDIT: Je préfère le commentaire de @ Rook

don't use ftp! Your password and your code in in plain text!
2
Md Mahbubur Rahman