Skip to content

irc.szaf.org

Webserver sind ja nichts Besonderes, meinen eigenen Mailserver betreibe ich seit 2002, und einen “richtigen” Newsserver, der nicht nur ein paar lokale Gruppen führt, ebenfalls seit 2005 - und SSH samt SCP und Co. und ggf. FTP sind ja eh dabei. Was fehlt also noch in der Liste der “klassischen” Dienste? Richtig - derjenige, mit dem ich als letztes warm geworden bin und den ich am wenigsten nutze: IRC, der “Internet Relay Chat”.

Nach dem unerwarteten Tod eines Freundes an Ostern 2020 musste sich die Gemeinschaft der Szafe auch eine neue Lösung für die bislang mitgenutzten IRC-Server einfallen lassen, so dass in der Folge selbst ein Netzwerk aufgesetzt wurde - und da wollte ich auch gerne dabei sein und meinen eigenen Server aufsetzen und einbinden.

Installation und Erstkonfiguration

Ich befürchtete schon, das werde sicherlich ganz furchtbar kompliziert, aber dem war angenehmerweise nicht so. Die Software-Wahl war auf den ngircd gefallen, den “next-generation IRC daemon”, und der ist in Debian verfügbar: apt install ngircd reicht also aus, und dann muss nur noch ein wenig an der Konfiguration in /etc/ngircd/ngircd.conf geschraubt werden:

    Name = irc.szaf.org

    AdminInfo1 = (Info zum Administrator, Zeile 1)
    AdminInfo2 = (Info zum Administrator, Zeile 2)
    AdminEMail = (Mailadresse des Administrators)

    Info = Szeep on IRC
    ;MotdPhrase = "irc.szaf.org SzafNet IRC Server. Ready. Bleat ahead."

    Network = szafnet

    Password = Swordfish

[Limits]
    MaxJoins = 20
    MaxNickLength = 25

Wenn man will, kann man auch noch die Zugangsdaten für einen IRC-Operator hinterlegen:

[Operator]
    Name = thh
    Password = pass123

TLS

Dazu dann noch eine Webseite, über die es ein Zertifikat von Let’s encrypt gibt, das man dann auch dem IRC-Server verfüttern kann; die grundsätzliche Vorgehensweise hatte ich ja bereits vor knapp fünf Jahren beschrieben.

Erstmal das Zertifikat einkopieren …

mkdir /etc/ngircd/certs/
cp /etc/letsencrypt/live/irc.szaf.org/fullchain.pem /etc/ngircd/certs/
cp /etc/letsencrypt/live/irc.szaf.org/privkey.pem /etc/ngircd/certs/

… und in der Konfiguration (/etc/ngircd/ngircd.conf) einrichten:

[SSL]
    # SSL-related configuration options.
    CertFile = /etc/ngircd/certs/fullchain.pem
    KeyFile = /etc/ngircd/certs/privkey.pem
    Ports = 6697

Nach service ngircd restart sind wir dann im Geschäft.

Das ganze lässt sich auch automatisieren - ich baue mir ein kurzes Shellscript, bspw. /etc/ngircd/certbot-deploy-certs.sh:

#!/bin/dash
cp /etc/letsencrypt/live/irc.szaf.org/fullchain.pem /etc/ngircd/certs/
cp /etc/letsencrypt/live/irc.szaf.org/privkey.pem /etc/ngircd/certs/
/usr/sbin/service ngircd reload

und mache es ausführbar (chmod 755 /etc/ngircd/certbot-deploy-certs.sh) und setze einen entsprechenden Cronjob vor denjenigen, der alle abgelaufenen Zertifikate rundum erneuert.

Ein kleines Manko hat die ganze Sache noch: leider kann erst der ngIRCd 26~rc1 ein TLS-Zertifikat im laufenden Betrieb nachladen, wenn er mit GnuTLS arbeitet, wie das bei Debian der Fall ist; in früheren Versionen geht das nur bei OpsenSSL. Leider hat Debian Stretch nur die Version 24-1, und auch das aktuelle Debian Buster nur die Version 25-2. Das Script funktioniert also bisher nicht; zwar wird das neue Zertifikat einkopiert, aber der Server verarbeitet es nicht. Dafür wäre ein service ngircd restart notwendig - der aber die Verbindung zu allen Clients und allen verbundenen Servern trennt. Bislang habe ich daher einen alle drei Monate wiederholten Eintrag in meinem Todo-System, um nach dem Zertifikat zu schauen und ggf. den Server manuell zu starten. Mit dem künftigen Debian Bullseye sollte das dann ein Ende haben.

Vernetzung mit anderen IRC-Servern

Alleine chatten ist nett, ein IRC-Netzwerk aufzubauen noch netter. Zu diesem Zweck muss man dem ngircd nur verklicken, welche anderen Server “dazugehören”, und mit denen ein Passwort vereinbaren. Jeder Serverbetreiber notiert dann das eigene Passwort und das der Gegenstelle in der Konfiguration, und schon vernetzen sich die Server - jeder allerdings immer nur mit einem anderen, die Topologie bildet also Linien, keine Sterne. Wenn aber ein Server aus dem Netz fällt, bspw. weil er restartet wird, verbinden sich die verbleibenden Server neu, bis sie alle wieder miteinander verbunden sind.

Eine solche Konfiguration kann dann bspw. so aussehen:

[Server]
    Name = irc.anderer-server.example
    Host = irc.anderer-server.example
    Port = 6697
    MyPassword = OhmyOhmyOhmy
    PeerPassword = Ramalamadingdong
    Group = 1
    Passive = no
    SSLConnect = yes

Das weist diesen Server der Gruppe 1 zu (wenn ein Server innerhalb einer Gruppe nicht verfügbar ist, wird ein anderer ausprobiert), lässt automatische Verbindungen zu und verlangt dafür SSL/TLS. Die Gegenstelle (irc.anderer-server.example) muss natürlich die Werte für MyPassword und PeerPassword vertauschen.

Server neu starten, et voilà: das IRC-Netzwerk steht. Das war einfach - und tut seit April 2020 sehr zuverlässig.

Titelbild © AliFuat - stock.adobe.com

[Nachträglich veröffentlicht im August 2021.]

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen