Serveur IRC avec NgIRCd et LetsEncrypt sous Rocky Linux 8

IRC (Internet Relay Chat) est le grand-père des messageries instantanées, qui existait même avant l’invention du World Wide Web. C’est donc une technologie avec un os dans le nez, mais ce n’est pas pour autant qu’il faut la dénigrer. Parfois, c’est dans les vieilles marmites qu’on fait les meilleures soupes.

Dans cet article, je décris la mise en place d’un serveur IRC avec NgIRCd sous Rocky Linux 8. Voici la configuration que je cherche à obtenir :

Deux canaux de discussion publics prédéfinis.
Un canal de discussion privé prédéfini et accessible par mot de passe.
Le serveur doit accepter les seules connexions chiffrées.

Prérequis

Un serveur dédié sous Rocky Linux 8.
Un domaine valide, par exemple irc.microlinux.fr.
Un certificat pour ce domaine.

Configuration du pare-feu

Ouvrir le port 6667 en TCP :

# firewall-cmd –permanent –add-service=irc
# firewall-cmd –reload
# firewall-cmd –list-services
dns http https imaps irc smtp smtps ssh

Installation

Sous Red Hat Enterprise Linux et Rocky Linux, le paquet ngircd est fourni par le dépôt EPEL, qu’il faudra donc avoir configuré au préalable :

# dnf repolist | grep epel
epel EPEL
epel-modular EPEL Modular
# dnf install -y ngircd

Configuration

La configuration du serveur NgIRCd s’effectue par le biais du fichier /etc/ngircd.conf. Le fichier par défaut livré avec l’installation comporte un peu plus de 400 lignes avec des commentaires détaillés pour chacune des options.

Le principe de fonctionnement de NgIRCd est similaire au serveur de messagerie Postfix dans le sens où l’application comporte une configuration compilée par défaut. À partir de là, il suffit de renseigner les options qui dévient de cette configuration dans le fichier /etc/ngircd.conf, ce qui permet de se retrouver avec un fichier relativement compact.

Pour commencer, j’ai renommé le fichier initial :

# cd /etc/
# mv -v ngircd.conf ngircd.conf.orig
renamed ‘ngircd.conf’ -> ‘ngircd.conf.orig’

Ensuite j’ai expérimenté un peu, pour me retrouver avec la configuration suivante :

# /etc/ngircd.conf
[Global]
Name = irc.microlinux.fr
AdminInfo1 = Serveur IRC Microlinux
AdminInfo2 = France
AdminEMail = info@microlinux.fr
Info = Serveur IRC Microlinux
Listen = 0.0.0.0
Ports = 6668
ServerGID = ngircd
ServerUID = ngircd
[Options]
AllowedChannelTypes =
[SSL]
CertFile = /etc/letsencrypt/live/sd-110196.dedibox.fr/fullchain.pem
KeyFile = /etc/letsencrypt/live/sd-110196.dedibox.fr/privkey.pem
Ports = 6667
[Channel]
Name = #microlinux
Topic = Support Microlinux
[Channel]
Name = #scholae-public
Topic = Discussions publiques
[Channel]
Name = #scholae-secure
Topic = Discussions privées
Modes = k
KeyFile = /etc/ngircd.scholae-secure.key

Cette configuration mérite quelques explications :

Listen = 0.0.0.0 indique que le serveur est à l’écoute de toutes les adresses en IPv4.
L’application tourne avec les droits de l’utilisateur système ngircd et du groupe système associé.
En dehors de la connexion chiffrée spécifiée dans la section [SSL], NgIRCd doit impérativement comporter une configuration sans chiffrement. L’astuce consiste ici à configurer le port « bidon » 6668 sans ouvrir le pare-feu pour ce port. Du coup le port « standard » 6667 sera utilisé pour les connexions chiffrées.
Si l’on définit une chaîne de caractères vide pour l’option AllowedChannelTypes, cela permet d’empêcher la création intempestive de canaux de discussion sur le serveur. Dans ce cas, on souhaite uniquement utiliser les canaux prédéfinis.
Dans la configuration du canal privé #scholae-secure, Modes = k signifie que l’utilisateur a besoin de fournir un mot de passe pour se connecter. Les identifiants de connexion et les mots de passe correspondants sont stockés dans le fichier spécifié /etc/ngircd.scholae-secure.key.

Le fichier /etc/ngircd.scholae-secure.key devra être édité en suivant la syntaxe suivante :

utilisateur:pseudo:mot_de_passe

Concrètement, voici à quoi il ressemblera :

kikinovak:kikinovak:mot_de_passe_de_kikinovak
jmortreux:jmortreux:mot_de_passe_de_jmortreux
wchenaoui:wchenaoui:mot_de_passe_de_wchenaoui
fbanester:fbanester:mot_de_passe_de_fbanester
mchabaud:mchabaud:mot_de_passe_de_mchabaud
ataudiere:ataudiere:mot_de_passe_de_ataudiere

On pourra éditer /etc/ngircd.motd pour fournir un message de bienvenue (Message Of The Day) aux utilisateurs du serveur :

#####################################
# Bienvenue sur notre serveur IRC ! #
#####################################

Régler les permissions de tous ces fichiers de configuration :

# chown root:ngircd /etc/ngircd.*
# chmod 0660 /etc/ngircd.*

L’option –configtest permet de tester la configuration tout en affichant la valeur utilisée pour chaque option :

# ngircd –configtest

Mise en service

Activer et démarrer NgIRCd :

# systemctl enable ngircd –now

Vérifier l’état du service :

# systemctl status ngircd

NgIRCd utilise Syslog pour la journalisation. On utilisera donc journalctl pour afficher les logs :

# journalctl -u ngircd

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Me contacter