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 CentOS 7. 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.

$ sudo firewall-cmd --permanent --add-service=irc
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dns ftp http https imap imaps irc smtp smtps ssh xmpp-client
  ports: 50001-50010/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Installation

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

$ sudo yum install 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 moins 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.

$ sudo mv -v ngircd.conf ngircd.conf.orig
‘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/microlinux.fr/fullchain.pem
  KeyFile  = /etc/letsencrypt/live/microlinux.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:Nico:mot_de_passe_de_kikinovak
jmortreux:Jean:mot_de_passe_de_jmortreux
adebuf:Agnes:mot_de_passe_de_adebuf
fbanester:Fanny:mot_de_passe_de_fbanester
fteyssier:Franck:mot_de_passe_de_fteyssier
vaudigier:Vincent:mot_de_passe_de_vaudigier

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.

$ sudo chown root:ngircd /etc/ngircd.*
$ sudo chmod 0660 /etc/ngircd.*

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

$ sudo ngircd --configtest

Mise en service

Activer et démarrer NgIRCd

$ sudo 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.

 

Catégories : Serveur