Faire un DNAT pour un serveur FTPS sur IPFIRE
Introduction
Si vous avez suivi l'un des tutos sur la configuration d'un serveur FTPS, alors vous vous êtes forcément confrontés au problème de l'ajout d'un pare-feu entre votre client et le serveur FTPS.
C'est là que les choses coincent !
Expliquons donc rapidement comment gérer cette situation !
En FTPS (over SSL), dès lors qu'on place un pare-feu entre un client et un serveur FTPS, les choses se gâtent, car à la différence du SFTP (over SSH), le serveur FTPS utilise plusieurs ports !
Nombre d'administrateurs préfèrent évidemment le SFTP, en grande partie pour cette raison ! (et d'autres pour des questions de sécurité inhérentes à SSH par rapport à SSL).
Mais si vous optez pour le FTPS, il y a clairement une configuration plus simple que l'autre dans le cas de figure du pare-feu !
- Utiliser FTPS explicite : le client initie une connexion sur le port 21 (ou sur un port changé pour le DNAT pour plus de sécurité... nous choisirons 2121 pour l'exemple) et négocie ensuite le TLS
- Définir une plage de ports passifs dans la configuration du serveur FTPS : cela permettra de configurer précisément le DNAT sur le pare-feu, en ne redirigeant qu'une plage limitée de ports.
Il y a donc une séparation claire des canaux de commande et de transferts des données : le canal de commande (port 21 sur le serveur FTPS) reste constant, et les ports de données sont gérés dynamiquement dans la plage définie, par le serveur lui-même.
Voici comment s'établit un échange entre un client et le serveur FTPS dans une configuration FTPS explicite
- Connexion initiale :
- Le client se connecte sur l'IP publique du pare-feu, port 2121 (nous changeons le port DNAT pour + de sécurité)
- Grâce au DNAT, cette connexion est redirigée vers le port 21 du serveur FTPS dans le LAN.
- Négociation TLS et authentification :
- Sur le canal de commande (le port 2121 -> 21), le client envoie la commande AUTH TLS pour initier la sécurisation.
- Une fois le tunnel TLS établi, le client s'authentifie avec son nom d'utilisateur et son mot de passe.
- Passage en mode passif :
- Le client envoie la commande PASV (ou EPSV) sur le même canal de commande.
- Le serveur choisit un port libre dans la plage 60000-61000 (définie par la configuration du serveur FTPS par exemple) et renvoie cette information dans sa réponse (par exemple, via le code 227).
- Établissement du canal de données :
- Le client se connecte ensuite sur le port indiqué par le serveur pour établir une connexion de transfert de données.
- Le pare-feu redirige cette connexion (dans la plage 60000-61000.. ce que nous allons voir juste après) vers le serveur.
- Transfert de données :
- Une fois la connexion de données établie, le transfert s'effectue de manière sécurisée via le canal de données.
Maintenant, la question : comment faire ce DNAT particulier ?
Exemple avec IPFIRE
D'abord le port de commande (21).
Pour plus de sécurité, nous le changeons pour le 2121 sur l'IP publique publique du pare-feu car il s'agît d'un port ultra connu !
Nous aurons donc la redirection suivante :
IP-PUBLIQUE-PARE-FEU:2121 -> 10.10.20.200:21 (IP du serveur FTPS)
Puis la plage de ports passifs (60000-61000)
Pour ces ports-là, la redirection reste inchangée.
Nous aurons donc la redirection suivante :
IP-PUBLIQUE-PARE-FEU:60000-61000 -> 10.10.20.200:60000-61000
Ce qui donne :