Anterior Siguiente Inicio

1. Servidor de IRC
          Por problemas técnicos se me ha ido al traste el anterior Howto, así que para rehacerlo rápidamente me basaré en el de Francisco Gaytán Muñoz

En un principio tenía instalado dancer-ircd en mi GNU/Debian, y los bots de servicios eran dancer-services. Dado que no fui capaz de linkar más servidores, al final probé Unrealircd, que a pesar de tener que compilarlo, el proceso es realmente sencillo. La ventaja es que en Suse solo hay un ircd, entonces al compilarUnreal en el pc con Suse y en el pc con Debian, quedaban ambos con el mismo servidor de irc.
    Sólo encontré un problemilla a la hora de compilar, y es que si instalas Unreal en un directorio distinto al de las fuentes, faltan un par de archivos. Simplemente copia esos archivos al directorio adecuado, o bien instalalo en el directorio de las fuentes.
La mayor parte de las preguntas que se hacen durante la compilación son obvias, quizás ésta es la única que puede causar duda:

Would you like to compile as a hub or as a leaf?
Type Hub to select hub and Leaf to select leaf.
[Hub] -> [enter]

La diferencia entre Hub y Leaf radica en que el primero lo debemos elegir si tenemos un servidor al que vamos a linkar varios servidores. Si a nuestro servidor no se va a linkar nadie, debemos compilarlo como leaf.

Al terminar la compilación, debemos configurarlo. Para ello debemos crear un fichero unrealircd.conf, o bien copiar el ejemplo y modificarlo a nuestro gusto.

A continuación detallo la configuración de Unrealircd:

me {
        name "braindead.fromdahell.org";
        info "Braindead IRC Server";
        numeric 1;
     };

Aquí definimos el nombre del servidor y la información. numeric 1 indica el número de servidor (1-254); cuando tengamos dos o más servidores linkados no pueden tener igual número.

admin {
        "Zug";
        "zug@fromdahell.org";
           };

Aquí ponemos nuestra información, la información del administrador del ircd. Se puede ver tecleando el comando /admin. Es el equivalente a las A lines de otros ircds.

class clients
{
        pingfreq 90;
        maxclients 500;
        sendq 100000;
};

En esta seccion definimos la clase clients; en ella la frecuencia a la que se comprobará si el usuario sigue "vivo" (pingfreq), el máximo de clientes que aceptamos (maxclients) y sendq, que es el límite de información enviada por el usuario de esta clase.

class servers
{
        pingfreq 90;
        maxclients 4;
        sendq 1000000;
};

Aquí hemos definido una nueva clase: servers. La frecuencia de ping será 90, máximo 4 servidores linkados a nosotros y 1000000 de límite de envio.

allow {
        ip *;
        hostname *;
        class clients;
        maxperip 2;
};

Con esta línea aceptamos conexiones de clientes desde cualquier IP (*), cualquier hostname (*) y con un máximo de dos conexiones por IP (clones).

allow {
        ip *;
        hostname *@deneb.freedomshell.com;
        class clients;
        maxperip 10;
};

Con esto permitimos 10 clones desde el host deneb.freedomshell.com.

oper zug {
        class clients;
        from {
                userhost *@192.168.0.2;
        };
        password "aAtCDSu1zCb4k";
        flags
        {
                netadmin;
                global;
        };
};

Aquí definimos los operadores de red que habrá en nuestra red: definimos operador zug que se conecta desde la IP 192.168.0.2, será admnistrador de red (netadmin). El password no es aAtCDSu1zCb4k, está encriptado. Para generar passwords encriptados entraremos en el directorio crypt de Unreal3.2, y a continuación haremos un make, se generará la utilidad mkpasswd; con ella podemos generar los passwords encriptados. Nota: si quisieramos que zug fuese solamente ircop, sustituiríamos netadmin por ircop en la seccion flags. Os incluyo aquí la lista completa de flags, sacada del fichero unrealircd.conf.txt incluido en UnrealIRCD:

Old     | New             |Description
------- |---------------- |------------------------------
N | netadmin | Network Admnistrator
T | techadmin | Technical Administrator
A | admin | Server Administrator
a | sadmin | Services Operator
C | coadmin | Co Administrator
o | local | Local IRC Operator
O | global | Global IRC Operator
r | can_rehash | Is able to rehash the server
e | eyes | Can use the eyes message mode
D | can_die | Can shutdown the server (with password)
R | can_restart | Can restart the server (with password)
h | helpop | ..is available for help. Can see /helpops
g | can_globops | Can use /globops
w | can_wallops | Can use /wallops
l | locop | Can't kill remote users
c | can_localroute | Can locally /connect and /squit servers
L | can_globalroute | Can globally /connect and /squit servers
k | can_localkill | Can do local /kills
K | can_globalkill | Can do global /kills
b | can_kline | Can set a /kline
B | can_unkline | Can unset a /kline
n | can_localnotice | Can send local notices
G | can_globalnotice| Can send global notices
z | can_zline | Can set /zlines
^ | can_stealth | Is invisible to /names


Para hacernos oper, ejecutaríamos /oper usuario clave. Una vez que somos opers, podemos releer la configuración de unreal sin tener q matar el proceso e iniciarlo de nuevo, con un simple /rehash.

listen *:6600;
listen *:6667;
listen *:8888;

Aquí decimos a través de qué puertos se podrá conectar a nuestro servidor. He definido el puerto 6600 para linkar con los services (chanserv, nickserv, memoserv...), el puerto 6667 que es el más habitual y el 8888, para que se pueda entrar desde sitios donde chapan conexiones al puerto 6667, por ejemplo universidades :-).

link    servicez.fromdahell.org {
        username        *;
        hostname        *;
        bind-ip         *;
        port            6600;
        hub             *;
        password-connect        "servpass";
        password-receive        "servpass";

        class   servers;
        options { autoconnect; };
};

Este bloque es opcional, solamente si vas a añadir services a tu servidor. Aquí definimos el nombre de los services: servicez.fromdahell.org, en el puerto 6600 (el que reservamos para estos). El password de conexion y recepción será el mismo, en este caso servpass.

link    alamut.fromdahell.org {
        username        *;
        hostname        213.37.65.30;
        bind-ip         *;
        port            6667;
        password-connect        "clavedelink";
        password-receive        "clavedelink";

        class servers;
        options { autoconnect; };
};

Esta sección es también opcional, solamente si vais a linkar varios servidores. En este caso linkaremos con el servidor alamut.fromdahell.org, con IP 213.37.65.30, por el puerto 6667 y con la clave clavedelink. Ten en cuenta que la configuración del servidor alamut debe tener numeric 2, ya que el numeric de braindead es 1, y no pueden ser iguales. Debes tener tambien a tener en cuenta que, si tienes services puestos, en alamut no debes añadir el link a los services, solamente la linea ulines que comentamos más abajo.

ulines {
        servicez.fromdahell.org;
};

Debemos incluir esta línea para que los services funcionen, en este caso son servicez.fromdahell.org.

drpass {
        restart         "restartpass";
        die             "diepass";
};

Aquí ponemos los passwords de reinicio y "muerte" del servidor.

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

Con esta línea reservamos los nicks que contengan chan para los services.

ban user { mask *PhAnATiC*@*; reason "scripts no permitidos"; };
ban user { mask *ircap*@*; reason "scripts no permitidos"; };
ban user { mask *DTP*@*; reason "scripts no permitidos"; };
ban user { mask *x-cript*@*; reason "scripts no permitidos"; };
ban user { mask *MESIAS*@*; reason "scripts no permitidos"; };
ban user { mask *orbital*@*; reason "scripts no permitidos"; };
ban user { mask *zombie*@*; reason "scripts no permitidos"; };

Esto también es opcional, es un ejemplo de como banear los malditos scripts que abundan por irc-hispano.

vhost {
        vhost           my.sample.vhost;
        from {
                userhost        *@*;
        };
        login           user;
        password        password;
};

Con esto definimos un vhost, con user "user" y password "password", disponible para cualquier usuario. Para usarlo sería: /vhost user password

set {
        network-name            "irc.fromdahell.org";
        default-server          "braindead.fromdahell.org";
        services-server         "servicez.fromdahell.org";
        stats-server            "statz.fromdahell";
        help-channel            "#fromdahell";
        hiddenhost-prefix       "fromdahell";
        prefix-quit             "";
        cloak-keys {
                10000;
                20000;
                30000;
        };
        /* on-oper host */
        hosts {
                local           "locop.fromdahell.org";
                global          "ircop.fromdahell.org";
                coadmin         "coadmin.fromdahell.org";
                admin           "admin.fromdahell.org";
                servicesadmin   "csops.fromdahell.org";
                techadmin       "techadmin.fromdahell.org";
                netadmin        "netadmin.fromdahell.org";
                host-on-oper-up "yes";
        };
};   

set {
        kline-address            "zug@fromdahell.org";
        modes-on-connect         "+xwG";
        oper-auto-join           "#opers";
        dns {
                nameserver 127.0.0.1;
                timeout 2s;
                retries 2s;
        };
        options {
                enable-opermotd;
                enable-chatops;
                hide-ulines;
                webtv-support;
                identd-check;
        };

        socks {
                ban-message "Insecure SOCKS server";
                quit-message "Insecure SOCKS server";
                ban-time "4d";
        };
        maxchannelsperuser 10;

};

Aquí definimos la información de la red.

loadmodule "src/modules/m_sethost.so";
loadmodule "src/modules/commands.so";

Y finalmente cargamos los modulos m_sethost y commands; el primero de ellos para que un operador se pueda poner el vhost que quiera sin tener que modificar la configuración mediante /sethost my.virtual.host; el segundo añade una serie de comandos como /who.

Servicios Epona:

Qué es Epona?

Epona es un conjunto de bots de servicio (Nickserv, Chanserv, Memoserv, Botserv y Operserv). Funciona para diversos ircds: Dreamforge, Bahamut, Unreal y Ultimate ircd.

En este documento explicaré exclusivamente cómo se instalan y configuran los Epona services.

· Chanserv: Registro y manejo de canales.
· Nickserv: Registro y manejo de nicks.
· Memoserv: Envio de mensajes a usuarios con nick registrado.
· Botserv: Creación y configuración de bots para canales.
· Operserv: Estadísticas del irc y comandos para IRCops.

Compilación e Instalación

A continuación explico como hice la configuración:

Creamos un usuario para los services, yo usé el mismo usuario que para el ircd: user ircd. A continuación bajamos la última version de epona de su página web y hacemos lo siguiente:

bash$ tar zxvf epona-1.4.6.tar.gz
bash$ cd epona-1.4.6
bash$ ./configure
       

Leemos la información que aparece :). Os comento lo que yo he ido eligiendo:

In what directory do you want the binaries to be installed?
Press Return for the default, or enter a new value.
[/home/zug/services]
/home/zug/services

Where do you want the data files to be installed?
[/home/zug/services]
/home/zug/services

Which group should all Services data files be owned by?  (If Services
should not force files to be owned by a particular group, just press
Return.)
[]
[enter]

What should the default umask for data files be (in octal)?
(077 = only accessible by owner; 007 = accessible by owner and group)
[077]
077

Which of the following is closest to the type of server on your IRC
network?
   1) DreamForge 4.6.7  [this is an old IRCd, you should upgrade to Bahamut]
   2) Bahamut 1.4.27 or later
   3) UnrealIRCd 3.1.1 or later
   4) UltimateIRCd 2.8.2 or later
   5) Sequana 0.2.0 or later
[no default]

3

Do you want to use the MD5 message-digest algorithm to encrypt passwords?
(Selecting "yes" protects your passwords from being stolen if someone
gains access to the Services databases, but makes it impossible to recover
forgotten passwords.)
NOTICE: this should be considered an EXPERIMENTAL feature.
[no]
no

If you are switching from another services package that is listed there,
enter its associated number to be able to convert your old databases using
the given parameter on the command line the first time you launch Epona.
If no conversion is needed, type no.
    1) ircservices 4.4.x (using -is44)
[no]

enter

Do you want to compile Epona with threading support?
If you want to use the proxy detector, you MUST have this.
If you encounter problems during compilation, you should disable
it anyways.
[no] yes

Lo siguiente será compilarlo: ejecutaremos gmake si estamos en un sistema BSD, make en caso contrario. Una vez compilado hacemos un make install y si todo va bien se instalará en el directorio ~/services.

Una vez alli copia el fichero examples.conf por services.conf, y lo modificas a tu gusto. Los campos más importantes son Server Name y Remote Server.

Una vez que hayas configurado todo, no olvides añadir la seccion link y añadir la uline en tu ircd.conf, tal y como he explicado en el documento sobre UnrealIRCD. Si necesitas ayuda puedes contactar conmigo por mail o bien por irc (mira la sección irc).

Estos son programas relacionados que pueden resultar útiles:
    iroffer -> Servidor XDCC
    figlet -> Generador de MOTD's (texto en grande hecho a base de ascii)
    garnax -> File Server

Anterior Siguiente Inicio