Le blog de Genma
Vous êtes ici : Accueil » Informatique » Autohébergement » SSH derrière un proxy, Sslh

SSH derrière un proxy, Sslh

D 23 février 2016     H 09:00     A Genma     C 7 messages   Logo Tipee

TAGS : Proxy Https Auto-hébergement Planet Libre Yunohost Sysadmin

Le proxy du boulot

Actuellement je suis en mission chez un client et derrière un proxy (voir à ce sujet mes différents billets taggués proxy). Les seuls ports ouverts sur ce proxy sont les ports 80 (http) et 443 (https).

Ayant un Raspberry qui tourne chez moi derrière ma Freebox, je peux me connecter dessus en SSH en passant par le port 443. Dans Putty ou Kitty, j’ai défini le proxy, le fait d’utiliser le port 443. J’arrive par SSH sur le port 443 de la Freebox. Sur la Freebox, j’ai défini que le port 443 était redirigé vers le port SSH du Raspberry Pi (22 par défaut). Dans Firefox, il me suffit alors de lui dire d’utiliser le proxy local créé pour que ma connexion Internet se fasse via la Freebox. Pour plus de détail, voir le tutoriel détaillé et complet que l’on trouve ici Contourner un proxy (au boulot…) via SSH et Putty.

Avec Yunohost déjà en place

Or sur ma Freebox, les ports 80 et 443 sont déjà ouverts et redirigés vers les ports correspondant du Raspberry pi sur lequel tourne Yunohost. Il n’y a donc pas de place, le port 443 est déjà utilisé/dédié aux connexions httpS au serveur web de Yunohost

Si je souhaite pouvoir me connecter en SSH sur mon Raspberry depuis la connexion Internet de mon lieu de travail, il faut que je sorte via le port 443... Et donc j’arrive sur le port 443 de la Freebox...

Une solution simple ?

Une solution simple et non technique est donc de passer par la connexion 3G/4G du téléphone (La connexion via le téléphone se fait via un abonnement Freemobile et les différents ports testés en sortie du PC (et en entrée sur la Freebox) ne sont pas bloqués/filtrés. Le téléphone me sert alors de modem). Ainsi je ne suis plus bloqué/filtré par le proxy et j’arrive via un autre port sur le serveur SSH (22 par défaut). Laissant le port 443 pour le https.

Oui mais si je veux quand même utiliser SSH depuis le réseau derrière un proxy ?

Une autre solution plus technique : Sslh

SSLH est un multiplexeur, qui permet de gérer les requêtes venant du port 443 pour rediriger vers les services SSH et SSL, ce qui permet par exemple de creuser un tunnel SSH et outre passer les règles des proxys professionnel ou tout simplement sécuriser sa connexion lors d’accès à des spots wifi public.
- SSLH : HTTPS et SSH sur le même port !
- SSLH : choisir le protocole ssl par défaut en cas de timeout

Dit autrement, on arrive sur la Freebox, via https ou SSH via le port 443. Les connexions sont redirigées par la Freebox sur le Raspberry. Et c’est SSLH qui tourne sur le Raspberry qui lui va déterminer si la connexion est de type https ou SSH et rediriger alors vers le bon service (ngnix ou le serveur SSH). Je n’ai pas encore mis en place ce système, mais ça ne saurait tarder. A suivre donc.

7 Messages

  • Hello,
    J’utilise cette solution avec succès depuis quelques années sur un SheevaPlug sous debian sur lequel j’ai aussi installé Yunohost. Ca fonctionne vraiment très bien.
    Le seul point qu’il me reste à résoudre est de gérer l’option Transparent Proxy pour que les IP sources "passent" sslh et puissent se retrouver dans le log (de nginx notamment) pour faire des stats de provenance d’IP sur un site public. Sans ça, le log ne contient que des accès depuis 127.0.0.1


  • Salut,

    Cette solution fonctionne, je l’ai testé. Malheureusement ce n’est pas transparent. En effet, les requêtes https, celles qui seront bien à destination de ton site web, ne viendront plus directement de l’ip externe, mais de la machine qui fait tourner sslh. Conséquence, si tu conserve des logs ou des stats de fréquentation (piwik ou autre) alors ils ne serviront plus à rien puisque la seule IP qui apparaîtra sera celle de ton Raspberry. A l’époque je n’avais pas réussit à résoudre ce soucis, mais si tu y parviens, fais moi signe :)

    J’avais aussi écrit le même genre de billet enthousiaste (avant de tester ;) :
    https://hoper.dnsalias.net/tdc/index.php?post/2011/04/28/Se-mefier-des-certitudes

    A plus.

    PS : Maintenant que let’s encrypt existe, tu n’a plus aucune raison de ne pas passer au https :p


  • Salut !

    J’utilise personnellement "Shell in a box". Il existe une app officielle yunohost.
    Il offre un shell depuis le navigateur ce qui me permet de ne pas passer par SSH. Point positif il empêche la connexion avec root même si cette dernière est autorisée via SSH. Point négatif il a un peu de mal avec Firefox, les caractères spéciaux passent mal (ce qui peut être embettant pour les mots de passes).


  • Génial. Ca faisait un moment que je cherchais comment faire.
    A tester d’urgence...
    Merci.
    @Linuz, je confirme. Shellinabox c’est super mais c’est aussi un enfer avec certains caractères...


  • Avec sslh, le fait que les connexions web soit enregistrées comme venant de 127.0.0.1 est vraiment dommage. J’avais commencé à l’utiliser, puis j’ai fait un retour en arrière à cause de ce problème.
    Si le réseau ne bloque pas le port 53 udp je crois qu’un serveur iodine peut être utilisé.


  • Un autre avantage de SSLH est de "cacher" le port en écoute du serveur SSH et se protéger des scans réseaux....
    Le seul inconvénient, déjà cité dans les commentaires, on se retrouve avec 127.00.0.1 dans les logs d’accès au serveur web...

    Merci de m’avoir cité comme source :-)


  • @hoper, @fred
    Comme expliqué plus haut, l’option Transparent proxy support permet de résoudre le problème d’IP dans les logs.
    https://github.com/yrutschle/sslh/blob/v1.16/README.md
    C’est dispo à partir de la version 1.15. La doc explique comment l’activer


Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.