Ssh à travers un Firewall
De FDGLwiki.
Cas typique : vous êtes dans un entreprise et vous voulez vous connecter par SSH vers un serveur à l'extérieur du réseau de l'entreprise... mais il y a un firewall entre le réseau interne et Internet !
Avertissement : L'utilisation des techniques décrites ci-dessous est peut-être interdite par l'entreprise.
Il y a trois possibilités, sachant que seule la dernière est potentiellement réalisable si vous ne pouvez pas modifier la configuration du serveur.
Écouter sur le port 80
Si le firewall a un port complètement ouvert (le port 80 par exemple), vous pouvez modifier la configuration du serveur pour que son démon SSH écoute sur le port 80 en plus du port 22 (attention, il ne doit pas y avoir de serveur Web qui écoute déjà sur le port 80). Pour cela, modifiez le fichier de configuration /etc/ssh/sshd_config pour qu'il contienne les deux lignes suivantes :
Port 22 Port 80
Puis relancez le serveur SSH :
# /etc/init.d/ssh reload Reloading OpenBSD Secure Shell server's configuration.
Vous pouvez alors lancer votre client SSH en lui précisant d'utiliser le port 80 :
% ssh -p 80 login@nom_DNS_du_serveur
Monter un tunnel HTTP
Si le firewall surveille le port 80 et vérifie que seuls des packets HTTP passent par ce port, alors vous pouvez essayer d'utiliser le programme httptunnel. Ce programme doit tourner sur le client et le serveur. Il encapsule dans une connexion HTTP n'importe quel type de connexion (pas forcément une connexion SSH). Il permet aussi de faire passer la connexion par un Proxy. Installez le package sur le client et sur le serveur :
# apt-get install httptunnel
Lancez le serveur httptunnel sur le serveur :
% hts -F localhost:22 8888
Puis lancez le client httptunnel sur le client :
% htc -F 2222 nom_DNS_du_serveur:8888
ou, si vous devez passer par un Proxy proxy.exemple.org qui écoute sur le port 8080 :
% htc -F 2222 -P proxy.exemple.org:8080 nom_DNS_du_serveur:8888
Vous pouvez alors lancer votre client SSH :
% ssh -p 2222 login@localhost
Utiliser un proxy HTTPS
Récupérez le script ssh-https-tunnel :
% wget http://zwitterion.org/software/ssh-https-tunnel/ssh-https-tunnel # mv ssh-https-tunnel /usr/local/bin/
Editez le fichier /usr/local/bin/ssh-https-tunnel contenant le programme et rentrez le nom DNS et le port du proxy du réseau interne dans les variables prévues à cet effet :
# Proxy details my $proxy = "proxy.exemple.org"; my $proxy_port = 8080;
Créez (s'il n'existe pas déjà) un fichier ~/.ssh/config contenant :
host nom_DNS_du_serveur ProxyCommand /usr/local/bin/ssh-https-tunnel %h %p Port 22
Puis essayez de vous connecter au serveur comme vous le faites normalement :
% ssh login@nom_DNS_du_serveur
Si cela ne marche pas, essayez de faire écouter le démon SSH du serveur sur le port 443 (port des connexions HTTP sécurisées), comme expliqué dans la première possibilité, et modifiez le fichier ~/.ssh/config en remplaçant 22 par 443, puis réessayez de vous connecter.
