Script bash + tunnel ssh + ftp accessible d'une seule IP

Salut difficile de faire un titre compréhensible…

Mon problème:

J’ai un FTP chez OVH accessible uniquement depuis mon serveur dédié OVH (pas depuis l’extérieur).
J’ai un autre serveur (ailleurs) et je souhaite savoir s’il serait possible (via un tunnel ?), et comment, d’accéder directement au FTP du dédié OVH ?
Enfin, j’aimerais mettre tout ça dans un script.

J’ai pensé à deux solutions:

  • Faire un scp vers le dédié, et avec un script envoyer les fichiers vers le FTP; C’est pas terrible comme solution, ça impose de stocker les données sur le dédié.
  • Faire un tunnel avec OpenVpn et me connecter directement au FTP (pas sur que ce soit possible…) ???

Si vous avez une idée, elle est la bienvenue!
Merci.

Avec (presque) n’importe quoi d’autre tu pourrais utiliser du port forwarding SSH, mais avec du FTP c’est galère comme il utilise plusieurs ports, faudrait gérer les cas actif/passif etc c’est trop chiant.
Y’a pas moyen d’avoir un accès SFTP plutôt que FTP ? :mrgreen: Là y’aurait plus qu’un port à gérer, ça serait nickel.

Sinon tu peux aussi faire un VPN avec SSH, ça reste moins galère à configurer que OpenVPN (c’est moins efficace mais vu que c’est ponctuel je pense que ça suffit). Voir ici par exemple : bodhizazen.net/Tutorials/VPN-Over-SSH fais juste attention aux routes, tu ne veux pas faire passer tout ton trafic via SSH. :wink:

Du VPN over SSH :whistle: ou simplement un “tunneling over SSH” http://free.korben.info/index.php/Tunnel_SSH :083 .

Et là on se retrouve à devoir gérer les multiples ports du protocole FTP, les cas actif/passif etc, pas bon… Peut-être que ça marcherait en proxy SOCKS (pour du FTP passif uniquement), mais franchement j’ai jamais essayé de faire passer du FTP par SOCKS, ça me paraît un peu limite.

Sur le serveur dédié lui-même ?

Je pense que Clochette parle d’un tunnel IP avec interfaces tun, créé avec l’option -w du client openssh, et non des classiques tunnels/redirections de port TCP créés par les options -L ou -R. Sur le principe c’est équivalent à openvpn ou autre. A moins que Laurent puisse attribuer une adresse IP OVH au client, il faudra en plus que le dédié fasse du NAT source en sortie du tunnel pour que le serveur FTP accepte la connexion. Si le client a une adresse IP publique fixe, une simple redirection de port + masquerading sur le dédié serait plus simple.

Sinon, j’aurais aussi suggéré un proxy SOCKS qui doit bien marcher en FTP passif (connexions sortantes), voire en FTP actif (grâce à la commande “bind” pour les connexions de données entrantes), à condition que le client FTP supporte de passer par un proxy SOCKS. Ou bien un proxy HTTP qui sait faire du FTP.

Autre possibilité à étudier, un proxy FTP comme ftp-proxy ou frox.

Bonjour,

Sur le serveur dédié lui-même ?[/quote]Non. Le serveur ftp est mis à ma disposition, mais je n’y ai accès que depuis mon dédié.

Je n’avais pas pensé au proxy ftp, ça à l’air d’être la solution la plus légère à mettre en oeuvre.
J’étudie les autres propositions, j’ai déjà de l’openvpn sur les deux machines (pas entre elles, mais il suffit d’un fichier de conf en plus pour mettre ça en place).

Merci de vos réponse, je vous dirais quel a été mon choix (à priori j’irais au plus simple…).

Re,
ftp-proxy est très simple à installer et configurer, mais le FTP est malin…

root@web:~# ftp mon_dédié port ... 230-User moi has group access to: 100 230-OK. Current directory is / 230 On Mon Mar 26 01:00:05 CEST 2012 space used : 6402128 Kb - authorized : 102400000 Kb Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 501 PORT address does not match originator. ftp: bind: Address already in use ftp> exit 221 Goodbye.

Evidemment, ça fonctionne en utilisant ftp-proxy à partir de mon dédié, mais pas à partir du distant…
Et je n’ai pas trouvé beaucoup d’infos sur ce message:

Il va falloir jouer au plus malin… :017

Il y a du mieux, j’y suis presque…

ftp> ls 200 PORT command successful. 425 Can't open data connection.

Essaie plutôt d’utiliser le mode FTP passif.
Et si tu as mis un port autre que le 21 pour ton proxy FTP, il faut le faire prendre en compte par toute machine impliquée qui fait du filtrage et/ou du NAT (poste client, routeur internet, proxy). Pour netfilter, cela signifie charger le module nf_conntrack_ftp avec l’option ports=21,<port_proxy>.

[quote=“PascalHambourg”]Essaie plutôt d’utiliser le mode FTP passif.
Et si tu as mis un port autre que le 21 pour ton proxy FTP, il faut le faire prendre en compte par toute machine impliquée qui fait du filtrage et/ou du NAT (poste client, routeur internet, proxy). Pour netfilter, cela signifie charger le module nf_conntrack_ftp avec l’option ports=21,<port_proxy>.[/quote]

Merci! :038

Pour ceux qui chercheraient, je vais faire un petit topo sur le Wiki.
Je reviens mettre le lien + tard.

C’est le mode passif ou la prise en compte du port alternatif qui a débloqué la situation ?

J’ai fait les deux…
Je teste en actif et je reviens.

Re,
J’ai l’impression que c’est le mode passif seulement.
Si je commente la ligne concernant nf_conntrack_ftp dans /etc/modules ça ne change rien.

Mais le module est toujours chargé, non ?

lsmod|grep ftp nf_conntrack_ftp 5537 0 nf_conntrack 46535 5 nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state

Le contenu de /etc/modules n’est prise en compte que lors du démarrage du système.

On peut mettre des options de modules dans /etc/modprobe.conf ou /etc/modprobe.d/*.conf, mais là encore ces options ne seront prises en compte que lors du chargement du module (au démarrage, manuellement par modprobe ou automatiquement par dépendance). Pour que la modification soit appliquée immédiatement, il faut décharger le module puis le recharger (ainsi que ceux qui en dépendent, comme nf_nat_ftp).
Le plus simple dans un premier temps, c’est de tester manuellement en passant l’option dans la commande modprobe sans modifier les fichiers.

Re,
Je confirme donc que c’est seulement le mode passif (avec la configuration actuelle de mon ftp-proxy) qui fonctionne, le déchargement du module nf_conntrack_ftp ne change rien (d’autant plus que j’avais fait une “faute” de frappe dans le fichier du module…).

Re,
J’ai crié victoire un peu rapidement; Un dernier grain de sable, histoire que ce ne soit pas trop facile…

Listage et création de répertoire = OK
Envoie de fichier impossible.

Verbose mode on. 250 OK. Current directory is /isoraka/jour/isp local: dbispconfig-2012-03-26.sql.gz remote: dbispconfig-2012-03-26.sql.gz 200 PORT command successful. 425 Can't open data connection. 221 Goodbye.

Edit: C’est moi, j’ai oublié le “-p” dans une ligne du script. C’est résolu.

Note bien que pour ça fonctionne dans tous les cas (passif, actif), la prise en compte du port pour le protocole FTP doit être activée sur toutes les machines impliquées dans la communication (client, serveur dédié, routeurs intermédiaires…) qui font du NAT ou du filtrage à état. Sur les routeurs NAT du commerce, ce n’est pas toujours possible.

Salut,

Qu’entends-tu par la prise en compte du port pour le protocole FTP doit être activée
Tu veux dire qu’il faut activer le module nf_conntrack_ftp sur le client aussi ?

Oui s’il a du filtrage à état qui n’autorise que les paquets entrants dans l’état RELATED,ESTABLISHED.
S’il n’a pas de filtrage, c’est inutile.

Ok, c’est noté.
Merci de la précision, je ne savais pas qu’il fallait aussi activer le module sur le client, c’est bon à savoir…
Effectivement sur le “client” le module n’est pas activé, mais les deux machines sont à input ACCEPT pour tous les protocoles et tous les ports (uniquement entre elles bien sur).