[ english version ] [ version française ]

Guide utilisateur de btun/btund

Nicolas GUILLAUME
nicolas@guillaume-fr.net

Version 0.3
31 décembre 2007


Présentation

btun et btund sont deux logiciels libres et gratuits permettant d'accéder de l'extérieur à un serveur protégé par un parefeu. btun permet la gestion de plusieurs canaux et supporte l'authentification.

Illustration du cas typique :

Without btun
[ SVG source ]

Par exemple le serveur cible ne propose pas d'accès SSH depuis Internet mais nous désirons quand même en obtenir un. Ou encore, vous voulez controler le serveur cible via VNC mais vous ne pouvez pas/voulez pas ouvrir le port 5900 dans son parefeu.


Installation de btun

Reportez-vous à la page UtilsInstall pour le téléchargement et l'installation de btun/btund.


Mise en place de btund

Pour utiliser btun il vous faudra un accès au serveur cible (physique ou pas, peu importe). Vous n'aurez en aucun cas besoin d'être root.

Il vous faudra par ailleurs une autre machine dont vous controlez le parefeu. Cette machine servira de passerelle entre le serveur cible et la machine qui veut controler le serveur cible. Elle devra donc être en ligne durant toute l'opération, un petit serveur personnel fera parfaitement l'affaire. Dans la suite de ce document nous le nommerons my_host.

La première chose à faire consiste à ouvrir le port TCP utilisé par btun dans le parefeu de my_host. Par défaut btun se sert du port 12358/tcp. Il faut que le serveur cible puisse se connecter à ce port, s'il ne peut pas, prenez un autre port (option -p). Le port 80 est un très bon candidat, il sera généralement laissé ouvert pour que le serveur cible ait accès au web.

Ensuite vous devez lancer le démon btund sur my_host. Si vous utilisez Slackware et que vous avez installé le package btun, vous pouvez le lancer systématiquement au démarrage en rendant /etc/rc.d/rc.btund exécutable :

chmod +x /etc/rc.d/rc.btund

Il vous faudra préalablement un fichier de configuration indiquant les utilisateurs ayant accès à btun. Par défaut ce fichier est /etc/btund/users mais vous pouvez en indiquer un différent au démarrage de btund (option -u).

La création de ce fichier se fait grace au script btund_add_user.sh. Pour ajouter un utilisateur, tapez simplement :

$ btund_add_user.sh /etc/btund/users Login: login Password: mot de passe

Voilà votre serveur btund est en place. Il vous permettra de controler aisément un (ou plusieurs) serveur(s) cible(s).


Utilisation

Il vous suffira simplement de lancer btun sur le serveur cible puis, quand vous voulez en prendre le contrôle, le lancer également sur une machine quelconque connectée à Internet (ce peut très bien être my_host).

Remarque : vous pouvez utiliser l'utilitaire daemon ou screen pour lancer btun sur le serveur cible en arrière plan.

Vous devez obtenir quelque chose comme :

With btun
[ SVG source ]

L'idée est très simple, le serveur cible se connecte à my_host et c'est bien permis par le parefeu. Puis, depuis n'importe quel machine vous vous connectez à my_host pour prendre le contrôle de la cible.


Lancement de btun

La forme générale de la ligne de commande est :

btun [options] user@my_host nom_canal [-- commande arg1 ... argn]

Le nom du canal peut être ce que vous voulez (par exemple : shell_machine1, X_sur_machine2, …). La commande 'commande arg1 … argn' sera exécutée par btun. Sa sortie standard sera reliée à l'entrée du canal et la sortie du canal à son entrée standard. Ceci laisse donc la possibilité de faire beaucoup de choses intéréssantes.

Les options possibles sont les suivantes :

  • -h : affiche l'aide et quitte.
  • -v : affiche la version et quitte.
  • -t : utilise un pseudo terminal pour exécuter la commande.
  • -f <fichier> : lit le mot de passe depuis le fichier indiqué (ou l'entrée standard si 'fichier' vaut -) plutôt que de le demander au démarrage. Le fichier doit contenir le hash MD5 du mot de passe et peut être créé en utilisant ce script.
  • -p <port> : utilise 'port' à la place du port par défaut (12358).
  • -s <nom > : essaye de charge le greffon nommé 'nom'. Plusieurs greffons peuvent être chargés, le flux de données est traité par chacun d'entre eux dans l'ordre (les greffons les plus courants sont compress, xoror, tee, http…).
  • -o <arg>: passe l'option 'arg' au dernier greffon chargé avec -s.
  • -m : créé un canal maître/esclaves et demande à être le maître.
  • -u : créé un canal non restreint, tous les utilisateurs authentifiés pourront s'y connecter.
  • -r : créé un canal restreint (par défaut), seul l'utilisateur qui l'a créé pourra s'y connecter.
  • -a : créé un canal qui sera fermé dès qu'il ne restera plus qu'un utilisateur connecté.

Les options -m, -u et -a ne fonctionneront que si vous êtes le créateur du canal.

Note : Un canal maître/esclave est un canal dans lequel le maître envoie ses données à tous les esclaves alors que les esclaves n'envoient leurs données qu'au maître. A contrario, dans un canal standard, tout le monde envoie ses données à tout le monde sauf lui même.

Afin d'éviter d'avoir à taper votre mot de passe sans arrêt vous pouvez créer un passfile avec ce script. Attention, ce passfile contient votre mot de passe, vous devez le garder secret. En particulier, assurez vous que vous êtes le seul à pouvoir le lire.


Shell à distance

Le plus simple pour obtenir un shell à distance est de procéder comme suit :

Sur le serveur cible :

$ btun -t login@my_host canal1 -- bash

Sur n'importe quelle machine :

$ btun login@my_host canal1

Tunnels TCP/UDP

En combinant btun avec netcat (page man de netcat) ou tcpmux, il est possible d'obtenir des tunnels UDP ou TCP .

Voici un exemple permettant de tunneler VNC :

Sur le serveur cible :

$ btun login@my_host canal1 tcpmux 127.0.0.1 5900

Sur n'importe quelle machine :

$ btun -f mon_passfile login@my_host canal1 tcpmux 5900 & 

Il est également possible de faire des tunnels avec SSH, voir le paragraphe suivant.


Utilisation avec SSH

Si le serveur cible peut se connecter à lui même (en local donc) par SSH ou que vous avez la possibilité de lancer sshd, alors vous pouvez faire passer SSH par btun !

Sur le serveur cible :

# on se connecte au démon SSH local
$ btun login@my_host canal1 tcpmux 127.0.0.1 22

Sur n'importe quelle machine :

# on simule un démon SSH local sur le port 2022
$ btun login@my_host canal1 tcpmux 2022

Puis sur cette même machine, lorsque vous voulez établir la connexion SSH :

$ ssh -p 2022 localhost

Vous bénéficier ainsi du chiffrage de SSH et de ses nombreuses fonctionnalités (tunneling, X forwarding, …)


Applications X à distance

Redirection X11

La méthode la plus simple pour exécuter des applications X à distance consiste à créer un tunnel TCP comme on l'a fait dans les paragraphes précédents (mais en utilisant le port 6000 cette fois ci).

Ce qui donne :

X with btun
[ SVG source ]

Sur le serveur cible :

# Simule un serveur X local
$ btun login@my_host X1 tcpmux 6001

Sur n'importe quelle machine :

# autorise la connexionau serveur X local
$ xhost +localhost
# se connecte au serveyr X local
$ btun login@my_host X1 tcpmux localhost 6000

Sur le serveur cible encore, quand vous souhaitez démarrer une application X :

$ export DISPLAY=localhost:1
$ emacs &
$ xterm &

Remarque : ceci peut être fait avec un shell distant.

X par SSH

Il suffit de lancer SSH à travers btun (c.f. paragraphe Utilisation avec SSH) en ajoutant l'option -X à ssh pour activer l'X forwarding.


VNC avec btun

Il suffit d'avoir un serveur VNC lancé sur le serveur cible. Il n'est évidemment pas nécessaire que ce serveur soit visible depuis l'extérieur. Ensuite, on créé un tunnel TCP, comme d'habitude :

Sur le serveur cible :

# On se connecte localement au serveur VNC
$ btun login@my_host canal1 tcpmux 127.0.0.1 5900

Sur n'importe quelle machine :

# On simule un serveur VNC local
$ btun -f mon_passfile login@my_host canal1 tcpmux 5900 & 
# Et on s'y connecte
$ vncviewer localhost

Transfert de fichier

Transfert simple

Chez le destinataire (à exécuter en premier) :

$ btun -af mon_passfile login@my_host transfert > fichier_destination

Chez l'expéditeur :

$ btun -f mon_passfile login@my_host transfert < fichier_source

Transferts multiples

Si vous désirez transférer plusieurs fichiers, soit vous en faites une archive que vous envoyez avec la méthode ci-dessus, soit vous utilisez scp ou ftp à travers btun avec un tunnel.


Greffons

Des greffons peuvent être chargé dans btun. Ils traitent les données entrantes et sortantes et permettent ainsi d'étendre les fonctionnalités de btun.

Pour charger un greffon, tapez :

# charge 'plug1' avec les arguments 'arg1' & 'arg2
$ btun -s plug1 -o arg1 -o arg2 login@my_host channel

# charge plusieurs greffons
$ btun -s plug1 -o arg1 -o arg2 -s plug2 -o arg1 login@my_host channel

Remarque : Si vous utilisez plus d'un greffon à la fois, il faudra faire attention à spécifer la même liste de l'autre coté mais dans l'ordre inverse.

xoror

Ce greffon chiffre le canal avec l'algorithme xoror. Il peut prendre deux arguments : la passphrase et la clef. S'ils ne sont pas spécifiés, des valeurs par défaut sont utilisées.

# chiffre les données avec 'ma passphrase'
$ btun -s xoror -o 'ma passphrase' login@my_host channel

compress

Ce greffon permet de compresser les données. Il prend un argument qui est le niveau de compression (entre 0 (rapide) et 9 (efficace)). Le niveau par défaut est 9.

$ btun -s compress login@my_host channel

tee

Enregistre toutes les données passant par le canal sur le disque.

# enregistre dans 'fichier'
$ btun -s tee -o fichier login@my_host channel

http

Ce greffon simule une connexion HTTP (utile pour berner des firewalls de haut niveau).

# coté serveur
$ btun -s http -o server -o Apache login@my_host channel

# coté client
$ btun -s http -o client -o www.host.com -o Mozilla/5.0 login@my_host channel

Conseils

Pensez à garder un (ou plusieurs) canal de secours sur le serveur cible. Ils vous permettront de récupérer la connexion suite à une mauvaise manipulation d'une part et de créer d'autres canaux d'autre part. Le plus simple pour cela est de garder un ou deux bash ouverts sur le serveur cible :

$ screen
$ btun -t -f mon_passfile login@my_host canal_secours_1 -- bash & 
$ btun -t -f mon_passfile login@my_host canal_secours_2 -- bash & 
(Ctrl + a d)

Ou avec l'utilitaire daemon :

$ daemon 'btun -t -f mon_passfile login@my_host canal_secours_1 -- bash'
$ daemon 'btun -t -f mon_passfile login@my_host canal_secours_2 -- bash'

Remarque : le pass file peut être détruit une fois que btun est lancé.





Attachments