Accéder à Google Talk via Jwchat
Par Benjamin Drieu le lundi 10 décembre 2012, 16:10 - Geek - Lien permanent
Cette bidouille a été mise en place pour mon amie qui souhaite accéder à Google Talk de derrière un firewall facho. Il s'agit d'utiliser l'interface XMPP de google talk pour déployer un client XMPP web sur une machine tierce de confiance. J'ai nommé, jwchat !
Cette procédure est adaptée à Debian Wheezy (stable à l'heure où j'écris ces lignes). Il s'agit d'installer Jwchat et Punjab pour la couche transport. Alors avant de continuer, il faut quand même dire que vous utilisez Gootle Talk à vos risques et périls en termes de vie privée. Loin de moi l'idée d'encourager à utiliser ce service, mais on ne choisit pas toujours ses amis et encore moins leur système de discussion électronique.
Installation de Jwchat
apt-get install jwchat
Malheureusement, la version de libjs-jac installée sur Debian Wheezy est buguée et produit du XML invalide pour discuter en XMPP. Il faut donc backporter un paquet plus récent.
J'ajoute donc testing dans les sources de APT, puis :
apt-get source libjs-jac cd jsjac-1.3.4+dfsg dpkg-buildpackage
Et en root, j'installe le paquet produit :
cd .. dpkg -i libjs-jac_1.3.4+dfsg-1_all.deb
Puis il faut configurer jwchat. Dans le fichier /etc/jwchat/config.js
, on va retrouver notamment les directives suivantes:
var DEFAULTRESOURCE = "gmail.com"; var SITENAME = "xxx.drieu.org"; var BACKENDS = [ { name:"Native Binding", description:"Pubjab HTTP Binding backend", httpbase:"/http-bind/", type:"binding", }, ];
Remplacer SITENAME par votre site, évidemment.
Il faut ensuite configurer Apache pour servir jwchat. Ces lignes sont à placer dans le virtualhost idoine:
Alias /jwchat/ /usr/share/jwchat/www/ <Directory /usr/share/jwchat/www/> Options +Indexes +Multiviews +FollowSymLinks </Directory>
Une authentification par mot de passe HTTP est plus que conseillée par la maison à ce niveau, se référer aux documentations de Apache.
Installation de Punjab
Punjab va faire le lien entre gtalk et jwchat et notamment transformer une communication stateless en session XMPP valide. Punjab se récupère sur github.
Décompresser l'archive, puis se référer au fichier INSTALL de Punjab. Les dépendances sont Python 2.6, Python-Twisted 11.1 (mais en réalité je le fais fonctionner avec le Python-Twisted de Debian, soit le 10.1.0 sans problème) et pyopenssl si vous souhaitez faire du XMPP sécurisé (non nécessaire).
Pour configurer le bousin :
tar vxzf punjab-X.X.tar.gz cd punjab python setup.py install
Toute la configuration se fait dans le fichier punjab.tac
. Voici mon fichier:
root = static.File("./html") bosh = HttpbService(1) bosh.white_list = ['gmail.com', 'google.com'] root.putChild('http-bind', resource.IResource(bosh)) site = server.Site(root) application = service.Application("punjab") internet.TCPServer(5280, site).setServiceParent(application)
Puis pour exécuter punjab :
twistd punjab
Un fichier twistd.log
contiendra les logs de Punjab.
Configuration d'Apache
Punjab va écouter en HTTP sur le port 5280, ce qui est très bien pour recevoir les commandes envoyées par jwchat, mais des mécanismes de sécurité empêchent Javascript d'envoyer des commandes sur des sites tiers, il faut donc que sur le même serveur que celui d'Apache on ait une redirection. Voici donc ma configuration Apache (qui est un peu overkill):
ProxyPass /http-poll/ http://localhost:5280/http-poll/ ProxyPassReverse /http-poll/ http://localhost:5280/http-poll/ ProxyPass /http-bind/ http://localhost:5280/http-bind/ ProxyPass /http-bind http://localhost:5280/http-bind ProxyPassReverse /http-bind/ http://localhost:5280/http-bind/ ProxyPassReverse /http-bind http://localhost:5280/http-bind
Et voilà, plus qu'à tester en se rendant sur http://xxx.drieu.org/jwchat/, ça marche !