Installazione di UnrealIRCd 4 – *NIX

Quest’oggi (24 dicembre 2015) è uscita la nuova versione del noto server IRC, UnrealIRCd, la 4.0. Sviluppata nel corso di svariati anni, la nuova versione include tantissime novità che rendono più semplice l’installazione e la configurazione del software. In questo articolo descriverò come effettuare l’upgrade alla nuova versione, visto che avevo già scritto un articolo con la configurazione del vecchio UnrealIRCd 3.2.

Installazione

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 (a me ha dato problemi su Debian 7, quindi ho dovuto inserire questo parametro in più).
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.
Se avete eventuali moduli (ATTENZIONE: i moduli di UnrealIRCd 3.2.X NON sono compatibili con la 4.0. Potete trovarne alcuni aggiornati qua) da compilare, inseriteli in /home/<vostroutente>/unrealircd-4.0.11/modules/third/ e dopodiché andremo avanti con i comandi:

make

E successivamente con:

make install

Upgrade da 3.2 a 4.0

Ciò ci garantirà l’effettiva installazione di UnrealIRCd in /home/<vostroutente>/unrealircd/ e degli eventuali moduli. Arrivati a questo punto, prendete i vecchi files di configurazione e spostateli in /home/<vostroutente>/unrealircd/conf/. Potete farlo con questi comandi:

cd ~/Unreal-Backup
cp *.conf ~/unrealircd/conf
cp *.pem ~/unrealircd/conf/ssl
cp *.crt ~/unrealircd/conf/ssl
cp *.rnd ~/unrealircd/conf/ssl
cp *.motd ~/unrealircd/conf/
cp *.rules ~/unrealircd/conf
cd ~/unrealircd/
./unrealircd upgrade-conf

File di Configurazione

Update: 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 4.0.11
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;
    
    nopost {
        ban-action        "kline";
        ban-reason        "Auto-Kline by nopost - Info at indirizzo@email.it";
        ban-time        "1h";
        except-hosts    "localhost";
    };
    /* static-quit "Client quit";    */
    /* static-part yes; */

    oper-only-stats "bCdDeEfFGIklLnOqSsUvVXYz";

    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";
    };
};
official-channels {
    "#Prova";
    "#IRCHelp";
    "#Opers";
    "#Services";
    "#vHost";
};

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.
Aggiornamento: 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 aprile 2017 – aggiornata per UnrealIRCd 4.0.11.