« Tunnels ethernet avec OpenSSH » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
(balises code)
(4 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Catégorie:Réseau]][[Catégorie:Sécurité]]
[[Catégorie:Sécurité]]
= Tunnels ethernet avec OpenSSH =
 
Depuis la version 4.3 de Openssh, l'option pour faire des tunnels ip a été ajoutée, mais la documentation sur internet est plutôt rare sur le sujet.
Depuis la version 4.3 de Openssh, l'option pour faire des tunnels ip a été ajoutée, mais la documentation sur internet est plutôt rare sur le sujet.


Avant tout, il faut vérifier la version d'openssh sur le serveur et le client.
Avant tout, il faut vérifier la version d'openssh sur le serveur et le client.
<code multi>
<div class="code">
~ $ rpm -q openssh
~ $ rpm -q openssh
openssh-4.3p1-3mdk
openssh-4.3p1-3mdk
~ $ ssh sisay rpm -q openssh
~ $ ssh sisay rpm -q openssh
openssh-4.3p1-0.1.20060mdk
openssh-4.3p1-0.1.20060mdk
</code>
</div>


L'exemple ici a été fait à partir de 2 mandriva et 1 FreeBSD 6, mais ça doit marcher sans modification
L'exemple ici a été fait à partir de 2 mandriva et 1 FreeBSD 6, mais ça doit marcher sans modification
Ligne 16 : Ligne 18 :
Pour l'installer:
Pour l'installer:


<code>cd /usr/ports/security/openssh-portable/ && make install clean </code>
<div class="code">cd /usr/ports/security/openssh-portable/ && make install clean </div>


Attention, si vous n'utilisez pas l'option pour remplacer la version OpenSSH de base, il vous faudra préfixer toutes les commandes ssh par le prefix /usr/local.
Attention, si vous n'utilisez pas l'option pour remplacer la version OpenSSH de base, il vous faudra préfixer toutes les commandes ssh par le prefix /usr/local.
Ligne 28 : Ligne 30 :
La première chose à faire est de dire à openssh d'autoriser les tunnels, en rajoutant cette directive :
La première chose à faire est de dire à openssh d'autoriser les tunnels, en rajoutant cette directive :


<code>PermitTunnel yes</code>
<div class="code">PermitTunnel yes</div>


dans /etc/ssh/sshd_config.
dans /etc/ssh/sshd_config.
Ligne 35 : Ligne 37 :
J'ai pris la facilité pour le moment, j'ai rajouté
J'ai pris la facilité pour le moment, j'ai rajouté


<code>UsePrivilegeSeparation no</code>
<div class="code">UsePrivilegeSeparation no</div>


Une autre solution est de donner les permissions en lecture écriture à un groupe particulier
Une autre solution est de donner les permissions en lecture écriture à un groupe particulier
sur /dev/tun, ce qui est bien plus simple et sûr.
sur /dev/tun, ce qui est bien plus simple et sûr.


<code>chmod :mongroupe /dev/tun</code>
<div class="code">chgrp mongroupe /dev/tun</div>


et bien sur, être dans le groupe en question.
et bien sur, être dans le groupe en question.
Ligne 46 : Ligne 48 :
Il faut ensuite charger le module tun :
Il faut ensuite charger le module tun :


<code>modprobe tun</code>
<div class="code">modprobe tun</div>


et le rajouter dans /etc/modprobe.preload
et le rajouter dans /etc/modprobe.preload


<code>echo tun >> /etc/modprobe.preload</code>
<div class="code">echo tun >> /etc/modprobe.preload</div>


pour le charger au prochain démarrage.
pour le charger au prochain démarrage.


== Sur le client ==
== Sur le client ==
Ligne 60 : Ligne 61 :
d'écrire sur /dev/tun, comme plus haut, puis faire ( sisay etant le serveur ) :
d'écrire sur /dev/tun, comme plus haut, puis faire ( sisay etant le serveur ) :


<code>ssh -w any:any sisay</code>
<div class="code">ssh -w any:any sisay</div>


Vous pouvez jeter une oeil sur les options -f et -N pour ne pas lancer de shell sur la machine distante. Et bien sur, les options habituelles marchent encore ( clé, tunnel, master/slave ).
Vous pouvez jeter une oeil sur les options -f et -N pour ne pas lancer de shell sur la machine distante. Et bien sur, les options habituelles marchent encore ( clé, tunnel, master/slave ).
Ligne 66 : Ligne 67 :
Puis, en root, vous pourrez changer l'ip de la nouvelle interface tun0 sur le serveur
Puis, en root, vous pourrez changer l'ip de la nouvelle interface tun0 sur le serveur


<code>ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2</code>
<div class="code">ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2</div>


sous FreeBSD:
sous FreeBSD:


<code>ifconfig tun100 inet 10.0.0.1 10.0.0.2 netmask 255.255.255.255</code>
<div class="code">ifconfig tun100 inet 10.0.0.1 10.0.0.2 netmask 255.255.255.255</div>


et faire pareil sur le client :
et faire pareil sur le client :


<code>ifconfig tun0 10.0.0.2 pointopoint 10.0.0.1</code>
<div class="code">ifconfig tun0 10.0.0.2 pointopoint 10.0.0.1</div>


sous FreeBSD:
sous FreeBSD:


<code>ifconfig tun100 inet 10.0.0.2 10.0.0.1 netmask 255.255.255.255</code>
<div class="code">ifconfig tun100 inet 10.0.0.2 10.0.0.1 netmask 255.255.255.255</div>


Et finalement, vous pouvez maintenant tester le ping depuis le client :
Et finalement, vous pouvez maintenant tester le ping depuis le client :


<code>ping 10.0.0.1</code>
<div class="code">ping 10.0.0.1</div>


Le reste, c'est de la configuration normale pour les interfaces. Vous pouvez rajouter des routes, un firewall, n'importe quoi.
Le reste, c'est de la configuration normale pour les interfaces. Vous pouvez rajouter des routes, un firewall, n'importe quoi.


Néanmoins, il faut savoir que les connexions tcp par dessus tcp ( comme c'est le cas avec ssh ) sont déconseillées, de par la nature de tcp ( http://docs.mandragor.org/files/Misc/GLFM/lm31/TCP_over_TCP_mauvaise_iD.html ).
Néanmoins, il faut savoir que les connexions tcp par dessus tcp ( comme c'est le cas avec ssh ) sont déconseillées, de par la nature de tcp ( http://chl.be/glmf/articles.linuxmag-france.org/lm31/tcptcp.html ).


== Configuration du firewall ==
== Configuration du firewall ==
Ligne 92 : Ligne 93 :
Si vous disposez d'un firewall activé sur une ou sur les deux machines, il vous faut autoriser les connexions dans les deux sens. Pour cela, si vos utilisez shorewall, il vous suffit de rajouter cette ligne dans le fichier "interfaces" (/etc/shorewall/interfaces) :  
Si vous disposez d'un firewall activé sur une ou sur les deux machines, il vous faut autoriser les connexions dans les deux sens. Pour cela, si vos utilisez shorewall, il vous suffit de rajouter cette ligne dans le fichier "interfaces" (/etc/shorewall/interfaces) :  


<code>loc tun0 detect</code>
<div class="code">loc tun0 detect</div>
 
<br/>
<br/>
'''<b>[[Reseau-index|@ Retour à la rubrique Réseau et sécurité]]</b>'''
<br/>

Version du 17 mai 2012 à 14:13

Tunnels ethernet avec OpenSSH

Depuis la version 4.3 de Openssh, l'option pour faire des tunnels ip a été ajoutée, mais la documentation sur internet est plutôt rare sur le sujet.

Avant tout, il faut vérifier la version d'openssh sur le serveur et le client.

~ $ rpm -q openssh
openssh-4.3p1-3mdk
~ $ ssh sisay rpm -q openssh
openssh-4.3p1-0.1.20060mdk

L'exemple ici a été fait à partir de 2 mandriva et 1 FreeBSD 6, mais ça doit marcher sans modification sur un autre linux ou *bsd.

OpenSSH n'a pas encore importé dans le système de base de FreeBSD, néanmoins la version 4.3p2 est disponible via le système des ports. Pour l'installer:

cd /usr/ports/security/openssh-portable/ && make install clean

Attention, si vous n'utilisez pas l'option pour remplacer la version OpenSSH de base, il vous faudra préfixer toutes les commandes ssh par le prefix /usr/local.


Tout d'abord, il faut les droits root sur les 2 machines. En effet, il y a quelques opérations à faire, aussi bien au niveau de la configuration que du réseau.


Sur le serveur

La première chose à faire est de dire à openssh d'autoriser les tunnels, en rajoutant cette directive :

PermitTunnel yes

dans /etc/ssh/sshd_config.

Il faut aussi retirer la séparation des priviléges, ou jouer sur les permissions de /dev/tun . J'ai pris la facilité pour le moment, j'ai rajouté

UsePrivilegeSeparation no

Une autre solution est de donner les permissions en lecture écriture à un groupe particulier sur /dev/tun, ce qui est bien plus simple et sûr.

chgrp mongroupe /dev/tun

et bien sur, être dans le groupe en question.

Il faut ensuite charger le module tun :

modprobe tun

et le rajouter dans /etc/modprobe.preload

echo tun >> /etc/modprobe.preload

pour le charger au prochain démarrage.

Sur le client

Il faut simplement les droits sur /dev/tun, donc soit tourner en root, ou avoir la permission d'écrire sur /dev/tun, comme plus haut, puis faire ( sisay etant le serveur ) :

ssh -w any:any sisay

Vous pouvez jeter une oeil sur les options -f et -N pour ne pas lancer de shell sur la machine distante. Et bien sur, les options habituelles marchent encore ( clé, tunnel, master/slave ).

Puis, en root, vous pourrez changer l'ip de la nouvelle interface tun0 sur le serveur

ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2

sous FreeBSD:

ifconfig tun100 inet 10.0.0.1 10.0.0.2 netmask 255.255.255.255

et faire pareil sur le client :

ifconfig tun0 10.0.0.2 pointopoint 10.0.0.1

sous FreeBSD:

ifconfig tun100 inet 10.0.0.2 10.0.0.1 netmask 255.255.255.255

Et finalement, vous pouvez maintenant tester le ping depuis le client :

ping 10.0.0.1

Le reste, c'est de la configuration normale pour les interfaces. Vous pouvez rajouter des routes, un firewall, n'importe quoi.

Néanmoins, il faut savoir que les connexions tcp par dessus tcp ( comme c'est le cas avec ssh ) sont déconseillées, de par la nature de tcp ( http://chl.be/glmf/articles.linuxmag-france.org/lm31/tcptcp.html ).

Configuration du firewall

Si vous disposez d'un firewall activé sur une ou sur les deux machines, il vous faut autoriser les connexions dans les deux sens. Pour cela, si vos utilisez shorewall, il vous suffit de rajouter cette ligne dans le fichier "interfaces" (/etc/shorewall/interfaces) :

loc tun0 detect



@ Retour à la rubrique Réseau et sécurité