Manual para: MONTAR SERVIDOR IRC en Linux

Autor: Emmanuel Arreguez
URL: http://www.emmanuelarreguez.com.ar

Hay muchos ircds disponibles; el que he elegido yo para mi servidor es UnrealIRCD . Las ventajas de este ircd son la cantidad de features que tiene, ausentes en otros: modos +c y +S para eliminar colores de los canales, virtual hosts para los usuarios, configuración fácil e intutitiva, etc.

La version 3.2 está ahora en fase beta y es multihilo, tiene mucho más rendimiento que la antigua 3.1, y además tiene una sintaxis más cómoda, la recomiendo porque funciona muy bien.

Compilación e instalación

Lo primero de todo será bajarnos la última versión disponible. Unreal3.2.xxx

http://www.unrealircd.com

Lo primero será crear un usuario en nuestro servidor para que ejecute UnrealIRCD (nunca lo hagas como root). Una vez creado el usuario ircd
 descomprimimos el fichero Unrealircd.3.2.x.tar.gz en el directorio home, haciendo un

tar zxvf Unrealircd.3.2.xxx.tar.gz

Nos creará un directorio, entramos en el y ejecutamos

./Config

Nos irá haciendo una serie de preguntas (incluyo mis respuestas):

Do you have an insecure operating system and therefore want to
use the server anti-spoof protection?
[No] -> [enter]

What directory are all the server configuration files in?
[/home/ircd/Unreal3.2] -> [enter]

What is the path to the ircd binary including the name of the binary?
[/home/ircd/Unreal3.2/src/ircd] -> [enter]

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

* Nota: 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.

What is the hostname of the server running your IRCd?
[irc.tudominio.org] -> [enter]

What should the default permissions for your configuration files be?
(Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted
reading of the file
[0600] -> [enter]

Do you want to support SSL (Secure Sockets Layer) connections?
[No] -> [enter]

Do you want use encrypted oper {} passwords?
[Yes] -> [enter]

Do you want use encrypted incoming link {} passwords?
[No] -> [enter]

Do you want to use encrypted drpass {} passwords?
[No] -> [enter]

Do you want to use encrypted allow {} passwords?
[No] -> [enter]

Do you want to enable IPv6 support?
[No] -> [enter]

What listen() backlog value do you wish to use?  Some older servers
have problems with more than 5, others work fine with many more.
[5] -> [enter]

How far back do you want to keep the nickname history?
[2000] -> [enter]

What is the maximum sendq length you wish to have?
[3000000] -> [enter]

How many buffer pools would you like?
This number will be multiplied by MAXSENDQLENGTH.
[9] -> [enter]

How many file descriptors (or sockets) can the IRCd use?
[1024] -> [enter]

Would you like any more parameters to configure?
Write them here:
[]-> [enter]

Una vez hecho esto, ejecutamos

make

con esto compilaremos UnrealIRCD. Una vez compilado tendremos que escribir nuestro propio

unrealircd.conf

y arrancar el ircd con .

./unreal start

ya estará funcionando.

Configuración

Ahora les explicaré parte por parte qué hace el fichero de configuración:

/* Informacion del Servidor */
me {
        name "irc.tudominio.org";
        info "Mi Servidor 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 linkeados no pueden tener igual número.

/* Informacion del Administrador */
admin {
        "Emmanuel_Ar";
        "admin@tudominio.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.

/* Lineas Y */
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.

/* Lineas I */
allow {
        ip *;
        hostname *;
        class clients;
        maxperip 5;
};

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 *@dominio.org;
        class clients;
        maxperip 10;
};

Con esto permitimos 10 clones desde el host dominio.org

oper Emmanuel_Ar {
        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 Emmanuel_Ar 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 Emmanuel_Ar fuese solamente ircop, sustituiríamos netadmin por global en la seccion flags. Os incluyo aquí la lista completa de flags, sacada del fichero unrealircd.conf 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.

/* Puertos */
listen *:6600;
listen *:6667;
listen *:7000;
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 :-).

/* Lineas de Link*/
link    servicios.tudominio.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 servicios a tu servidor. Aquí definimos el nombre de los services: servicios.tudominio.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    chat.tudominio.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 vas a linkar varios servidores. En este caso linkaremos con el servidor chat.tudominio.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 chat debe tener numeric 2, ya que el numeric de irc es 1, y no pueden ser iguales. Debes tener tambien a tener en cuenta que, si tienes servicios puestos, en irc no debes añadir el link a los services, solamente la linea ulines que comentamos más abajo.

ulines {
        servicios.tudominio.org;
};

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

/*Contraseñas de Reinicio y Apagar el Server */
drpass {
        restart         "restartpass";
        die             "diepass";
};
Aquí ponemos los passwords de reinicio y "muerte" del servidor.
/* Aliases */
alias nickserv { type services; };
alias ns { nick "nickserv"; type services; };   
alias chanserv { type services; };
alias cs { nick "chanserv"; type services; };
alias memoserv { type services; };
alias ms { nick "memoserv"; type services; };
alias operserv { type services; };
alias os { nick "operserv"; type services; };
alias helpserv { type services; };
alias hs { nick "helpserv"; type services; };
alias botserv { type services; };
alias bs { nick "botserv"; type services; };
alias statserv { type normal; };
alias ss { nick "statserv"; type normal; };
alias operstat { type normal; };
alias oss { nick "operstat"; type normal; };
alias neostats { type normal; };  
alias nss { nick "neostats"; type normal; }; 
alias hostserv { type normal; };
alias hts { nick "hostserv"; type normal; }; 
alias loveserv { type normal; };  
alias ls { nick "loveserv"; type normal; };
alias services { type normal; };  
alias serv { nick "services"; type normal; };

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

/* Standard aliases */
alias "services" {
	format "^#" {
		nick "chanserv";
		type services;
		parameters "%1-";
	};
	format "^[^#]" {
		nick "nickserv";
		type services;
		parameters "%1-";
	};
	type command;
};

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

Estos son los Alias para que funcionen los comandos cortos de /ns, /bs, /os,/cs, etc...

/* Nicks NO Disponibles */
ban nick { mask "*Chan*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Bot*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Nick*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Memo*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Help*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Oper*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Info*Serv*"; reason "Reservado para Servicios"; };
ban nick { mask "*Admin*"; reason "Reservado para Administradores"; };
ban nick { mask "*Oper*"; reason "Reservado para IRCops"; };
ban nick { mask "Status"; reason "Bug en mIRC"; };
ban nick { mask "Estado"; reason "Bug en mIRC"; };
ban nick { mask "COM1"; reason "NO no no"; };
ban nick { mask "COM2"; reason "No no no"; };
ban nick { mask "COM3"; reason "No no no"; };

Con esta línea reservamos los nicks que esten reservados para los servicios.

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"; };
ban user { mask *tech*admin*@*.*; reason "Reservado para Administradores"; };
ban user { mask *net*admin*@*.*; reason "Reservado para Administradores"; };
ban user { mask *co*admin*@*.*; reason "Reservado para Administradores"; };
ban user { mask *ircop*@*.*; reason "Reservado para Administradores"; };
ban user { mask *oper*@*.*; reason "Reservado para Administradores"; };
ban user { mask *chan*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *info*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *memo*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *oper*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *nick*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *help*serv*@*.*; reason "Reservado para Servicios"; };
ban user { mask *bot*serv*@*.*; reason "Reservado para Servicios"; };

Esto también es opcional, es un ejemplo de como banear los malditos scripts y Reservar Los nicks usados para los Servicios.

/* Nombre Reales Baneados */
ban realname { mask *ircop*; reason "Reservado para Administracion"; };
ban realname { mask *oper*; reason "Reservado para Administracion"; };
ban realname { mask *chan*serv*; reason "Reservado para Servicios"; };
ban realname { mask *nick*serv*; reason "Reservado para Servicios"; };
ban realname { mask *bot*serv*; reason "Reservado para Servicios"; };
ban realname { mask *help*serv*; reason "Reservado para Servicios"; };
ban realname { mask *info*serv*; reason "Reservado para Servicios"; };
ban realname { mask *memo*serv*; reason "Reservado para Servicios"; };
ban realname { mask *oper*serv*; reason "Reservado para Servicios"; };
ban realname { mask *admin*; reason "Reservado para Administracion"; };
ban realname { mask *net*admin*; reason "Reservado para Administracion"; };
ban realname { mask *co*admin*; reason "Reservado para Administracion"; };
ban realname { mask *tech*admin*; reason "Reservado para Administracion"; };
ban realname { mask "sub7server"; reason "sub7"; };

Opcional. y sirve para lo mismo que los anteriores solo que este banea los Names

/* Usuarios Exceptos a Banearse */

except ban {
/* No Banear a Emmanuel_Ar*/
mask *emm@200.82.*;
mask *emm@*.ar;
};

Esto sirve para protegerse de glines producido por otros ircops de la red.

/* IP's Baneadas */
ban ip { mask 127.0.0.1; reason "Prohibido el LocalHost"; };

Con esto nos damos cuenta cuando una red sea Local o este alojada en una shell
/* Vhosts */
vhost {
        vhost           vhost.tudominio.org;
        from {
                userhost        *@*;
        };
        login              emmanuel;
        password        emmanuel;
};

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

/* Network configuration */
set {
        network-name            "NombredeTuRed";
        default-server          "irc.tudominio.org";
        services-server         "servicios.tudominio.org";
        stats-server            "stats.tudominio.org";
        help-channel            "#ayuda";
        hiddenhost-prefix       "NombredeTuRed";
        prefix-quit             "Sale de NombredeTuRed:";
        cloak-keys {
                10000;
                20000;
                30000;
        };
        /* Mascara de Operadores */
        hosts {
                local               "staff.tudominio.org";
                global             "staff.tudominio.org";
                coadmin          "staff.tudominio.org";
                admin             "staff.tudominio.org";
                servicesadmin   "staff.tudominio.org";
                techadmin        "staff.tudominio.org";
                netadmin          "staff.tudominio.org";
                host-on-oper-up "yes";
        };
};    

/* Especificaciones del Servidor */
set {
        kline-address            "admin@tudominio.org";
        modes-on-connect         "+xwG";
        modes-on-oper	   "+xwgs";
        oper-auto-join           "#IRCops,#Ayuda";
        dns {
                nameserver IP-DE-TURED;
                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.

Eso es todo. Esto es una configuración básica, para iniciarte en UnrealIRCD. Si quieres saber más, léete la documentación oficial, y si tienes alguna duda puedes preguntarme a mí o en irc.unrealircd.com

-------------------------------------------------------------------------
|Autor: Emmanuel Arreguez®
|URL: http://www.emmanuelarreguez.com.ar
-------------------------------------------------------------------------