Da qualche tempo è uscita la nuova versione del noto server IRC, UnrealIRCd, la 6.0. In questo articolo descriverò come effettuare l’upgrade alla nuova versione, visto che avevo già scritto un articolo con la configurazione del vecchio UnrealIRCd 5.0.

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 libgcrypt20 libgcrypt20-dev libssl-dev -y

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

Installazione di UnrealIRCd 6.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 6.0

Se avete eventuali moduli (ATTENZIONE: i moduli di UnrealIRCd 5.X NON sono compatibili con la 6.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. Alcuni moduli di UnrealIRCd sono stati integrati nella 6.0, come per esempio quello del geo-ip.

Proseguiamo quindi con:

make

E successivamente con:

make install

Upgrade da 5.0 a 6.0

Sostanzialmente, è stata prevista una procedura di upgrade integrata in UnrealIRCd 5.0. Basta impartire il seguente comando per far scaricare, compilare e installare l’ultima versione, creando in automatico anche un backup dell’installazione corrente:

./unrealircd upgrade --unreal6

Bisogna tuttavia cambiare il file di configurazione (unrealircd.conf), nello specifico:

Aggiungere le seguenti righe in cima:

include "snomasks.default.conf";
loadmodule "cloak_md5";

E sostituire il blocco del log {} con quanto segue:

log {
        source {
            !debug;
            all;
        }
        destination {
            file "ircd.log" { maxsize 100M; }
        }
}

Altra nota: le snomask hanno subito modifiche in UnrealIRCd 6, quindi se si usa snomask-on-oper o si utilizza snomask nel blocco oper, andranno modificate in base alle loro nuove funzioni disponibili in questa pagina. Le snomask di default sono ora: +bBcdfkqsSoO

Verificate il file di configurazione, una volta apportate le modifiche, tramite il comando:

./unrealircd configtest

E dopodiché riavviate se è tutto ok con:

./unrealircd restart

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/.

Da inserire nella cartella di installazione di UnrealIRCd in unrealircd/conf/unrealircd.conf, ad esempio se state usando il terminale, potete modificarlo con:

nano unrealircd.conf
#Config by Dragone2 - http://www.risposteinformatiche.it - UnrealIRCd 6.0.3
include "snomasks.default.conf";
loadmodule "cloak_md5";
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.it.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 {
    mask "*@*";
    class clients;
    maxperip 3;
};


allow {
    mask "*@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 { tls; };
};

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 {
        source {
            !debug;
            all;
        }
        destination {
            file "ircd.log" { maxsize 100M; }
        }
}

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 "+bBcdfkqsSoO";
    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; */

    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: 1 maggio 2022 – per UnrealIRCd 6.0.3