IRCIRC (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

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

HexChat


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.

 


2 commentaires

Galaad · 13 février 2024 à 8 h 15 min

Merci pour cet article très clair et intéressent,
Avez vous un client IRC pour android à conseiller ?
quelques chose de facile à prendre en mains et configurer pour des personne pas forcement versé dans la technologie.

    kikinovak · 13 février 2024 à 8 h 29 min

    Aucune idée. J’utilise IRC principalement sur ma station de travail, et là c’est avec HexChat. Le mieux sera sans doute de tester quelques applis IRC et de choisir celle qui vous convient le mieux.

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *