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.]
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt