• BLOG

  • Monter une passerelle de communication IRC / WeeChat / Glowing Bear / Bitlbee (FR)

    mer. 02 août 2017 Dan Lousqui

    Share on: Twitter - Facebook - Google+

    Attention ! Ce billet est en cours de relecture. Il peut y avoir ne nombreuses erreurs dedans. Merci de me faire un retour si vous en trouvez :-)

    XKCD

    Un vrai hacker, bien que seul avec sa cagoule dans sa chambre noire, aime faire parti d'une communauté, et communiquer avec ses pairs. Historiquement, l'outil et le protocole de prédilection est IRC, cependant:

    • il n'est pas toujours facile d'avoir un client adapté ;
    • il faut mettre en place un système des fois complexe pour être connecté 24/7 ;
    • d'autres outils commencent à se mettre en place (Slack, Discord...)

    Mais le vrai hacker sait s'adapter, et il existe des solutions pour garder IRC (même xkcd est d'accord avec moi) !

    XKCD

    Tl; dr: si le contenu du billet ne vous intéresse pas et que vous souhaitez directement installer l'environnement, le Dockerfile est sur le repo github TheBlusky/gloweechat-docker.

    Cahier des charges et briques techniques

    Nous allons donc installer :

    • un client IRC connecté 24/7 ;
    • une interface web pour s'y connecter ;
    • un moyen de se connecter à des serveurs de communication "non-IRC":
      • Facebook ;
      • GTalk ;
      • Slack ;
      • Discord.

    Rien que ça ...

    Pour cela, les softs suivants seront utilisés: WeeChat, Glowing Bear, Bitlbee.

    Et pour être à fond dans le Swag, nous allons créer des images Docker pour faire marcher tout ça !

    Note: Docker n'est pas nécessaire pour effectuer tout ce setup, ça reste cependant le plus simple pour les feignasses. Dans le cas contraire, regardez dans le Dockerfile, et exécutez les commandes commençant par RUN.

    Installation du client IRC, et de sa WebUI

    Pour ceux uniquement intéressés par la partie Bitlbee / Connexion aux passerelles, vous pouvez sauter cette partie

    Plan d'action

    Concernant le client IRC, le hacker n'aime que ceux en ligne de commande. Pour cela, il y a deux challengers :

    • IRSSI - Historiquement le plus répandu, mais vieillissant, et il ne faut pas avoir peur de coder en Perl ;
    • WeeChat - Plus récent, permettant des plugins en Python, avec un store et tout le tralala.

    WeeChat possède également des fonctionnalités de relay (à ne pas confondre avec un BNC). Permettant, via WebSocket de prendre le contrôle du client (qui sera l'interface entre notre WebUI et WeeChat.

    Glowing Bear est un simple script HTML / CSS / JS, se connectant à la WebSocket de WeeChat, afin d'en prendre le contrôle, et d'afficher une interface de chat. En soit, il n'y a aucun intérêt d'installer ce script sur le serveur, mais dans un soucis d'être 100% self-hosted, nous allons le mettre sur la même instance que WeeChat.

    Docker: GloWeeChat

    Il s'agit là d'un conteneur un peu particulier; il exécutera à la fois WeeChat et un serveur nginx. Le serveur nginx hébergera à la fois les fichiers statiques de Glowing Bear et jouera le rôle de reverse proxy sur le WebSocket de WeeChat (afin de ne pas le mettre à poil sur Internet).

    Téléchargez, si ce n'est pas fait, le projet Gloweechat, et exécutez le script de build de l'image GloWeeChat :

    git clone https://github.com/TheBlusky/gloweechat-docker.git
    cd gloweechat-docker/gloweechat
    ./build.sh
    

    Attention !!! En l'état, il s'agit d'une image qui hébergera votre serveur sur HTTP/80, donc non chiffré. C'est idéal si votre image est derrière un frontal TLS/SSL pour docker (jwilder/nginx-proxy ou traefik). Dans le cas contraire, il faut modifier la configuration nginx pour faire du TLS/SSL, ou alors utiliser letsencrypt

    Une fois l'image construite, il faut initialiser la configuration de WeeChat. Note: Personnellement, mes montages Docker se trouvent dans /docker/*projet*.

    mkdir -p /docker/gloweechat/weechat
    chmod -R 777 /docker/gloweechat/weechat # On peut probablement faire mieux ...
    docker run --rm -it \
      --user=weechat \
      -v "/docker/gloweechat/weechat:/weechat/.weechat" \
      blusky/gloweechat weechat
    

    Cela devrait vous ouvrir WeeChat (et c'est la seule fois que l'on aura WeeChat en ligne de commande :-) )

    On peut directement configurer le Relay de WeeChat avec les commandes :

    # A exécuter DANS WeeChat
    /relay add weechat 9001
    /set relay.network.password "your-secret-password"
    /exit
    

    Une fois ces commandes lancées dans votre Docker, celui ci sera automatiquement détruit, mais la configuration sera persistante dans le dossier /docker/gloweechat/weechat (vous pouvez utiliser un ls pour vérifier)

    Utilisation

    En exécutant la commande suivante :

    # Commande pour tester
    docker run --rm -it \
      -v "/docker/gloweechat/weechat:/weechat/.weechat" \
      -p 8080:80 blusky/gloweechat
    # Même commande, en daemon
    # docker run -d \
    #  -v "/docker/gloweechat/weechat:/weechat/.weechat" \
    #  -p 8080:80 blusky/gloweechat
    

    Vous pourrez directement aller sur http://votre-ip:8080 et vous y verrez l'interface de Glowing Bear. Renseigner l'adresse IP du serveur (votre-ip), son port (8080), et votre mot de passe, et vous aurez accès à votre instance IRC directement depuis votre navigateur web.

    Note: bien que le Relay WeeChat soit configuré sur le port 9001, celui ci est "reverse-proxifié" par le nginx sur le port du nginx.

    Attention !!! En l'état, il s'agit d'une image qui hébergera votre serveur sur HTTP/80, donc non chiffré. C'est idéal si votre image est derrière un frontal TLS/SSL pour docker (jwilder/nginx-proxy ou traefik). Dans le cas contraire, il faut modifier la configuration nginx pour faire du TLS/SSL, ou alors utiliser letsencrypt

    Installation de la passerelle pour les autres chats (Bitlbee)

    Plan d'action

    Bitlbee est une "passerelle" pour d'autres plateforme de chat. Le principe de ce logiciel est de créer un serveur IRC qui se connectera aux autres services (Facebook, Discord, XMPP, GTalk, ...). Ainsi, lorsque vous vous connecterez via votre client IRC sur Bitlbee, vous aurez accès à tous vos contacts "non-IRC"... sur IRC !

    XKCD

    Nous installerons également deux plugins bitlbee :

    Docker: bitlbee

    Téléchargez, si ce n'est pas fait, le projet Gloweechat, et exécutez le script de build de l'image bitlbee :

    git clone https://github.com/TheBlusky/gloweechat-docker.git
    cd gloweechat-docker/bitlbee
    ./build.sh
    

    Utilisation

    Avec GloWeeChat

    Cette image est écrite en synergie avec celle de GloWeeChat. Un fichier docker-compose est fournis dans le dépôt git pour lancer les deux images en même temps, sans exposer celle de Bitlbee sur Internet:

    docker-compose up -d
    

    Note: Si vous voulez stocker les data ailleurs que sur /docker/gloweechat, modifiez le docker-compose.yml en conséquence.

    Le docker-compose se chargera de créer une instance de GloWeeChat et de Bitlbee. Vous pouvez donc vous connectez à GloWeeChat via l'adresse http://votre-ip:8080. Une fois sur votre instance, il vous suffit de vous connecter au serveur bitlbee :

    /server add bitlbee bitlbee
    /connect bitlbee
    

    Bitlbee uniquement (sans GloWeeChat)

    Si vous ne souhaitez pas utiliser GloWeeChat, mais uniquement Bitlbee, vous pouvez lancer le conteneur avec la commande suivante:

    docker run -d \
      -v "/docker/gloweechat/bitlbee:/var/lib/bitlbee" \
      -p 6667:6667 blusky/gloweechat
    

    Cette commande créera un serveur IRC (bitlbee) sur votre machine, accessible sur le port 6667. Vous avez juste à vous connecter dessus avec votre client IRC favoris.

    What's next ?

    You're on your own :-) Le but de ce billet n'est pas de faire un tuto, ni sur Bitlbee, ni sur WeeChat.

    Pour cela... RTFM:

  • Comments