WorkShop-Unrealircd_3.2_19
Tutorial Thema: UnrealIRCD 3.2 Workshop
Anmerkung:
Dieser Unreal IRCD WorkShop wurde von einem GastAutor erstellt, weiteres unten.
Er wurde unzensiert und unbehandelt auf IRC-Mania.de aufgenommen !
Sollte ein hier präsentierter WorkShop extrem viele Fehler aufweisen, bitte ich um eine Benachrichtigung WorkShopKritik@IRC-Mania.de
Autor: Kokoloris
URL: http://www.IRC-Promotion.de
Email: Kokoloris@IRC-Promotion.de
1. Installation
Zur Installation des UnrealIRCd muss ein cc oder gcc Compiler auf dem PC oder der Shell installiert sein.
Dann läd man sich den aktuellen UnrealIRCd (3.2-beta19) von www.unrealircd.com herunter. Dies machen wir mithilfe von wget mit folgendem Befehl in einem belibigm Verzeichnis:
wget http://www1.dnwt.net/~unreal/Unreal3.2-beta19.tar.gz
Nach kurzer Zeit ist das Archiv komplett herunter geladen und es muss durch folgenden Befehl entpackt werden:
tar fzxv Unreal3.2-beta19.tar.gz
Alle Dateien aus dem Archiv wurden nun in das Verzeichnis Unreal3.2 entpackt und wir betreten daher dieses Verzeichnis:
cd Unreal3.2
Um mit der Installation zu beginnen, führen wir das Config-Script aus:
./Config
Wenn wir den ‚Startbildschirm‘ sehen, gelangen wir durch das Drücken auf [ENTER] weiter zu den ‚Release Notes‘. Diese blättern wir ebenfalls durch das Drücken der Taste ENTER durch. Nach dem Text werden einige Fragen gestellt, die während des Compilierens von Bedeutung sind:
Do you have an insecure operating system and therefore want to
use the server anti-spoof protection?
[No] -> Yes
Diese Frage beantworten wir zur Sicherheit mit ‚Yes‘.
What directory are all the server configuration files in?
[/home/unreal/Unreal3.2] ->
Hier lassen wir das aktuelle Verzeichnis stehen und drücken ENTER.
What is the path to the ircd binary including the name of the binary?
[/home/unreal/Unreal3.2/src/ircd] ->
Normal ist auch das Verzeichnis der Quelldateien bereits richtig angegeben und es kann durch ENTER zur nächsten Frage gesprungen werden.
Would you like to compile as a hub or as a leaf?
Type Hub to select hub and Leaf to select leaf.
[Hub] ->
Auch hier wird meißt Hub gewählt, da ein Hub zu mehreren Server gelinked werden kann und ein Leaf nur zu einem. Also springen wir durch Drücken von ENTER zur nächsten Frage:
What is the hostname of the server running your IRCd?
[fruchtserver] ->
Der Hostname ist im Normalfall auch bereits richtig voreingestellt und wir bestätigen es durch ENTER.
What should the default permissions for your configuration files be? (Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted reading of the file
[0600] ->
Hier müssen die Lese-/Schreibrechte eingestellt werden. Wenn 0600 stehen bleibt, können keine ‚fremden‘ User, die zugriff auf den Server haben diese Dateien lesen bzw. verändern. Somit sollte man diese Voreinstellung ebenfalls mit ENTER übernehmen.
Do you want to support SSL (Secure Sockets Layer) connections?
[No] ->
Auf die Frage, ob SSL unterstüzt werden soll, kann im Normalfall deaktiviert bleiben, da kaum jemand eine SSL-Verbindung ins IRC nutzt. Wenn SSL verfügbar sein soll, muss diese Frage jedoch mit ‚Yes‘ beantwortet werden.
Do you want to enable IPv6 support?
[No] ->
Da IPv6 von den meißten Clients ebenfalls noch nicht unterstützt wird, kann es deaktiviert bleiben und wir gelangen durch ENTER zur nächsten Frage:
Do you want to enable ziplinks support?
[No] -> Yes
Diese Frage sollte mit ‚Yes‘ beantwortet werden, wenn mehrere Server verlinkt werden sollen. Diese können die Daten durch diese Funktion gepackt übertragen und somit Traffic sparen.
If you know the path to zlib on your system, enter it here. If not
leave this blank
[] ->
Wenn man das Verzeichnis zu ‚zlib‘ kennt, sollte man es hier eingeben.
Do you want to enable prefixes for chanadmin and chanowner?
This will give +a the & prefix and ~ for +q (just like +o is @)
Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient, PJIRC, etc.)
with the notable exceptions of irssi, KVIrc and CGI:IRC.
This feature should be enabled/disabled network-wide.
[No] ->
Wenn der Channelbesitzer und kick-geschützte Benutzer ein & bzw. eine ~ vorm Nick haben sollen, gibt man hier Yes ein. Wir machen jedoch weiter mit ENTER.
What listen() backlog value do you wish to use? Some older servers
have problems with more than 5, others work fine with many more.
[5] ->
Weiter mit ENTER
How far back do you want to keep the nickname history?
[2000] ->
Auf die Frage, wie lange die Nicks gespeichert werden, kann ebenfalls die Standardeinstellung von 2000 Minuten übernommen werden.
What is the maximum sendq length you wish to have?
[3000000] -> 1500000
Diese Funktion gibt an, wie groß der Send-Buffer vom Server maximal sein darf. Für die meißten Server sollte 1500000 in Ordnung sein. Also tippen wir dieses ein und bestätigen mit ENTER.
How many buffer pools would you like?
This number will be multiplied by MAXSENDQLENGTH.
[18] ->
Hier wird die Anzahl der Buffer eingestellt. Diese Funktion kann mit der Standardeinstellung übersprungen werden (ENTER).
How many file descriptors (or sockets) can the IRCd use?
[1024] ->
Diese Einstellung gibt gibt an, wie viele Verbindungen der Server benutzen darf. Man kann es höher stellen aber oft wird die Anzahl der Verbindungen vom Betriebssystem eingeschränkt.
Would you like any more parameters to configure?
Write them here:
[]->
Wenn weitere Parameter zur Konfiguration hinzugefügt werden sollen, können diese hier eingefügt werden. Wir starten die Konfiguration ohne weitere Parameter sofort durch ENTER.
Dieser Vorgang kann je nach Rechner einige Minuten dauern. Sobald dieser Vorgang abgeschlossen wurde, geben wir
make
ein und der Server wird Compiliert. Nachdem der Server nach einiger Zeit komplett installiert ist, gehen wir weiter zur Konfiguration:
2. Konfiguration
Jetzt müssen wir eine Konfigurationsdatei erstellen. Wir geben folgenden Befehl ein, um eine leere Datei zu erstellen:
vi unrealircd.conf
Jetzt haben wir den Editor ‚vi‘ geöffnet und können die leere Datei bearbeiten. Der Editor ist vielleicht ein bisschen gewöhnungsbedürftig aber man kommt relativ schnell damit klar. Als erstes drücken wir die Taste ‚a‘ um in den INSERT-Modus zu gelangen.
Jetzt können wir in diese Datei schreiben und fügen als erstes die folgende Zeile ein, um die Standardbefehle zu laden:
loadmodule „src/modules/commands.so“;
Um die Übersicht nicht zu verlierden, können wir jetzt ein paar zeilen frei lassen und den me-Block einfügen:
me {
name „irc.MusterIRC.net“;
info „Hauptserver des MusterIRCs“;
numeric 1;
};
In diesem Block werden Daten über den Server festgelegt. Als erstes der Name das Servers, eine kurze Beschreibung und eine Zahl. In einem IRC-Netzwerk, das aus mehreren Servern besteht, müssen die server durchnummeriert werden. Also braucht jeder Server eine eindeutige Kennziffer und wir beginnen hier mit der Nummer 1. Auch, wenn der Server alleine steht, sollte hier 1 angegeben werden.
admin {
„kokoloris“;
„kokoloris@MusterIRC.net“;
„www.MusterIRC.net“;
};
In dem admin-Block werden die Daten eingegeben, die angezeigt werden sollen, wenn ein User /admin in seinen IRC-Client eingibt. Dieser Block ist nicht auf drei Zeilen begrenzt, sondern kann durch beliebig viele Zeilen ergänzt werden.
class clients {
pingfreq 90;
maxclients 500;
sendq 100000;
recvq 8000;
};
Als nächstes wird die Klasse ‚clients‘ erstellt. Dieser Klasse werden alle normalen User zugeordnet (mehr dazu später) und es gelten folgende Regeln: Der Server pinged den Client alle 90 Sekunden, um zu überprüfen, ob er noch existiert; Es können maximal 500 Clients zu diesem Server verbinden; Der Send-Puffer ist auf 100000 beschränkt; Der Receive-Puffer ist auf 8000 beschrängt. Dann wird folgendermaßen eine Klasse ’servers‘ erstellt:
class servers {
pingfreq 90;
maxclients 50;
sendq 1000000;
connfreq 100;
};
In dieser Klasse werden später alle gelinkten Server zugeordnet und es gelten die folgenden Regeln: Die gelinkten Server werden ebenfalls alle 90 Sekunden gepinged; Es können maximal 50 Server gleichzeitig verbunden sein; Der Send-Puffer beträgt 1000000; Wenn autoconnect eingeschaltet ist, versucht der Server alle 100 Sekunden zu dem jeweiligen Server zu verbinden.
listen 127.221.142.86:6667 {
options {
ssl;
clientsonly;
};
};
Der listen-Block gibt an, auf welchen Ports der Server Verbindungen annimmt. Hier nimmt der Server nur Verbindungen auf der IP 127.221.142.86 und dem Port 6667 an. Außerdem ist auf diesem Port SSL aktiviert (die Option darf nur gewählt werden, wenn SSL zu beginn der Installation aktiviert wurde) und es können nur Clients verbinden. Statt der IP kann auch * als Wildcard eingesetzt werden und der options-Block kann komplett weg fallen. Hier ein paar weiltere Beispiele:
listen 127.221.142.86:8067;
listen *:6668;
listen *:6660-6669;
Als nächstes müssen Passwörter gesetzt werden, mit denen der IRC-Server neu gestartet und komplett aus geschaltet werden kann:
drpass {
restart „rspass“;
die „sdpass“;
};
Durch diesen drpass-Block kann ein Admin, der dazu berechtigt ist, den Server durch den Befehl ‚/restart rspass‘ neu starten und durch den Befehl ‚/die sdpass‘ komplett beenden.
Jetzt kommen wir zu den Server-logs. Diese kann man zum Beispiel folgendermaßen trennen:
log „ircd.log“ {
maxsize 2097152;
flags {
oper;
server-connects;
errors;
};
};
log „ircd.stuff.log“ {
maxsize 2097152;
flags {
kline;
kills;
connects;
tkl;
};
};
In diesem Beispiel wird alles in zwei logs geloggt. In der ircd.log finden wir alle Oper-Versuche, Server-Verbindungen und Fehler und in der ircd.stuff.log werden klines, kills, Verbindungen zum Server und tkls (glines, shuns, tklines, tzlines, gzlines) gelogged.
link de.MusterIRC.net {
username *;
hostname 217.125.68.4;
port 7029;
password-connect „linkpass“;
password-receive „linkpass“;
class servers;
options {
autoconnect;
zip;
ssl;
};
};
In diesem link-Block wird der Server de.MusterIRC.net mit unserem Server (irc.MusterIRC.net) gelinked.
Als Username geben wir einen * ein, da der Server keine Ident zum Verbinden benutzt und es so etwas einfacher ist 😉
Der Hostname ist die IP von de.MusterIRC.net (würde man de.MusterIRC.net eingeben, könnte unser Server zwar zu ihm Verbinden aber wenn de.MusterIRC.net zu unserem Server verbindet, kann unser Server ihn nicht erkennen. Somit sollte man die IP benutzen).
Der Port gibt an, auf welchen Port unser Server verbinden soll. de.MusterIRC.net muss natürlich auf diesem Port offen sein (listen-Block).
Password-connect wird gesendet, wenn unser Server zu de.MusterIRC.net Verbinden möchte und wenn de.MusterIRC.net zu unserem Server verbindet, muss er password-receive zu uns senden.
Als Klasse wird die oben definierte Klasse ’servers‘ angegeben. Somit treffen die Regeln der Klasse für diesen Server zu.
Für weitere Optionen steht der options-Block zur Verfügung. In diesem Beispiel versucht der Server automatisch zu dem anderen Server zu verbinden (autoconnect); Alle Daten, die zwischen den Servern gesendet werden, werden komprimiert (zip); SSL ist aktiviert. (SSL und zip nur, wenn es bei der Installtion ausgewählt wurde)
Durch ULines bekommen bestimmte Server mehr Rechte als normale Server. Diese Funktion sollte daher nur für Services und Stats verwendet werden. Das könnte folgendermaßen aussehen:
ulines {
services.MusterIRC.net;
stats.MusterIRC.net;
};
Dann kommen wir zur eigentlichen Netzwerkkonfiguration:
Den set-Block ist in zwei Teile unterteilt. Der erste Teil sollte auf allen verlinkten Servern gleich sein, damit keine Probleme entstehen.
set {
ident {
connect-timeout 19s;
read-timeout 40s;
};
network-name „MusterIRC“;
default-server „irc.MusterIRC.net“;
services-server „services.MusterIRC.net“;
stats-server „stats.MusterIRC.net“;
help-channel „#MusterIRC“;
hiddenhost-prefix „Muster“;
prefix-quit „Quit: „;
cloak-keys {
xxxxx;
xxxxx;
xxxxx;
};
hosts {
local „locop.MusterIRC.net“;
global „ircop.MusterIRC.net“;
coadmin „coadmin.MusterIRC.net“;
admin „admin.MusterIRC.net“;
servicesadmin „csops.MusterIRC.net“;
netadmin „netadmin.MusterIRC.net“;
host-on-oper-up „no“;
};
};
Wenn ein Client (Benutzer) zum Server verbindet, fragt dieser nach der Ident. Das connect-timeout gibt an, wie lange der Server versucht zum Ident-Server des Clients zu verbinden (19 Sekunden in diesem Beispiel). Der read-timeout gibt an, wie lange der Server, nachdem eine Verbindung aufgebaut wurde, auf die Antwort wartet (40 Sekunden in diesem Beispiel).
Als nächstes wird der Name vom Netzwerk gesetzt (network-name). Dann der Standardserver, der in der Regel ein Verteiler ist aber auch ein einzelner Server sein kann. Dieser wird angezeigt, wenn ein Server voll ist.
Als servicees-server und stats-server muss ein Server angegeben werden, auf dem die Services liegen. Wenn keine Services vorhanden sind, kann man irgendwas (z.B. services.Network.de) als services-server angeben. Der stats-server kann ausgelassen werden.
Der help-channel gibt einen Channel an, in dem die User Hilfe bekommen.
hiddenhost-prefix wird dem host vorangestellt, wenn der User +x hat (z.B. User@Muster-3842D790.ipt.aol.com) und prefix-quit der Quitmessage (z.B. (Quit: pennen)).
Die cloak-keys dienen der Verschlüsselung des Hosts. Es müssen drei Zahlen über 10000 sein. So entsteht aus pD954D921.dip.t-dialin.net beispielsweise Muster-BB896AF.dip.t-dialin.net. (Die Werte müssen in der BeispielConfig noch geändert werden!)
Weiter können Hosts für die verschiedenen IRCOP’s und Admins bestimmt werden. Wenn die Option host-on-oper-up auf „yes“ gestellt wird, werden diese Hosts beim Einloggen als IRCOP angenommen.
Der zweite Set-Block kann von Server zu Server unterschiedlich sein. Es ist aber zu empfehlen den Großteil dennoch auf allen Servern gleich zu machen.
set {
kline-address „kline@preacherIRC.net“;
modes-on-connect „+x“;
modes-on-oper „+xwgsfF“;
snomask-on-oper „+sefG“;
oper-auto-join „#services“;
modes-on-join „+nt“;
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
identd-check;
show-connect-info;
};
maxchannelsperuser 15;
anti-spam-quit-message-time 10s;
oper-only-stats „*okGvEOQCHYntTDd“;
throttle {
connections 4;
period 60s;
};
anti-flood {
nick-flood 3:60;
unknown-flood-bantime 17s;
unknown-flood-amount 4000;
};
};
Zuerst wird eine E-Mail-Adresse gesetzt, an die man sich wenden kann, wenn ein kline auf den eigenen host gesetzt wurde.
Dann die User-Modes, die jeder normale User automatisch bekommt. In diesem Beispiel wird nur +x (hiddenhost) gesetzt, eine Sinnvolle Alternative wäre +xG (hiddenhost und Badwordfilter), wobei G manuell wieder entfernt werden kann.
modes-on-oper werden beim Einloggen als IRCOP verteilt,
snomask-on-oper gibt an, welche Server-Notices die IRCOPs automatisch erhalten (s=ServerNotices, e=eye-Notices, f=flood-Notices, G=gline/shun-Notices),
oper-auto-join gibt an, in welchen Channel IRCOPs automatisch beim Einloggen gehen,
modes-on-join let fest, welche Channel-Modes automatisch gesetzt werden, sobald der erste User den Channel betritt.
Dann wird der DNS-Server eingestellt, der benutzt wird, um die Userhosts aufzulösen.
Als Optionen werden in diesem Beispiel hide-ulines (Versteckt die U-Lined-Server in der /map (z.B. services.MusterIRC.net und stats.MusterIRC.net)), ident-check (Wenn ein Ident-Server vorhanen ist, wird dessen Antwort als ident benutzt) und show-connect-info („ident request“, „hostname lookup“, etc werden als Notice angezeigt) gesetzt.
Außerdem darf jeder User nur in 15 Channel gleichzeitig sein und muss mindestens 10 Sekunden online sein, damit die Quit-Message angezeigt wird. Für den Befehl /stats werden Außerdem einige Flags für normale User verboten.
Weiter wird durch den throttle-block festgelegt, dass ein host nur 4 Connections haben darf und dann 60 Sekunden warten muss, um mehr Verbindungen auf zu bauen. Außerdem darf jeder den Nick nur dreimal in 60 Sekunden wechseln und ein Flooder wird 17 Sekunden gebanned, wenn er 4000 KiloBytes sendet.
Als nächstes müssen Admins und IRCOPs für unseren Server angelegt werden:
oper kokoloris {
class clients;
from {
userhost *@*dip.t-dialin.net;
};
password „operpass“;
flags {
services-admin;
admin;
netadmin;
global;
can_rehash;
can_die;
can_restart;
can_wallops;
can_globops;
can_localroute;
can_globalroute;
can_globalkill;
can_kline;
can_gzline;
can_gkline;
can_unkline;
can_localnotice;
can_globalnotice;
can_zline;
get_umodew;
get_host;
can_override;
};
};
zuerst wird der Login-Name (kokoloris) gesetzt. Dann wird festgelegt, dass der User in die Klasse „clients“ kommt und nur von einem Host von T-Online connecten darf (auch userhost *@*; ist erlaubt). Durch das Passwort (operpass) kann sich der Admin folgendermaßen einloggen: /oper kokoloris operpass
Dieser Admin hat die Rechte, die ihm durch die Flags zugewiesen werden. Hier eine kleine (evtl. unvollständige) Liste aller Flags:
can_rehash |
kann die Config neu laden (/rehash) |
can_die |
kann den IRCd beenden (/die) |
can_restart |
kann den IRCd neu starten (/restart) |
helpop |
Usermode +h (erhält messages von /helpop) |
can_wallops |
kann Wallops senden (/wallop) |
can_globops |
kann /globops versenden |
can_localroute |
kann lokal Server verbinden (/connect) |
can_globalroute |
kann global Server verbinden (/connect) |
can_localkill |
kann lokal User killen (/kill) |
can_globalkill |
kann global User killen (/kill) |
can_kline |
kann User bannen (/kline) |
can_unkline |
kann User unbannen (/kline -u@h) |
can_localnotice |
kann lokale Server-Notices senden |
can_globalnotice |
kann globale Server-Notices senden |
can_zline |
kann IPs local bannen (/zline) |
can_gkline |
kann User global bannen (/gline) |
can_gzline |
kann IPs global bannen (/gzline) |
get_umodew |
setzt Usermode +W (/whois wird angezeigt) |
get_host |
setzt den oper-host beim Einloggen |
can_override |
OperOverride (kann durch bans gehen oder +ikl Channels joinen (/invite) oder Channelmodes setzen sowie kicken ohne OP zu sein) |
Außerdem stehen folgende Flags zur Verfügung, die andere Flags einschließen:
local: | global: | admin/coadmin: | services-admin: | netadmin: |
can_rehash |
can_rehash |
can_rehash |
can_rehash |
can_rehash |
helpop |
helpop |
helpop |
helpop |
helpop |
can_globops |
can_globops |
can_globops |
can_globops |
can_globops |
can_wallops |
can_wallops |
can_wallops |
can_wallops |
can_wallops |
can_localroute |
can_localroute |
can_localroute |
can_localroute |
can_localroute |
can_localkill |
can_localkill |
can_localkill |
can_localkill |
can_localkill |
can_kline |
can_kline |
can_kline |
can_kline |
can_kline |
can_unkline |
can_unkline |
can_unkline |
can_unkline |
can_unkline |
can_localnotice |
can_localnotice |
can_localnotice |
can_localnotice |
can_localnotice |
can_globalroute |
can_globalroute |
can_globalroute |
can_globalroute |
|
can_globalkill |
can_globalkill |
can_globalkill |
can_globalkill |
|
can_globalnotice |
can_globalnotice |
can_globalnotice |
can_globalnotice |
|
global |
global |
global |
||
admin |
||||
services-admin |
Zum Schluss noch den allow-Block, damit überhaupt Clients verbinden können:
allow {
ip *@*;
hostname *@*;
class clients;
maxperip 3;
};
Verbindungen con allen IP’s und allen Host’s werden aktzeptiert und in die e „clients“ gesteckt. allerdings sind nur 3 Verbindungen pro ouml;glich.
p;
t drückt man auf Esc und gibt ein:
s=“code“>:wq
die Datei wird gespeichert und der Editor beendet.
p;
Starten en IRC-Server zu starten wird nur folgender Befehl eingegeben:
s=“code“>./unreal start
p;
Spaß mit dem eigenen Server 🙂
Kokoloris