<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Univers Libre - corkscrew</title>
    <subtitle>Yet another sysadmin&#39;s personal blog</subtitle>
    <link rel="self" type="application/atom+xml" href="https://univers-libre.net/tags/corkscrew/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://univers-libre.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2009-11-17T00:00:00+00:00</updated>
    <id>https://univers-libre.net/tags/corkscrew/atom.xml</id>
    <entry xml:lang="en">
        <title>Connexion ssh derrière un proxy</title>
        <published>2009-11-17T00:00:00+00:00</published>
        <updated>2009-11-17T00:00:00+00:00</updated>
        
        <author>
          <name>Romain</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://univers-libre.net/posts/corkscrew/"/>
        <id>https://univers-libre.net/posts/corkscrew/</id>
        
        <content type="html" xml:base="https://univers-libre.net/posts/corkscrew/">&lt;p&gt;Peut-être avez vous déjà rencontré ce problème, il n’est pas possible de se
connecter en SSH sur un serveur lorsqu’on se trouve derrière un proxy.&lt;/p&gt;
&lt;p&gt;Je m’en suis aperçu quelques jours après le début des cours à l’IUT de Nancy
lorsque j’ai voulu créer un tunnel SSH (on verra comment par la suite) pour
pouvoir accéder à mes mails, les messageries instantanées, etc… Le réseau de
l’université se trouve en effet derrière un proxy qui bloque tout et n’importe
quoi (en fait seul les ports http et https sont autorisés).&lt;br /&gt;
&lt;em&gt;Souvenir du réseau wifi de l’IUT de Marseille où on pouvait télécharger en P2P
les &lt;del&gt;films&lt;/del&gt; ISO Linux en quelques minutes… :(&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Pour résoudre le problème (du ssh, pas du P2P), il y a deux choses à faire.&lt;/p&gt;
&lt;h2 id=&quot;cote-serveur&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cote-serveur&quot; aria-label=&quot;Anchor link for: cote-serveur&quot;&gt;Coté serveur&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bien entendu, comme le proxy bloque tout sauf http et https, il n’y a pas de
miracles, il faut faire écouter le serveur SSH sur le port https (les transfert
sont chiffrés pour https et SSH, le proxy ne peut pas voir la différence). Pour
ça, modifiez votre &lt;em&gt;/etc/ssh/sshd_config&lt;/em&gt; pour changer la valeur de &lt;em&gt;Port&lt;/em&gt; :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Port 443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Redémarrez OpenSSH et assurez vous de changer les ports également dans votre
pare feu et votre routeur.&lt;/p&gt;
&lt;h2 id=&quot;cote-client&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cote-client&quot; aria-label=&quot;Anchor link for: cote-client&quot;&gt;Coté client&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;À priori, on peut croire que le problème est maintenant résolu, le serveur
écoute sur le port https, le proxy laisse passer les données sur le port https,
et le client indique de ce connecter par le port https. Et bien non, ce n’est
pas aussi simple, et je n’ai eu la réponse qu’aujourd’hui, pendant un cours sur
les serveurs web.&lt;/p&gt;
&lt;p&gt;En fait, le fait de passer par un proxy interdit de faire une connection direct
entre le client et le serveur (un proxy étant fait pour s’intercaler entre les
échanges). Il faut donc dire explicitement au proxy d’établir une connection
direct entre les deux machines, et de ne plus s’en mêler ensuite. C’est grâce à
la commande HTTP CONNECT que c’est possible (vous voyez mieux le rapport avec
les serveurs web à présent ;) ).&lt;/p&gt;
&lt;p&gt;Pour réaliser ça en pratique, on va utiliser corkscrew. Installez le puis
modifiez votre fichier client &lt;em&gt;/etc/ssh/ssh_config&lt;/em&gt; comme ceci :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Host univers-libre.net-proxy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Hostname univers-libre.net&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Port 443&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ProxyCommand /usr/bin/corkscrew vivianen.iuta.univ-nancy2.fr 3128 %h %p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Host univers-libre.net&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Port 443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Explications :&lt;br /&gt;
on a définit 2 configurations (host, dans le fichier) : une dans le cas normal
(univers-libre.net) et une autre avec un proxy (univers-libre.net-proxy).&lt;br /&gt;
Ainsi, si vous êtes derrière le proxy, vous devrez taper :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh univers-libre.net-proxy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans le cas contraire :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh univers-libre.net&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans la configuration avec proxy, on indique que, en fait le vrai nom n’est pas
univers-libre.net-proxy mais univers-libre.net (avec la directive hostname). Le
port est bien sûr fixé à 443 (https) dans les 2 cas.&lt;br /&gt;
Viens la ligne ProxyCommand : on dit à OpenSSH de faire appel à corkscrew en
lui passant en paramètre l’adresse du proxy (ici vivianen.iuta.univ-nancy2.fr),
le port du proxy (3128 qui est le port par défaut des proxies). %h et %p
indiquent respectivement l’hôte à atteindre et son port (univers-libre.net et
443).&lt;/p&gt;
&lt;p&gt;Maintenant que vous avez un accès SSH sur votre serveur à vous la liberté :) .
Vous pouvez alors créer un tunnel SSH pour certaines applications, en rajoutant
une ligne de ce type dans le fichier &lt;em&gt;/etc/ssh/ssh_config&lt;/em&gt; de votre client :&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LocalForward 143 localhost:143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans cet exemple je dis de rediriger toutes les demandes de connections qui
sont envoyées sur le port 143 (imap), vers le même port et sur le même serveur
que le serveur SSH (localhost). Ainsi mon client mail pourra accéder à mon
serveur imap, le tout de façon transparente, mais crypté dans le tunnel :-).&lt;/p&gt;
</content>
        
    </entry>
</feed>
