Creare un server IRC con UnrealIRCd – Linux (CentOS 5/6 e Debian)

ATTENZIONE: è disponibile una versione più aggiornata, con relativa guida qui.
Su Internet, la maggior parte delle guide che tratta questo argomento, sono molto confuse o poco complete. Vi spiegherò come installare sul vostro server (vps o dedicato), con CentOS 5 o 6 (è uguale), come installare il demone IRC (IRCd).

Installazione dei pacchetti necessari
Per installare un qualsiasi software su un server linux, devono esserci un compilatore e delle librerie apposite. Tali librerie spesso non sono incluse nel sistema operativo di default, quindi devono essere reperite manualmente. Su CentOS il comando è yum install <libreria/software>, su altre versioni di Linux (Debian ad esempio), il comando è apt-get install, o meglio sudo apt-get install. La parte di installazione di tali pacchetti è diversa per ogni sistema operativo Linux, ma la parte che tratterà l’installazione del demone sarà la stessa.
Per installare il compilatore ecc. ecc. consiglio vivamente di utilizzare il seguente comando:
yum groupinstall “Development Tools”
perché esso installerà tutti i compilatori e le librerie necessarie per compilare qualsiasi sorgente, che sia scritto in C/C++, Perl, Python o altro.
(Per Debian è apt-get install build-essential)
Dopo aver dato questo comando, rispondere digitando:
y
ad ogni domanda (saranno 2 quelle che vi verranno poste, per esempio, su CentOS 6).
Per installare il supporto a SSL utilizzeremo questo comando:
yum install openssl-devel

(Per Debian è apt-get install libssl-dev)
e procederemo nello stesso modo detto sopra, ovvero, rispondendo “y” alle domande poste.
Per quanto riguarda il supporto a zip-links, lo installeremo con il seguente comando:
yum install zlib-devel

(Per Debian è apt-get install zlib1g-dev)
e continueremo a rispondere con “y” alle domande.
Dopo aver compiuto queste semplici operazioni, sarete finalmente pronti all’installazione del demone IRC.

Installazione di UnrealIRCd
Per prima cosa scarichiamo l’archivio contenente UnrealIRCd (in questa guida installeremo l’ultima versione, la 3.2.10.4), con il comando:
wget http://www.unrealircd.com/downloads/Unreal3.2.10.4.tar.gz
scompattiamo poi l’archivio con il comando:
tar -xzvf Unreal3.2.10.4*
entriamo nella cartella del programma digitando:
cd Unreal3.2.10.4
Iniziamo l’installazione del demone con il comando:
./Config
Teniamo premuto Invio finché non il programma di installazione non chiederà dove installare il demone e i relativi files, dopodiché decidiamo se abilitare il supporto a SSL, IPv6 e zip-links (io consiglio di abilitare tutto, rispondendo con Yes e premendo invio, in alternativa verrà utilizzata la scelta di default premendo invio, ovvero “No“). Per il resto, consiglio di lasciare tutto com’è già, premendo ripetutamente il tasto “Invio” finché il programma non avvia la procedura “./configure“. Una volta che finirà, diamo il comando:
make
Se avete scelto di abilitare il supporto SSL, dovrete inserire dei dati in più che vi verranno richiesti, nel caso in cui siate “sfaticati” potete rispondere a tutto premendo invio, l’opzione di default verrà utilizzata (è quella indicata tra parentesi quadre []).
Dopodiché, se avete scelto una cartella diversa da quella contenente i sorgenti di UnrealIRCd digitate il comando:
make install

Installazione dei Moduli
Copiare i moduli in /home/NOMEUTENTE/Unreal3.2.10.4/src/module/
dopodiché dalla cartella Unreal3.2.10.4 aperta dalla shell, digitare:
make custommodule MODULEFILE=NOME-DEL-MODULO-SENZA-ESTENSIONE
ripetere l’operazione per ogni modulo.

Configurazione
Dopo aver inserito il file di configurazione, UnrealIRCd.conf nella cartella di installazione del demone (ne trovate una copia di esempio in questa cartella, scaricatevela via ftp con un client apposito e modificatela seconde le vostre esigenze, è molto semplice da fare, se avete problemi sul sito di UnrealIRCd è disponibile una guida CLICK QUI.

In alternativa è disponibile un file di configurazione funzionante realizzato da me, basta solo modificare dove ho scritto “TUONOME” o “TUAPASSWORD” o “TUONETWORK” e quant’altro. Eccolo qui:

//File di configurazione di UnrealIRCd 3.2.* - A cura di Dragone2 - http://www.risposteinformatiche.it
//Per *NIX: (aggiungere i commenti, ovvero i // se utilizzi Windows con UnrealIRCd)
loadmodule "src/modules/commands.so";
loadmodule "src/modules/cloak.so";
//Per Windows: (togli i commenti, ovvero i // e aggiungili alla parte per *NIX)
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";

//Files di config aggiuntivi (quelli sotto elencati sono quelli di default)
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "dccallow.conf";
include "help.conf";
include "spamfilter.conf";

//Nome del server
me
{
name "irc.mioserver.it";
info "Il nome del mio Network";
numeric 1; //Numeric = numero del server, in questo caso 1, poiché abbiamo solo 1 server
};

//Chi è l'admin del server?
admin {
"Primo Admin";
"mia@email.it";
};

//Frequenza di ping, numero massimo di clients connessi, numero massimo di dati inviati/ricevuti
class           clients
{
pingfreq 90;
maxclients 100;
sendq 100000;
recvq 8000;
};

//Frequenza di ping, numero massimo di servers connessi, numero massimo di dati inviati/ricevuti
class           servers
{
pingfreq 90;
maxclients 10;        /* Max servers we can have linked at a time */
sendq 1000000;
connfreq 100; /* How many seconds between each connection attempt */
};

//Permetti le connessioni da:
allow {
ip             *@*; //Qualsiasi IP
hostname       *@*; //Qualsiasi host
class           clients; //Classe clients
maxperip 3; //Numero massimo di connessioni dallo stesso IP
};

//NETADMIN - /oper TUONOME TUA-PASSWORD
oper TUONOME {
class           clients;
from {
userhost *@*;
};
password "TUA-PASSWORD";
flags
{
netadmin;
get_host;
can_restart;
can_die;
can_zline;
can_gkline;
can_gzline;
get_umodew;
can_override;
can_addline;
};
maxlogins 3; //Numero massimo di tentativi di accesso
modes q; //Modi utente automatici
snomask ceFfGkoqSs; //Server notices visibili
};
//I blocchi oper sotto stanti sono di esempio e non sono necessari se non disponi di altri operatori nel tuo staff.
//SERVICESADMIN
oper TUONICK2 {
class           clients;
from {
userhost *@*;
};
password "TUA-PASSWORD2";
flags
{
services-admin;
get_host;
can_restart;
can_die;
can_zline;
can_gkline;
can_gzline;
can_override;
get_umodew;
};
maxlogins 3;
snomask ceFfGkoqSs;
modes q;
};

//ADMIN
oper TUONICK3 {
class           clients;
from {
userhost *@*;
};
password "TUA-PASSWORD3";
flags
{
admin;
can_rehash;
can_die;
can_restart;
helpop;
can_wallops;
can_globops;
can_localroute;
can_globalroute;
can_localkill;
can_globalkill;
can_kline;
can_unkline;
can_localnotice;
can_globalnotice;
can_zline;
can_gkline;
can_gzline;
get_umodew;
get_host;
can_addline;
can_dccdeny;
};
maxlogins 3;
snomask ceFfGkoqSs;
};

//IRCOP
oper TUONOME4 {
class           clients;
from {
userhost *@*;
};
password "TUA-PASSWORD4";
flags
{
global;
get_host;
can_zline;
can_gkline;
can_gzline;
get_umodew;
};
maxlogins 3;
};

//HELPER
oper TUONICK5 {
class           clients;
from {
userhost *@*;
};
password "TUA-PASSWORD5";
flags
{
local;
get_host;
get_umodew;
};
maxlogins 3;
};

//PORTE DISPONIBILI PER LA CONNESSIONE:
listen    *:6666;
listen    *:6667;
listen    *:6668;
listen    *:6669;

/* PER SSL, non togliere il commento se non hai OpenSSL!
listen    *:6697 {
options {
ssl;
};
};
*/
//Blocco link per i servers:
/*
listen    *:32001 {
options {
serversonly;
};
};

link           server.mionetworkirc.it
{
username    *;
hostname    IP-DEL-SERVER;
bind-ip    *;
port        32001;
hub    *;
password-connect "PASSWORD-DI-CONNESSIONE";
password-receive "PASSWORD-DI-CONNESSIONE";
class           servers;
};
*/
ulines {
services.mionetworkirc.it;
stats.mionetworkirc.it;
};

//PASSWORD PER riavvio e spegnimento server: /die <password> e /restart <password>
drpass {
restart "restart";
die "die";
};

//FILE DI LOG
log "ircd.log" {
maxsize 2097152;
flags {
oper;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};

//ALIAS
alias ns {
target "NickServ";
type services;
};
alias nickserv {
target "NickServ";
type services;
};
alias cs {
target "ChanServ";
type services;
};
alias chanserv {
target "ChanServ";
type services;
};
alias ms {
target "MemoServ";
type services;
};
alias memoserv {
target "MemoServ";
type services;
};
alias bs {
target "Botserv";
type services;
};
alias botserv {
target "Botserv";
type services;
};
alias os {
target "OperServ";
type services;
};
alias operserv {
target "OperServ";
type services;
};
alias vs {
target "HostServ";
type services;
};
alias hostserv {
target "HostServ";
type services;
};
alias global {
target "Global";
type services;
};
alias ss {
target "StatServ";
type stats;
};
alias statserv {
target "StatServ";
type stats;
};

alias hs {
target "HostServ";
type services;
};

//FILE DI MOTD
files
{
motd ircd.motd;
opermotd oper.motd;
botmotd bot.motd;
rules ircd.rules;
tunefile ircd.tune;
};

//NEGA LA CREAZIONE DEI SEGUENTI CANALI:
deny channel {
channel "*warez*";
reason "Il warez è illegale";
};
deny channel {
channel "#canale";
reason "Questo è un canale di esempio";
};
deny channel {
channel "#chan";
reason "Questo è un canale di esempio";
};

//INFO DEL SERVER
set {
kline-address        "irc@mionetwork.it";
gline-address        "irc@mionetwork.it";
modes-on-connect        "+ixw";
modes-on-oper        "+W";
snomask-on-oper        "+cFfGkoqSs";
modes-on-join        "+nt";
level-on-join        "op";
restrict-usermodes        "x";
auto-join            "#CANALE1,#CANALE2";
oper-auto-join         "#irchelp,#oper,#vhost";
anti-spam-quit-message-time    "60s";
oper-only-stats         "bCdDeEfFGIklLnOqSsUvVXYz";
maxchannelsperuser         "10";
channel-command-prefix    "!";
allow-userhost-change         "force-rejoin";
options {
hide-ulines;
flat-map;
show-opermotd;
show-connect-info;
fail-oper-warn;
allow-insane-bans;
};
nopost {
ban-action        "kline";
ban-reason        "autoKline by nopost - Info at irc@mionetwork.it";
ban-time        "1h";
except-hosts    "localhost";
};
//NOME DEL NETWORK
network-name         "MIO-NETWORK-IRC";
//SERVER DI DEFAULT:
default-server         "irc.mionetworkirc.it";
services-server           "services.mionetwork.it";
stats-server         "stats.mionetwork.it";
help-channel         "#irchelp";
//Prefisso per i vhost automatici degli utenti
hiddenhost-prefix        "MioNetwork";
watch-away-notification    "yes";
//VHOST per le oper
hosts {
local        "helper.mionetwork.it";
global        "ircop.mionetwork.it";
coadmin        "coadmin.mionetwork.it";
admin              "admin.mionetwork.it";
servicesadmin     "serviceadmin.mionetwork.it";
netadmin            "netadmin.mionetwork.it";
host-on-oper-up       "yes";
};
throttle {
connections 3;
period 60s;
};
anti-flood {
nick-flood 4:60;
unknown-flood-bantime    "12h";
unknown-flood-amount    "4096";
};
default-bantime            "12h";
spamfilter {
ban-time             "1h";
ban-reason         "Spam/Advertising";
virus-help-channel     "#irchelp";
};
check-target-nick-bans    "yes";
ping-cookie            "yes";
pingpong-warning            "yes";
//DA MODIFICARE con caratteri casuali, IMPORTANTE:
cloak-keys {
"2UXXHAJZBWKe55IQYZTZr6yBsdfsfsfsHG1kIHtd0";
"ZzNN2GGvi9fsdfsjg3rmd3a8LpsfddfsfnRySqkt81L";
"cTXNPC9IgvhTfksMjIIFvCjMshdfghjsfgjshdgfjhsML4u";
};
};

official-channels {
"#CANALE1";
"#CANALE2";
};

Nota: il file di configurazione è stato testato e funziona, non risulta nessun errore sia su Windows che su *NIX (CentOS, Ubuntu, Debian ecc.). In caso di errori provare a togliere o aggiungere i commenti in base al sistema operativo utilizzato.

Avvio
Per avviare UnrealIRCd digitare dalla cartella dove è stato installato Unreal:
./unreal start

Rehash
Per rehashare (ricaricare il config, magari modificato durante l’avvio del demone), digitare il comando:
./unreal rehash

Riavvio
Per riavviare il demone IRC, digitare:
./unreal restart

Arresto
Per arrestare UnrealIRCd, digitare:
./unreal stop

Guida aggiornata il 3 aprile 2015 – Inserito file di configurazione, aggiornamento versione.