![]() |
Raspberry-Pi-Projekte: IRC-ServerProf. Jürgen Plate |
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.
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.deoder 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
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.
| 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. |