0% ont trouvé ce document utile (0 vote)
325 vues14 pages

SSH VPN

Ce document décrit comment configurer des tunnels SSH et VPN pour accéder à Internet à travers un proxy. Il explique ce qu'est un tunnel et présente différentes techniques comme le port forwarding, les proxies SOCKS et les VPN SSH pour encapsuler les données dans un tunnel sécurisé.

Transféré par

Laine Moise
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
325 vues14 pages

SSH VPN

Ce document décrit comment configurer des tunnels SSH et VPN pour accéder à Internet à travers un proxy. Il explique ce qu'est un tunnel et présente différentes techniques comme le port forwarding, les proxies SOCKS et les VPN SSH pour encapsuler les données dans un tunnel sécurisé.

Transféré par

Laine Moise
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Tunnels SSH et Tunnels VPN

0x0ff | 10 March 2014 | Maintaining Access | 5 Comments

Tout ce que je vous ai raconté plus tôt au sujet des serveurs proxy est bien gentil, mais ça
limite notre accès web au protocole HTTP(S)… Dans le cadre d’usage défini par
l’administrateur qui plus est (rappelez-vous le filtrage des URL)… Autant dire que si votre
but est d’accéder à des sites de fesses au boulot, c’est toujours pas gagné. Heureusement, il
existe plusieurs moyens de se libérer complètement de cet enquiquineur rabat-joie
d’administrateur.

Ce dossier va vous permettre de mettre en place différents types de tunnels SSH et VPN. Mais
avant de plonger dans la technique, je vais tenter de répondre en quelques phrases à cette
interrogation en train de naître sur certaines de vos lèvres, lecteurs.

Qu’est-ce que c’est un tunnel ?

Et bien, un tunnel est une connexion entre deux points de deux réseaux distants grâce à
laquelle transite un ou plusieurs flux de données généralement chiffrés. Dans le monde des
réseaux, une connexion correspond à un flux, je vois à votre mine perplexe que ce “plusieurs”
vous embarrasse…

En réalité ces flux de données sont encapsulés dans un protocole capable de transporter de
l’information, par exemple SSH, ainsi un flux en porte de multiples autres. Grâce à cette
petite subtilité, l’utilisateur est capable de communiquer à travers ce tunnel avec les éléments
du réseau situés à l’autre bout de la connexion (et potentiellement vice-versa) en utilisant
n’importe quel protocole ou presque.

Pour que ça marche, les flux de données sontt encapsulés à l’entrée du tunnel puis
désencapsulés à la sortie, et ça de façon complètement transparente pour l’utilisateur lorsque
c’est fait avec talent. Mais tout ceci devrait vous sembler limpide d’ici quelques lignes,
rassurez vous et laissez vous guider. ;)

Prérequis : vous disposez d’un serveur Linux accessible depuis l’internet. Vous êtes en
mesure d’y installer les packages que vous souhaitez, par exemple OpenSSH et CorkScrew.
Votre machine cliente se trouve sur un réseau privé où l’accès web se fait à travers un proxy.

Tunnel SSH
Le tunnel SSH est en réalité très simple à mettre en œuvre. Je
vous parlerai d’abord de cette technique de tunneling parce qu’elle peut dans certains cas
s’apparenter à ce que je vous ai présenté dans le chapitre dédié aux proxy.

Plusieurs choses sont possibles :

Le Port Forwarding, qui va permettre de binder un de vos port local de votre machine cliente
avec un port local de votre serveur hébergeant le daemon sshd auquel vous vous connectez
(ou même un port distant accessible depuis ce serveur par ce serveur).

La mise en place d’un Proxy SOCKS qui permet de faire passer tous les flux réseaux à
travers ce tunnel, même UDP si vous utilisez SOCK v5… Dans la mesure où l’application
gère les proxy SOCKS (ce qui n’est pas gagné)…

Et le SSH VPN qui permet de tout faire passer à travers votre tunnel SSH, quel que soit le
talent et l’attention avec lesquels l’application a été développée !

Installer OpenSSH
Nous partons du principe que vous avez bien lu le prérequis indiquant que le serveur est sur
internet et que votre client se trouve derrière un proxy web.

Installation et configuration du serveur

Tout d’abord il convient d’installer OpenSSH. Généralement le package est présent par défaut
lorsque vous installez votre distribution Linux. Si toutefois ce n’est pas le cas, vous
connaissez la musique…

apt-get install openssh-server

Une fois OpenSSH installé, modifiez son fichier de configuration pour définir le port d’écoute
à 443, qui correspond traditionnellement au port HTTPS et qui en plus d’être généralement
ouvert sur les proxy permet d’y faire passer du flux chiffré sans que cela ne soit suspect.

vim /etc/ssh/sshd_config
=> Trouvez la ligne Port 22 et remplacez-la par Port 443
/etc/init.d/ssh start # ou /etc/init.d/sshd start selon votre distribution

Configuration du client OpenSSH (Linux)


Vous situant derrière un proxy, vous aurez besoin du package CorkScrew. Si vous vous
trouvez derrière un proxy nécessitant une authentification NT LM/NTLMv2, référez-vous au
chapitre présentant CNTLM afin d’installer et configurer un proxy local que vous utiliserez à
la ligne ProxyCommand de votre fichier de configuration SSH.

apt-get install corkscrew

La complexité de la situation rend plus aisée l’utilisation d’un fichier de configuration SSH
plutôt que l’utilisation de nombreux arguments. C’est donc cette méthode qui est préférée tout
au long de l’article. Pour configurer votre connexion suivez ces quelques étapes :

cd ~
mkdir .ssh
vim .ssh/config
Host MyProX
        HostName <ip de votre serveur ssh>
        Port 443
        User <user>
        ProxyCommand /usr/bin/corkscrew <proxy local ou d'entreprise>
<port> %h %p /root/.ssh/auth
vim .ssh/auth
user:pass

Puis essayez de vous connecter. Si vous n’y parvenez pas, référez vous au paragraphe
Résolution d’incidents un peu plus bas.

ssh MyProX

Configuration du client SSH PuTTy (Windows)

Si vous êtes sur un domaine, et que votre proxy nécessite une authentification NT LM ou
NTLMv2, lisez ce précédent article sur CNTLM qui vous expliquera comment gérer ce petit
désagrément.

téléchargez PuTTY et configurez votre connexion SSH comme indiqué ci-après.

Sur la page Session :

Host Name (or IP address) : <ip du serveur ssh> Port : <port du serveur
ssh>
Connection type : ssh
Allez chercher la page Connection > Proxy et configurez les champs ainsi :

Proxy type : HTTP


Proxy hostname : <IP du proxy derrière lequel vous vous trouvez>
Port : <Port du proxy>
Username : <nom d'utilisateur du proxy> # Si nécessaire
Password : <mot de passe du proxy> # Si nécessaire
Résolution d’incidents

Si vous ne parvenez pas à vous connecter, essayez ces différents conseils un par un en
essayant de vous reconnecter après chaque modification.

#1 Rendez le service accessible par le réseau

echo sshd:ALL >> /etc/hosts.allow

#2 Régénérer vos HostKeys (Pourquoi pas ?)

rm /etc/ssh/ssh_host_*
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
/etc/init.d/ssh(d) restart

#3 Reconfigurez votre package

dpkg-reconfigure openssh-server
/etc/init.d/ssh(d) restart

#4 Autorisez spécifiquement votre utilisateur à accéder au service

echo AllowUsers <votre utilisateur Linux> >> /etc/ssh/sshd_config


/etc/init.d/ssh(d) restart
#5 RTFM !

man ssh
man sshd
man sshd_config

Mettre en place du port forwarding


Maintenant que vous parvenez à accéder à votre serveur à travers le proxy de votre
entreprise/école/université/FastFood préféré, il vous est tout à fait possible d’installer un
proxy local (d’autant plus facilement que vous avez lu les articles précédents traitant des
proxy webs : CNTLM, Havij et proxy d’entreprise et Lillou Dalas, multi proxy bypass !) sur
votre serveur distant qui écoute sur le port 3129 et qui autorise uniquement les connexions en
provenance de localhost. Pour être encore plus certain que personne ne puisse accéder à votre
proxy à part vous, le proxy nécessite d’entrer un nom d’utilisateur user et un mot de passe
pass pour accéder au web.

Configuration du serveur OpenSSH

Il n’y a rien à faire, bande de veinards !

Configuration du client openSSH (Linux)

Pour configurer le port forwarding, il suffit d’ajouter une ligne à votre fichier de configuration
client :

echo LocalForward 3129 127.0.0.1:3129 >> .ssh/config

Puis de vous connecter à votre serveur :

ssh MyProX

Dans un second terminal

Pour utiliser un serveur proxy, il est nécessaire de configurer quelques variables


d’environnement.

export http_proxy='http://user:pass@localhost:3129'
export https_proxy='https://user:pass@localhost:3129'
wget google.fr # Ça devrait être bon normalement ;)

Configuration du client SSH PuTTy (Windows)

Rendez-vous dans Connection > SSH > Tunnels et configurez votre Port Forwarding
ainsi :

Source port : 3129


Destination : localhost:3129
Les Puces Local et IPv4 sont cochées.

Puis cliquez sur le bouton Add.


Pour accéder à internet, il vous suffit de configurer votre navigateur pour utiliser le serveur
proxy localhost:3129

Sélectionnez Configuration manuelle du proxy.


Proxy HTTP : localhost Port : 3129
Laissez coché: Utilisez ce serveur proxy pour tous les protocoles.
Lorsque vous commencez à surfer, un popup apparaît. Une fois authentifié, le proxy vous
laisse accéder au web. :)

SOCKS Proxy
Les Proxy SOCKS sont similaires au port forwarding sauf qu’il ne vous limitent pas à
l’utilisation d’un seul port ! En effet, il est possible de faire passer n’importe quel flux  vers
n’importe quel port à travers ce genre de proxy, même UDP avec SOCKSv5 (pratique pour
éviter le DNS Leak) ! L’inconvénient majeur de cette solution est que toutes les applications
ne prennent pas en charge le protocol SOCKS…

Mais finalement votre navigateur s’en sort très bien alors pour surfer c’est bien suffisant. Mais
voyez plutôt :

Configuration du serveur OpenSSH

Il n’y a toujours rien à faire. Ça va, pas trop fatigué ?

Configuration du client OpenSSH (Linux)

Il vous suffit d’ajouter une ligne à votre fichier de configuration précédemment créé :

echo DynamicForward 7777 >> .ssh/config

Puis de vous connecter :

ssh MyProX

Configuration du client PuTTy (Windows)

Rendez-vous dans Connection > SSH > Tunnels et configurez votre SOCKS Proxy ainsi :

Source port : 7777 # Ou le port que vous voulez après tout...


Destination :
Les Puces Dynamic et auto cochées.

Puis cliquez sur le bouton Add.


Commencer à surfer
Pour accéder à internet, il vous suffit de configurer votre navigateur pour utiliser le serveur
proxy SOCKS que vous venez de configurer (localhost:7777). Dans les paramètres internet :

Sélectionnez Configuration manuelle du proxy.


Proxy HTTP : vide Port : vide
Décochez Utilisez ce serveur proxy pour tous les protocoles.
Proxy SSL : vide Port : vide
Proxy FTP : vide Port : vide
Hôte SOCKS : localhost Port : 7777
Sélectionnez SOCKS v5
Le petit truc en plus

Si vous utilisez un SOCKS Proxy il peut arriver que les requêtes DNS soient émises en dehors
du tunnel ce qui dans un réseau d’entreprise ne sera pas permis. En conséquence vous n’aurez
pas de résolution de nom et donc pas accès facilement à internet ! ;)

Si vous êtes un ressortissant d’un pays un peu zélé en matière de contrôle de sa population, le
risque majeur de ces leaks est de laisser des traces de vos différentes visites sur le web. Car il
y a toute les chances du monde que vos requêtes DNS (contenant votre IP) soient enregistrées
sur un serveur gouvernemental. Pensez-y !

SSH VPN
Mais le fin du fin en terme de tunnel SSH est de monter un VPN ! Et oui, c’est possible et pas
compliqué du tout sous Linux !

Configuration du serveur OpenSSH (Linux)

Je suis fairplay, je vous préviens, vous risquez de vous froisser un muscle en réalisant cette
minutieuse et terriblement longue configuration..

Editez le fichier /etc/ssh/sshd_config pour que la ligne suivante soit présente (sans # devant
hein) :

vim /etc/ssh/sshd_config
...
PermitTunnel yes
/etc/init.d/ssh restart

Seconde étape, il faut autoriser notre serveur à faire du routage. Pour cela, il faut modifier la
valeur contenue dans un fichier bien spécifique qui est 0 lorsque le routage est interdit :

echo 1 > /proc/sys/net/ipv4/ip_forward

Votre serveur est à présent configuré correctement, félicitations !

Configuration du client OpenSSH (Linux)

On va tout d’abord forcer la route en direction du serveur SSH, car on va jouer avec la table
de routage un peu plus tard et ce serait vraiment dommage de nous couper la connexion.

Ensuite, connectez vous à votre serveur en ajoutant le paramètre -w3:3 afin d’établir un tunnel
entre deux interfaces virtuelles tunnel3 et tunnel3 qui seront créées respectivement sur le
client et sur le serveur (les deux interfaces peuvent porter le même nom car chacune sera
créée sur un machine différente).

route add -host <ip de votre serveur SSH> gw <ip de votre routeur>
ssh -w3:3 root@server # On se connecte en SSH

Une fois connecté en SSH sur votre serveur :

Il vous faut maintenant monter un tunnel point-à-point entre le client et le serveur. Dans
l’exemple ci-dessous, j’ai choisi deux adresse situées dans le réseau privé 10.0.0.0/xx. Si cette
plage est accessible d’un côté ou de l’autre, il est préférable d’en prendre une autre. ;)

ifconfig tun3 10.0.0.1 pointopoint 10.0.0.2

Dans un second terminal (sur le client donc) :

route # Prenez note de vos règles de routage, gardez en mémoire l'adresse


<IP de votre default gw actuelle>.
ifconfig tun3 10.0.0.2 pointopoint 10.0.0.1
route add -host <ip de votre serveur ssh> gw <IP de votre default gw
actuelle>
route del default gw <ip de votre default gw actuelle> # Attention, si vous
êtes connecté en SSH vous vous tirez sans doute une balle dans le pied. ;)
route add default gw 10.0.0.1
nmap website-to-scan.com # Tout devrait être OK ! ;)

Yoplaboom, vous voilà l’heureux propriétaire d’un tunnel VPN basé sur la technologie
SSH ! :-)

Configuration du client SSH (Windows)

Je risque de vous décevoir mais j’en ai pas la moindre idée. Si vous avez quelques infos sur le
sujet, je suis évidemment preneur. Je me ferais d’ailleurs une joie de compléter cette article
avec cet apport, et je n’oublierais certainement pas de louer vos mérites dans la foulée !

Tunnel VPN
Si vous avez pour ambition d’utiliser régulièrement un tunnel VPN, deux choix s’offrent à
vous. Passer par un fournisseur d’accès VPN gratuit ou payant. Ou fabriquer de toute pièce
votre VPN. Si les deux solutions vous permettent d’accéder à internet lorsque vous êtes
derrière un proxy ou un firewall, l’une et l’autre auront des avantages et des inconvénients…

Les fournisseurs d’accès VPN sont une solution adéquate aux personnes ne souhaitant pas
s’investir techniquement. C’est aussi un excellent choix pour passer outre la Web-Censure
lorsque vous ne possédez pas de serveur hébergé à l’étranger.

Monter son propre tunnel avec OpenVPN peut-être extrêmement gratifiant pour ceux qui
s’initient à l’informatique et plus particulièrement à l’InfoSec car ses applications sont
nombreuses et les bénéfices sont immédiats. L’avantage majeur de cette solution est que le
nœud de sortie n’est pas mutualisé, vous êtes donc seul à profiter de la bande passante !

Souscrire un abonnement auprès d’un fournisseur d’accès


VPN

La première solution et certainement la plus simple est de vous offrir un compte chez un
fournisseur VPN. De 5$ à 15$ par mois, vous pouvez trouver tout un tas d’offres différentes
qui sauront sans doute combler vos attentes. Je vous ai sélectionné deux VPN, Private Internet
Access car je l’utilise et j’en suis plutôt satisfait, et nVpn car on me l’a conseillé sur Twitter et
je crois les gens sur parole. Les deux ont la particularité de pratiquer le No-Log, c’est à dire
qu’ils s’engagent à ne jamais enregistrer vos informations (votre adresse IP). La plupart des
fournisseurs d’accès VPN ne pratiquent pas cette politique et sont donc enclin à fournir vos
informations lorsqu’une autorité quelconque le demande.

Configurer votre propre OpenVPN


Prérequis : vous disposez d’un serveur Linux accessible depuis l’internet. Vous êtes en
mesure d’y installer les packages que vous souhaitez, par exemple OpenVPN. Votre machine
cliente se trouve sur un réseau privé où l’accès web se fait à travers un proxy.

Documentation

Parce qu’on va pas réinventer la roue, je vous invite à aller lire ces trois documents et/ou à
chercher des tutoriels adaptés sur la toile. rappelez vous juste que votre proxy ne laisse pas
passer les flux vers n’importe quel port. Choisir le port 443 qui porte traditionnellement le
trafic HTTPS est sans doute la meilleure solution car en plus de supporter la méthode HTTP
Connect il ne semblera pas étrange d’y voir passer des flux chiffrés.

 blog.nicolargo.com/2010/10/installation-dun-serveur-openvpn-sous-debianubuntu.html
 doc.ubuntu-fr.org/openvpn
 openvpn.net/index.php/open-source/documentation/howto.html

Tunnel VPN over SSH


Notez qu’il est tout à fait possible de faire passer un tunnel dans un tunnel dans un tunnel
etc… Rappelez vous le chapitre précédent concernant le SSH Tunneling. Imaginons
maintenant qu’au lieu de réaliser un Local Port Forwarding sur un serveur proxy local vous
choisissiez de réaliser un Local Port Forwarding vers un serveur VPN distant.

Host MyProX
HostName 10.10.10.10
Port 443
User root
ProxyCommand /usr/bin/corkscrew 192.168.1.250 3128 %h %p /root/.ssh/auth
LocalForward 8888 <ip de votre serveur VPN>:<port de votre serveur vpn>

Et bien vous êtes en mesure de monter un tunnel VPN au travers un tunnel SSH ! ;-)

Vous aimerez peut-être aussi