Attenzione: questo articolo è obsoleto, è disponibile una guida aggiornata per UnrealIRCd 6.0 QUI.

Il 13 dicembre 2019 è uscita la nuova versione del noto server IRC, UnrealIRCd, la 5.0. Sviluppata nel corso di qualche mese, la nuova versione include diversi miglioramenti (basti pensare alla riscrittura di diverse parti importanti dell’IRCd, in vista del supporto a IRCv3). In questo articolo descriverò come effettuare l’upgrade alla nuova versione, visto che avevo già scritto un articolo con la configurazione del vecchio UnrealIRCd 4.0. Ne sconsiglio comunque l’upgrade a chi ha attualmente moduli di terze parti installati, visto che vanno riscritti completamente per la 5.0. Aggiornamento: sono stati pubblicati i moduli aggiornati alla 5.0, sul sito ufficiale.

Installazione dei pacchetti necessari

Per installare un qualsiasi software su un server GNU/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 (e altre distro basate su RHEL o che comunque utilizzano yum) il comando è yum install <libreria/software>, su altre versioni di Linux (Debian e Ubuntu ad esempio), il comando è apt install, o meglio sudo apt install. La parte di installazione di tali pacchetti è diversa per ogni distribuzione GNU/Linux, ma la parte che tratterà l’installazione del demone sarà la stessa.
Per installare il compilatore ecc. consiglio vivamente di utilizzare il seguente comando, se state usando CentOS:

sudo yum groupinstall "Development Tools" -y && sudo yum install make cmake openssl openssl-devel -y

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 e derivate è:

sudo apt install wget make gcc build-essential openssl libcurl4-openssl-dev zlib1g zlib1g-dev zlibc libgcrypt20 libgcrypt20-dev libssl-dev -y

Dopo aver compiuto queste semplici operazioni, sarete finalmente pronti all’installazione del demone IRC.

Installazione di UnrealIRCd 5.0

Dopo aver seguito le istruzioni descritte già nell’articolo precedente (ovvero installare le dipendenze necessarie per compilare UnrealIRCd), procediamo scaricato l’archivio contenente i sorgenti di UnrealIRCd da compilare, grazie al comando:

wget --no-check-certificate --trust-server-names https://www.unrealircd.org/downloads/unrealircd-latest.tar.gz

Il seguente comando, con il parametro “–no-check-certificate” evita che si verifichino problemi a causa del certificato SSL utilizzato dal sito web di UnrealIRCd.
Fatto ciò estraiamo l’archivio:

tar -xvf unrealircd-*.tar.gz

Se avete ancora in esecuzione il vecchio UnrealIRCd, chiudetelo (il comando via chat è /die <password>, usando il mio config è /die die) e rinominate la vecchia cartella con il comando:

mv <vecchia-cartella-di-UnrealIRCd> UnrealIRCd-Backup

Adesso compiliamo il nuovo IRCd, entriamo nella cartella dei sorgenti:

cd unrealircd-*

A questo punto non ci resta che digitare il comando:

./Config

E premere sempre Invio, perché tanto non c’è niente da cambiare, i parametri che ci suggerisce sono perfetti così come sono.

Moduli di UnrealIRCd 5.0

Se avete eventuali moduli (ATTENZIONE: i moduli di UnrealIRCd 4.X NON sono compatibili con la 5.0. Attualmente i moduli disponibili verranno pubblicati su un unico sito web, ovvero qua) da installare, potrete farlo tramite il comando ./unrealircd module install autore/nome-del-modulo, una volta completata l’installazione di UnrealIRCd, come descritto qui. Faccio anche notare, che una serie di moduli realizzati da Gottem, sono stati integrati all’interno di UnrealIRCd 5.0, un elenco completo è disponibile qua.

Proseguiamo quindi con:

make

E successivamente con:

make install

Upgrade da 4.0 a 5.0

Sostanzialmente, il file di configurazione di UnrealIRCd 4.0 va bene anche per la 5.0, ma bisogna fare alcuni accorgimenti:

Il blocco

except tkl { ... }

è diventato:

except ban { ... }

Mentre è stata rimossa l’opzione:

set::opers-only-stats

che è stata sostituita con il suo opposto, ovvero:

set::allow-user-stats

Quest’ultima opzione è quindi eliminabile dal file di configurazione senza problemi. In ogni caso, se proverete ad avviare UnrealIRCd con il config della 4.0, riceverete solo un avviso, ma il demone partirà senza problemi.

Altra nota: il modulo m_nopost è stato rimosso, quindi se utilizzavate l’opzione set:nopost{} per personalizzare la kline in caso di richiesta http sulla porta 6667 o simile, va tolto o riceverete un errore.

Il blocco relativo a official-channels invece è deprecato ed è consigliabile rimuoverlo.

File di Configurazione

Attenzione: ho inserito anche le blacklist per la funzionalità BOPM integrata in UnrealIRCd, con tanto di blocco per le eccezioni. È situata nella parte finale del config.

Nota: per il MOTD e le regole, bisogna creare i files ircd.motd e ircd.rules nella cartella unrealircd/conf/.

#Config by Dragone2 - http://www.risposteinformatiche.it - UnrealIRCd 5.0.1
include "modules.default.conf";
include "operclass.default.conf";
//loadmodule "third/<modulo>"; <-- serve a caricare un modulo esterno a UnrealIRCd, ovvero scaricato a parte

include "help/help.conf";
include "badwords.conf";
include "spamfilter.conf";

me {
    name irc.tuoserver.it;
    info "Server IRC di Prova";
    sid 001;
};

admin {
     "Nome-Amministratore";
     "indirizzo@email.it";
};

class clients {
    pingfreq 90;
    maxclients 250;
    sendq 99000;
    recvq 5500;
};

class servers {
    pingfreq 180;
    maxclients 10;
    sendq 1000000;
    connfreq 100;
};


allow {
    ip "*@*";
    class clients;
    maxperip 3;
};


allow {
    ip "*@127.0.0.1";
    class servers;
    maxperip 20;
};

oper NetAdmin {
    class clients;
    mask *;
    password "CAMBIAMI";
    maxlogins 3;
    operclass netadmin-with-override;
    modes "q";
    vhost "netadmin.prova.it";
    swhois "is a Network Administrator";
};
oper ServicesAdmin {
    class clients;
    mask *;
    password "CAMBIAMI";
    maxlogins 3;
    operclass services-admin;
    modes "q";
    vhost "servicesadmin.prova.it";
    swhois "is an Administrator";
};

/* SSL
listen {
    ip *;
    port 6697;
    options { ssl; clientsonly; };
};
*/
listen {
    ip *;
    port 6667;
};

//SERVICES
listen {
    ip 127.0.0.1;
    port 6669;
};
link services.prova.it {
    incoming {
        mask *;
    };
    password "CAMBIAMI";
    class servers;
};

ulines {
    services.prova.it;
};

drpass {
    restart "restart";
    die "die";
};

log "ircd.log" {
    maxsize 20972;
    flags {
        oper;
        connects;
        server-connects;
        kills;
        errors;
        sadmin-commands;
        chg-commands;
        oper-override;
        spamfilter;
    };
};

alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };

alias "services" {
    format "^#" {
        target "chanserv";
        type services;
        parameters "%1-";
    };
    format "^[^#]" {
        target "nickserv";
        type services;
        parameters "%1-";
    };
    type command;
};

alias "identify" {
    format "^#" {
        target "chanserv";
        type services;
        parameters "IDENTIFY %1-";
    };
    format "^[^#]" {
        target "nickserv";
        type services;
        parameters "IDENTIFY %1-";
    };
    type command;
};

alias "glinebot" {
    format ".+" {
        command "gline";
        type real;
        parameters "%1 2d Bots are not allowed on this network";
    };
    type command;
};

alias "glineproxy" {
    format ".+" {
        command "gline";
        type real;
        parameters "%1 2d I Proxies non sono ammessi su questo network";
    };
    type command;
};

ban nick {
    mask "*C*h*a*n*S*e*r*v*";
    reason "Reserved for Services";
};

ban user {
    mask *@*tor*;
        reason "Proxies are not allowed!";
};

ban realname {
    mask "sub7server";
    reason "Virus sub7";
};

except ban {
    mask    *@127.0.0.1;
};

deny dcc {
    filename "*sub7*";
    reason "Possible Sub7 Virus";
};

deny channel {
    channel "*warez*";
    reason "Warez is illegal";
};

deny channel {
    channel "#canale";
    reason "Questo è un canale di esempio";
};

deny channel {
    channel "#chan";
    reason "Questo è un canale di esempio";
};

set {
    network-name         "Prova";
    default-server         "irc.prova.it";
    services-server     "services.prova.it";
    stats-server         "stats.prova.it";
    help-channel         "#IRCHelp";
    hiddenhost-prefix    "Prova";
    allow-userhost-change "force-rejoin";
    prefix-quit         "Uscito da Prova:"; 
    modes-on-join       "+ntG";
    cloak-keys {
      "aoAxaax2r1HnR625gsdfl3sJ7hVzddddd4Zb7x4YwpWd";
      "aib62fgt7eufgve2dsf3g25352gwydfsfsfs2u8gZhBd";
      "oij7ghvtf6sdfrd3cF22525gytfuGdfdffduiuh79d6d";
    };

    };

set {
    kline-address         "indirizzo@email.it";
    modes-on-connect "+ixw";
    modes-on-oper         "+ixwgs";
    snomask-on-oper "+bcFfGkoqSs";
    oper-auto-join         "#Opers,#IRChelp,#vHost";
    options {
        hide-ulines;
        identd-check;
        show-connect-info;
    };
    
    auto-join         "#Prova,#Prova2";

    maxchannelsperuser 20;

    restrict-usermodes "xs";

    anti-spam-quit-message-time    60s;
    
    /* static-quit "Client quit";    */
    /* static-part yes; */

    /* oper-only-stats "bCdDeEfFGIklLnOqSsUvVXYz"; -- RIMOSSO NELLA 5.0 */

    anti-flood { connect-flood 3:60; };

    anti-flood {
        nick-flood 4:60;    
        unknown-flood-bantime    "12h";
        unknown-flood-amount    "4096";
    };
    default-bantime        "12h";
    spamfilter {
        ban-time 1d;
        ban-reason "Spam/Advertising";
        virus-help-channel "#IRCHelp";
        except "#IRCHelp";
    };
};
include "aliases/anope.conf";

#BlackList - BOPM - by Dragone2 - http://www.risposteinformatiche.it
blacklist dronebl {
    dns {
        name dnsbl.dronebl.org;
        type record;
        reply { 2; 3; 5; 7; 8; 9; 10; 255; };
    };
    action gline;
    ban-time 7d;
    reason "Host nella lista DroneBL. Per maggiori informazioni visita http://dronebl.org";
};

blacklist blitzed {
    dns
    {
        name opm.blitzed.org;
        type record;
        reply { 1; 2; 4; 8; 16; };
    };
    action gline;
    ban-time 7d;
    reason "Mi spiace, un Open Proxy e' stato trovato sul tuo host. Visita http://www.blitzed.org per maggiori informazioni.";
};

blacklist njabl {
    dns {
        name dnsbl.njabl.org;
        type record;
        reply { 9; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella nostra Lista Open Proxy... http://www.njabl.org";
};

blacklist virbldnsbl {
    dns {
        name virbl.dnsbl.bit.nl;
        type record;
        reply { 2; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella nostra Lista Virus... http://virbl.bit.nl/list.php";
};

blacklist dnsblsectorde {
    dns {
        name tor.dnsbl.sectoor.de;
        type record;
        reply { 1; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella lista TOR Server... http://www.sectoor.de/";
};

blacklist nomorefun {
    dns {
        name no-more-funn.moensted.dk;
        type record;
        reply { 10 ; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella nostra lista Open Proxy... http://moensted.dk/";
};

blacklist sorbs {
    dns {
        name dnsbl.sorbs.net;
        type record;
        reply { 2; 3; 4; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella nostra lista Open Proxy Sorbs.net.. http://dnsbl.sorbs.net/";
};

blacklist winbots {
    dns {
        name spbl.bl.winbots.org;
        type record;
        reply { 1; 2; 3; 4; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' nella nostra Lista WinBots.org ... Invia un'email a cobi@winbots.org per risolvere.";
};

blacklist noderebellion {
    dns {
        name dronebl.noderebellion.net;
        type record;
        reply { 3; 4; 5; 10; 14; 17; 19; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo IP e' in lista in DroneBL, visita http://www.noderebellion.net/";
};

blacklist dnsblacklist {
    dns {
        name dnsblacklist.co.uk;
        type record;
        reply { 3; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo host e' nella lista dnsblacklist.co.uk.";
};

blacklist torsector {
    dns {
        name tor.sectoor.de;
        type record;
        reply { 1; };
    };
    action gline;
    ban-time 7d;
    reason "Sei nella lista tor.sectoor.de DNSBL. Visita http://www.sectoor.de/tor.php";
};

blacklist proxybl {
    dns {
        name dnsbl.proxybl.org;
        type record;
         reply { 2; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo host e' nella lista proxyBL. Per maggiori informazioni, visita www.proxybl.org/";
};

blacklist abuse {
    dns {
        name dnsbl.abuse.ch;
        type record;
        reply { 2; 3; 4; 5; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo host e' nella lista dnsbl.abuse.ch. Per maggiori informazioni, visita www.dnsbl.abuse.ch/removal.php";
};

blacklist martynip {
    dns {
        name dnsbl.martynip.co.uk;
        type record;
        reply { 2; 3; 4; 5; 6; 10; };
    };
    action gline;
    ban-time 7d;
    reason "Il tuo host e' nella lista dnsbl.martynip.co.uk";
};

blacklist efnetrbl {
    dns {
        name rbl.efnetrbl.org;
        type record;
        reply { 1; 2; 3; 5; };
    };
    action gline;
    ban-time 7d;
    reason "Host presente nella lista rbl.efnet.org. Visita http://rbl.efnet.org";
};

#Blocco eccezioni
except blacklist {
        mask 85.25.137.*;
        mask 109.169.31.*;
};

Più o meno il file di configurazione è questo, ovviamente dovete modificarlo in base alle vostre esigenze. Per avviarlo/fermarlo, utilizzate:

cd ~/unrealircd/
./unrealircd start/stop

I comandi son sempre uguali, cambia solo il nome dell’eseguibile da ./unreal a ./unrealircd.
Se avete problemi vi invito a visitare la sezione dedicata alla documentazione su UnrealIRCd, che è stata recentemente aggiornata in stile wiki, disponibile qui.
Se desiderate utilizzare SSL con un certificato generato con Let’s Encrypt ho scritto una breve guida sul forum a questo link.

Ultimo aggiornamento: 16 febbraio 2019 – per UnrealIRCd 5.0.3.1

1 Commento

  • David
    Il 21 Dicembre 2019 15:05 0Likes

    Guida aggiornata, perfetta e utile in caso di sviste o dubbi. Grazie 😉