« Tunnel http + ssh » : différence entre les versions
Ligne 38 : | Ligne 38 : | ||
= | =Utilisation sur un serveur Web existant= | ||
Il est parfaitement possible de faire cohabiter un serveur Web sur la machine «complice» avec ce tunnel, du moment qu'on peut faire les virtualhosts. Pour cela: | Il est parfaitement possible de faire cohabiter un serveur Web sur la machine «complice» avec ce tunnel, du moment qu'on peut faire les virtualhosts. Pour cela: | ||
Version du 30 décembre 2010 à 10:38
Sur cette page nous allons voir comment créer un tunnel, permettant de faire passer tout et n'importe quoi à travers une simple connexion http.
Ingrédients
Pour ce faire il vous faut :
- 2 ordinateurs : un dans le réseau filtré et un hors de ce réseau mais accessible ;
- Un serveur SSH fonctionnel sur la machine hors du réseau ;
- Penser à préparer la recette avant de vous retrouver dans le réseau filtré ;
- Le paquet httptunnel installé sur les deux machines.
Configuration de la machine complice
Nous allons ici nous servir du couple hts et htc, ils sont tout deux dans le paquet httptunnel, il va donc falloir installer ce paquet sur chacune des deux machines.
Sur la machine complice lancer la commande :
hts --forward-port localhost:22 80
Ceci aura pour effet de créer un bout du tunnel sur le port 80 de la machine « complice » et la connexion provenant de ce port seras transféré sur le port local 22 (ssh).
Cette commande retourne immédiatement et ne dis rien, elle crée un deamon qui enregistre ses journaux (bien utiles) dans /var/log/syslog.
Configuration de votre machine
Sur la machine locale on commence par créer la seconde partie du tunnel http :
htc --forward-port 1234 complice:80
Cette commande va créer une sorte de proxy sur le port local 1234 et rediriger ces connexions sur l'autre bout du tunnel (donc le bout de la machine complice). Bien sûr remplacez « complice » par le nom de domaine ou l'adresse IP de votre machine extérieure.
Ce qu'il faut bien comprendre c'est que ce n'est pas une simple redirection, il y a une encapsulation de la connexion dans un flux http. L'avantage c'est de pouvoir traverser un proxy http de manière très simple, il suffit d'utiliser la commande :
htc --proxy votreproxy:8080 --forward-port 1234 complice:80
Dernière étape créer la connexion ssh à travers le tunnel en activant le proxy socks :
ssh -D 8080 login@localhost -p 1234
Non, il ne faut pas remplacer « localhost », c'est bien vers votre machine en local que doit pointer votre client ssh, mais il sera rediriger comme il faut. Une fois que vous êtes connectés ainsi, vous avez un proxy SOCKS accessible via localhost:8080.
Utilisation sur un serveur Web existant
Il est parfaitement possible de faire cohabiter un serveur Web sur la machine «complice» avec ce tunnel, du moment qu'on peut faire les virtualhosts. Pour cela:
- Sur la machine complice: Activez le module proxy, en clair faire dans le répertoire /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/proxy.conf
ln -s /etc/apache2/mods-available/proxy_ftp.load
ln -s /etc/apache2/mods-available/proxy_http.load
ln -s /etc/apache2/mods-available/proxy.load
- Décidez d'un port (ici on va prendre 8888) et lancez le tunnel sur ce port
$ hts --forward-port localhost:22 8888
- créez un nouveau serveur virtuel par un fichier /etc/apache2/sites-available/ssh.votredomaine.org contenant
<VirtualHost *:80>
ServerAdmin francois@ssh.votredomaine.org
DocumentRoot /var/www
ServerName ssh.votredomaine.org
ErrorDocument 404 /deprime.html
ErrorLog /var/log/apache2/ssh-error.log
CustomLog /var/log/apache2/ssh-access.log combined
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
- Deny from all
#Allow from .example.com
</Proxy>
ProxyPass / http://localhost:8888
</VirtualHost>
et mettez le en route:
$ su
- cd /etc/apache2/sites-enabled
- ln -s ../sites-available/ssh.votredomaine.org
- /etc/init.d/apache2 reload
- Rajoutez une ligne DNS à votre domaine:
ssh IN A votre_IP
et relancez votre serveur DNS gérant votre domaine.
- Votre tunnel est près, sur la machine client, il n'y aura pas de changement.