Raspberry-Pi-Projekte: IRC-Server

Prof. Jürgen Plate

Raspberry Pi als IRC-Server

Allgemeines

IRC (Internet Relay Chat) ist ein virtueller Treffpunkt, in dem die Teilnehmer in Schriftform Nachrichten austauschen. Man lernt in kurzer Zeit eine Menge User kennen. Mit der anfänglichen Anonymität im Hintergrund kann man schnell und einfach Kontakt zu anderen Leuten zu bekommen. Soweit die Idee hinter dem Programm das 1988 von Jarkko Oikarinen, einem finnischen Studenten, entwickelt wurde und war urspunglich nur als Kommunikationssystem für seine Computer-Mailbox "OuluBox" gedacht war. Es hat sich dann über Finnland und die Vereinigten Staaten im Internet verbreitet und wurde so zu einem weltumspannenden System. Es muss aber nicht gleich weltumspannend sein, denn der eigene IRC-Server bietet eine relativ abhörsichere und spamfreie Alternative zu Facebook und Whatsapp.

Da nicht zuviele Benutzer zu den verschiedensten Themen durcheinander reden, ist das IRC in sogenannte Kanäle unterteilt. Diese Kanäle sind z. B. thematisch geordnet. Jeder Kanal hat einen frei wählbaren Namen, der jedoch in der Regel mit einem Doppelkreuz (#) beginnen muss. Möchte jemand über ein bestimmtes Thema reden, so kann er einfach einen bestehenden Kanal "betreten", oder einen neuen IRC-Kanal erzeugen. Neben den öffentlichen Kanälen gibt es auch private Kanäle.

Die IRC-Sprache ist Englisch: die Kanäle heißen "Channels", die Spitznamen sind "Nicknames" und die Mitteilungen werden "Messages" genannt. Beim lokalen Server gibt es natürliche keine Vorschriften über die Sprache.

Auf der technischen Seite gibt es einerseits den Server, der den IRC-Dienst anbietet und andererseits den sogenannten Client, ein Programm das diesen Dienst nutzt und dem Benutzer den Zugang ermöglicht.

IRC-Server installieren

Das Programm Ircd-Hybrid ist ein freier, leichtgewichtiger und stabiler High-Performance-IRC-Server für kleine, private Netzwerke und kann für den Raspberry Pi als IRC-Server verwendet werden. Die Funktion des Servers umfasst die Gruppenkommunikation in den Channels, ermöglicht aber auch Eins-zu-Eins-Kommunikation über private Nachricht sowie Datenübertragung einschließlich File-Sharing. Zur Installation muss nur ein Paket geladen werden.

sudo apt-get update               # damit man das aktuelle Paket bekommt
sudo apt-get install ircd-hybrid  # IRC-Server

Anschließend muss noch die Konfigurationsdatei mit Ihrem Lieblingseditor bearbeitet werden. Sie liegt im Verzeichnis /etc/ircd-hybrid/ und heisst ircd.conf (beides ist dem Linux-Profi vertraut). Diese Datei ist in einzelne Blöcke gegliedert, die in geschweifte Klammern eingeschloseen sind. Ändern Sie zunächst die Server-Info entsprechend Ihrem RasPi. Ich nehme hier mal Beispiele aus dem Netzmafia-Bereich, wobei die Änderungen fett geschrieben sind. Sie müssen also nur wenige Zeielen ändern:

serverinfo {
    name = "irc.netzmafia.de";
    sid = "001";
    description = Plauderecke der Mafiosi";
    hub = no;
    network_name = "netzmafia";
    network_desc = "Netzmafias Netz";
    max_clients = 32;
};
Die sid (Servers Unique Id) besteht aus drei Zeichen, einer Ziffer als erstes Zeichen und dann zweimal Ziffer oder Großbuchstabe ([0-9][A-Z0-9][A-Z0-9]). Wenn es keinen Nameserver gibt, der den Rechnernamen auflöst, könnte man den Namen in der Datei /etc/hosts eintragen, z. B.
127.0.0.1       localhost irc.netzmafia.de
oder man gibt statt eines Namens einfach die IP-Adresse an.

Danach folgt die Abteilung zur Administration (Kommando /ADMIN). Alle drei Angaben sind notwendig:

administrator {
    description = "Don Vito";
    name = "donvito";
    email = "donvito@netzmafia.de";
};
In der folgenden Abteilung legen Sie fest, wer als Operator arbeiten darf. Die Zeichenfolge *@* beim User bedeutet, dass alle Benutzernamen und IPs sich als Operator für den IRC-Server anmelden dürfen. Sinnvoller ist es hier, den Operator auf einen bestimmten IP-Bereich einzugrenzen. Wird beispielsweise "*@127.0.0.1" genommen, kann nur auf dem Serverrechner selbst administriert werden. "root@127.0.0.1" würde das dann noch auf den User "root" eingrenzen. Das Operator-Passwort für die Anmeldung am IRC-Server können Sie mit Hilfe des Programms mkpasswd <Passwort> generieren und dann in die Konfiguration übertragen. Wenn Sie encrypted = no angeben, darf das Passwort auch im Klartext eingetragen werden (beim Testen bequemer).
operator {
    name = "root";
    user = "*@192.168.*.*";
    password = "YqvbpMDkkEhyY"; # "hello" codiert mit mkpasswd
    encrypted = yes;
    class = "opers";
};
Der Listen-Block legt fest, welche Verbindungen angenommen und welche Ports verwendet werden:
listen {
    host = "0.0.0.0";
    port = 6667;
    # Binde Port 6668 auf IP 127.0.0.1 und verstecke es vor den Statistiken
    flags = hidden;
    host = "127.0.0.1";
    port = 6668;
};
Die Konfigurationsdatei erlaubt noch weitere Einstellung, z. B. Benutzerklassen oder Logging. Eine typische Definition der Benutzerklassen könnte folgendermaßen aussehen:
class {
   name = "restricted";
   ping_time = 5 minutes;
   number_per_ip = 1;
   max_number = 100;
   sendq = 20 kbytes;
};
class {
   name = "users";
   ping_time = 3 minutes;
   number_per_ip = 5;
   max_number = 600;
   sendq = 100 kbytes;
};
class {
   name = "opers";
   ping_time = 1 minutes;
   number_per_ip = 20;
   max_number = 200;
   sendq = 1000 kbytes;
};
class {
   name = "server";
   ping_time = 1 minutes;
   connectfreq = 5 minutes;
   max_number = 1;
   sendq = 5000 kbytes;
};
Für jede Klasse kann eine eigene Authentifizierung festgelegt werden, zum Beispiel:
auth {
   user = "user@irc.netzmafia.de";
   class = "users";
   password = "verschlüsseltes_connect_passwort";
   encrypted = yes;
   flags = need_password, can_idle;
};
auth {
   user = "ircserv@irc.netzmafia.de";
   class = "server";
   flags = need_ident, exceed_limit, kline_exempt, gline_exempt, resv_exempt, can_flood, can_idle;
};
auth {
   user = "irc@127.0.0.1";
   class = "opers";
   password = "verschlüsseltes_connect_passwort";
   encrypted = yes;
   flags = need_password, need_ident, exceed_limit, kline_exempt, gline_exempt, resv_exempt, can_flood, can_idle;
};
auth {
   user = "*@*";
   class = "restricted";
   #password = "klartextpasswort";
   #encrypted = no;
   #flags = need_password, can_idle;
};
Falls auf dem Raspberry Pi kein Ident-Daemon (identd) läuft, muss der Eintrag need_ident weggelassen werden. Für den ersten Test genügt ein einziger Eintrag (ohne Passwort! Das sollten Sie später ändern!):
auth {
        user = "*@*";
        class = "users";
};
Das Logging kann sehr detailliert konfiguriert werden, z. B. Namen und Pfad der Logfiles etc. Meist reicht aber die Angabe des Log-Levels:
logging {
    /* log level: the amount of detail to log in ircd.log.  The
     * higher, the more information is logged.  May be changed
     * once the server is running via /quote SET LOG.  Either:
     * L_CRIT, L_ERROR, L_WARN, L_NOTICE, L_TRACE, L_INFO or L_DEBUG
     */
    log_level = L_WARN;
};
Die Konfiguration erlaubt auch das generelle Ausschliessen von Benutzern. Es wird ein Muster für den User und ein Grund angegeben, zum Beispiel:
kill {
  user = "bad@*.hackers.org";
  reason = "Obviously hacked account";
};

kill {
  user = "*@*apple*";
  reason = "We dont like Apple";
};
Auch ganze IP-Bereiche lassen sich ausschliessen:
deny {
  ip = "10.10.10.0/24";
  reason = "Internal network for test only";
};

Sie sollten die MOTD-Datei (Message Of The Day) für den IRC-Server ändern, indem Sie die Datei /etc/ircd-hybrid/ircd.motd bearbeiten.

Nach den Änderungen der Dateien muss der IRC-Server neu gestartet werden:

/etc/init.d/ircd-hybrid restart

Test und Betrieb

Für den Test und die Nutzung des IRC-Servers benötigen Sie einen IRC-Client. Unter Windows können Sie sich Pidgin, mIRC, HexChat, X-Chat ... oder das Firefox-Plugin ChatZilla herunterladen und intallieren. Unter Linux stehen Pidgin, Smuxi IRC, Quasel IRC, XChat, ... oder das Firefox-Plugin ChatZilla zur Verfügung.

Verbinden Sie sich jetzt mit dem IRC-Server, indem Sie beim jeweiligen Client unter "Network" die Adresse des Servers (z. B. irc.netzmafia.de) und ggf. den Port 6667 eingeben. Unter Umständen ist auf Ihrem Router noch eine Portfreigabe für den o. g. Port notwendig.

Die wichtigsten IRC-Befehle

Befehl Beschreibung
WHOIS
/Whois [Nick]
Beispiel: /Whois donvito
Zeigt Informationen über den angegebenen Nickname an.
NICK
/nick [Nick]
Beispiel: /nick giovanni
Eigenen Nickname ändern.
WHO
/who donvito
Zeigt weitere Infos an.
WHOWAS
/whowas [Nick]
Zeigt an, wann ein User online war.
NAMES
/Names #Channel
Zeigt alle Nicknames in einem bestimmten Channel an.
JOIN
/join #Channel
Betreten einen Channels.
PART
/part #Channel
Verlassen eines Channels.
MOTD
/motd Server oder nur /motd
Zeigt die Nachricht des Tages an.
RULES
/rules
Zeigt die Datei rules.conf an.
LUSERS
/luser
Gibt Informationen über die Anzahl von Verbindungen.
Global und Lokal im Format: Aktuell , Max.
MAP
/map
Listet alle Server auf, die mit dem aktuellen Server verbunden sind.
QUIT
/quit Message
Beendet die Verbindung mit dem IRC-Server.
PING
/ping [Nick]
Pingt den Server oder einen nickname an, um die Round-Trip-Time zu messen.
VERSION
/version
Zeigt die Version des Servers an.
STATS
/stat STAT
Zeigt Server Statistiken an.
LINKS
/links
Zeigt die verlinkten Server an.
ADMIN
/admin
Zeigt den ServerAdmin an
Beispiel: /admin irc.netzmafia.de
INVITE
/invite [Nick] #Channel
Lädt jemanden in den betreffenden Channel ein.
KICK
/kick #Channel [Nick]
Kickt jemanden aus dem jeweiligen Channel.
AWAY
/away GRUND
Meldet sich als abwesend.
LIST
/list
Zeigt alle Channels an.
PRIVMSG
/privmsg [Nick] NACHRICHT
Privaten Chat mit einem User starten.
NOTICE
/notice [Nick] Nachricht
Schickt einem User eine Nachricht.
KNOCK
/knock #Channel
"Anklopfen" bei einem Channel, der auf INVITE (siehe ChannelModes) steht.
SETNAME
/setname DEIN NAME
Verändert den eigenen IRC-Namen.
MODE
/mode EIGENER_NICK FLAG(mode)
Mit Mode lassen sich für die einzelnen Channels oder User Eigenschaften einstellen.
SILENCE
/silence [Nick] oder [Host]
Dasselbe Kommando wie /ignore. Ignoriert einen gewissen Nick bzw Host.

Links


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate und die Autoren
Letzte Aktualisierung: