Description
IRC est un protocole de communication instantané assez vieux et encore très utilisé.
Le ResEl possède un serveur IRC, interconnecté aux serveurs IRC du réseau Rézosup, qui à pour vocation d'être un canal pour les élèves de prépas et d'école d'ingénieurs française.
Cet article décrit le fonctionnement du serveur IRC, sa configuration, ainsi que son interconnection à Rézosup.
Infrastructure
Le petit rappel
Un serveur IRC fonctionne généralement dans un ensemble de serveur IRC interconnectés entre eux qu'on appelle un réseau. Cette approche décentralisée permet à chaque de séparer les clients pour décharger le travail uniformément sur tout les serveurs du réseau.
Tout les clients connectés au serveur IRC A peuvent discuter entre eux via des canaux (ou channel) de communication sur lequels tout leurs messages seront retransmis à tout les clients des autres serveurs IRCs interconnectés et présent sur le même canal. IRC permet aussi l'envoi de fichier (par des requètes directe). La connexion peut-être établie en clair, ou chiffrée en SSL.
Le serveur IRC offre tout une palette de fonctionnalités, comme des bots qui permettent de gérer un compte (enregistrement d'un pseudo, de préférences, authentification par mot de passe ou par clé cryptographique), de gérer un channel (enregistrement et sécurisation du channel, lock de préférences, d'autorisations,...).
Les différents serveurs IRC d'un même réseau fonctionne en graphe. Un serveur peut être une LEAF, ou un HUB. Une LEAF est simplement connectée à un seul autre serveur, tandis qu'un HUB est un point d'interconnexion de plusieurs serveurs, hub ou leaf.
Au ResEl
Au ResEl, le serveur IRC est installé sur Neko.
Le serveur IRC est Inspircd, il est installé via les dépôts Debian.
Le serveur est un daemon controlable via service inspircd <start|stop|status
.
Le serveur IRC écoute sur toutes les interfaces de Neko, sur les port 6667, 6697, 6767 et 7000.
Le DNS résoud ircs.resel.fr
et irc.resel.fr
vers Neko sur les zones interne, et vers l'IP publique 192.108.116.131
sur la zone internet.
Le firewall est configuré en PORT FORWARDING pour les 3 ports vers Neko.
Architecture IRC
Notre serveur est configurée est leaf qui s'interconnecte au hub de Télécom Paritech : hub.enst.rezosup.org
(137.194.15.138:7000
, fingerprint md5 b9a94c65a63fae932e6926bdfb09f2f0
), ainsi qu'au hub de l'ENS Cachan : hub.ensc.rezosup.org
(138.231.141.150:7000
, fingerprint md5 676973c137fe4380301973685088e8eb
).
Le serveur s'autoconnecte sur ces deux hubs.
Utilisation
Côté utilisateur
Pour accéder au serveur IRC, la première étape est d'installer un client IRC.
Le meilleur client CLI-oriented est irssi. Orienté GUI, l'un des meilleurs est X-Chat. Finalement, pour Android il y a peu de bon client, celui a retenir est AndroIRC.
Ensuite, il faut configurer la connexion au serveur du resel :
- Connexion non sécurisée : serveur :
irc.resel.fr
, port :6667
- Connexion sécurisée : serveur :
ircs.resel.fr
, port :6767
, optionSSL
Le channel principal est #ResEl.
Utilisation d'un Bouncer
Le principal reproche fait à IRC est la non persistence du backlog en cas de déconnexion.
Pour remédier à cela, il est possible d'utiliser un bouncer, qui relait la connexion au serveur sur un intermédiaire restant connecté à internet.
Le moyen le plus simple de bouncer est simplement de se connecter à IRC sur un serveur dans une session screen ou tmux.
Une méthode plus user-friendly est de configurer son client IRC (s'il le peut) à un bouncer prévu à cet effet. Le ResEl en héberge un.
Divers
Voici une petite cheatsheet des commandes d'IRC, pour plus de détails allez voir sur google ou sur wikipedia.
-
/join #<channel>
: pour rejoindre un canal -
/me <msg>
: pour envoyer un message "d'action" sans votre pseudo -
/whois <nickname>
: pour obtenir des informations sur une personne
Côté administrateur
En tant qu'IRCop du serveur, votre travail est d'administrer localement le réseau, et de coopérer avec les autres admins des serveurs du réseau.
Ajouter un IRCop
Pour ajouter un IRCop, il suffit d'ajouter une entrée dans le fichier de configuration opers.conf
sous la forme :
<oper
name="<nickname>"
hash="<algo:sha256|hmac-sha256>"
password="<hash>"
host="*@*"
sslonly="yes"
vhost="staff.telecom-bretagne.rezosup.net"
type="ServerAdmin">
Le name
est le pseudo de l'ircop, il est distinct du compte NickServ de l'IRCop, de même que le password
. Le password
précisé est par ailleurs le hash chiffrée par la méthode indiquée dans hash
. sslonly
doit être définit à true pour authentifier un IRCop uniquement s'il utilise une connexion SSL (pour sécuriser son authentification par mot de passe). Le host
peut être définit plus précisement si souhaité.
Il faut ensuite valider la configuration en effectuant un REHASH du serveur.
REHASH
Le REHASH permet de mettre à jour la configuration d'inspircd sans downtime.
Il suffit qu'un IRCop depuis son client utilise la commande /REHASH
.
Taper des commandes IRCop
Les clients IRCs ne connaissent généralement pas les commandes IRCop (/rehash
, ...). Il faut utiliser une commande pour leur dire d'effectuer cette commande côté serveur.
- Sur irssi :
/quote <commande ircop>
Divers
Pour d'autres actions administrateurs, allez voir la liste des commandes IRCops d'inspricd, renseignez vous sur la mailing-liste Rezosup (envoyez un mail pour vous déclarez nouvel IRCop et qu'il vous y ajoute), ou regardez sur le site des opérateurs de Rézosup ou sur le wiki de Rezosup.
Configuration
La configuration de inspircd se trouve dans le dossier /etc/inspircd
et est séparée dans plusieurs fichiers. La configuration est décrite au format XML.
-
inspircd.conf
: fichier de configuration principal, il inclut tout les autres fichiers de configuration. -
server.conf
: fichier de conf générale.
Ici sont définit les paramètres généraux : ndd, description, nom et amil des admins, paramètres d'écoutes (port, adresse, type de serveur (clients ou serveurs)), paramètres réseaux (timeout, tailles des buffers, etc...), divers (nombres maximum de chan) et hôtes bannis en dur.
Extrait utile :<bind address="" #IP to bind to. port="6697,6767" type="clients" ssl="gnutls" > <bind address="" port="6667" type="clients"> <bind address="" port="7000" type="servers" ssl="gnutls">
On définit ici 3 interfaces d'écoute, address=""
signifie qu'on écoute sur toutes les interfaces de la machine, on écoute donc sur le port 6697 et 6767 pour les clients en sécurisé, sur le port 6667 en non sécurisé, et sur le port 7000 pour l'interconnexion avec les autres serveurs du réseau.
opers.conf : définit les IRCops locaux au serveur. La configuration est plutôt claire, voir ##Ajouter un ircop
links.conf : définit les connexions que le serveur va établir avec les autres serveurs de réseau.
Un lient se définit de la manière suivante :<link name="<ndd du serveur auxquel on veut se connecter>" ipaddr="<ip publique du serveur auxquel on veut se connecter>" port="<port, en général : 700>" allowmask="<masque autorisé, en général : ipaddr/32>" ssl="gnutls" # ou openssl sendpass="<pass, doit correspondre au recvpass du serveur auxquel on veut se connecter>" recvpass="<pass, doit correspondre au sendpass du serveur auxquel on veut se connecter>" fingerprint="<fingerprint du certificat du serveur auxquel on veut se connecter>" hidden="no" >
Il définit aussi le block d'autoconnect, qui précise quel lien va être monté automatiquement. On peut en mettre plusieurs et ils seront testés en roud-robin :
<autoconnect period="120"
server="<name1> ... <nameN>">
-
log.conf
: configuration des logs, ils vont dans/var/log/ircd.log
. -
hubs.conf
: configuration nécéssaire sur le serveur IRC fonctionne en HUB, ce qui n'est pas le cas au ResEl. (Ça pourrait être utile si un jour l'Ensta ou d'autres petites écoles bretonnes souhaite avoir un serveur irc reliés à Rezosup). -
globalconf/
: contient la configuration de tout les modules, et la configuration par défaut, et divers paramètres. C'est celle du serveur inspircd par défaut, il n'est pas nécéssaire d'y toucher. -
ssl/
: Ce dossier contient les certificats SSL nécéssaires à l'établissement des connexions sécurisées. -
rules.txt
: texte des règles du serveur, affiché aux utilisateurs à leur connexion -
motd.txt
: message of the day, affiché aux utilisateurs à leur connexion