/* Archivo de configuración para UnrealIRCd 5
 *
 * Simplemente copie este archivo a su directorio conf /, llámelo
 * 'unrealircd.conf' y recorrerlo línea por línea (¡edítalo!)
 *
 * Importante: Todas las líneas, excepto { y } terminan con un;
 * Esto es muy importante, si pierde un; en algún lugar entonces el
 * el analizador de archivos de configuración se quejará y el archivo no
 * ¡será procesado correctamente!
 * Si esta es su primera experiencia con una configuración de UnrealIRCd
 * entonces realmente le recomendamos que lea un poco sobre la sintaxis,
 * esto solo toma unos minutos y te ayudará mucho:
 * https://www.unrealircd.org/docs/Configuration#Configuration_file_syntax
 *
 * Documentación de UnrealIRCd 5 (¡muy extensa!):
 * https://www.unrealircd.org/docs/Main_Page/es
 *
 * Preguntas frecuentes:
 * https://www.unrealircd.org/docs/FAQ
 *
 */

/* Esto es un comentario, todo el texto aquí se ignora (tipo de comentario #1) */
// Esto también es un comentario, esta línea se ignora (tipo de comentario #2)
#Esto también es un comentario, nuevamente esta línea se ignora (tipo de comentario # 3)

/* UnrealIRCd hace un uso intensivo de módulos. Los módulos le permiten
 * personalizar el conjunto de funciones que desea habilitar en UnrealIRCd.
 * Vea más: https://www.unrealircd.org/docs/Modules
 *
 * Al usar la inclusión a continuación, le indicamos al IRCd que lea el archivo
 * 'modules.default.conf' este cargará más de 150 módulos
 * cargados con UnrealIRCd. En otras palabras: esto simplemente cargará
 * todas las funciones disponibles en UnrealIRCd.
 * Si está configurando UnrealIRCd por primera vez, le sugerimos
 * utilizar este. Entonces, cuando todo esté en funcionamiento, puedes venir
 * volver más tarde para personalizar la lista (si así lo desea).
 */
include "modules.default.conf";

/* Ahora incluyamos algunos otros archivos:
 * - help / help.conf para nuestro sistema on-IRC /HELPOP
 * - badwords.conf para canal y modo de usuario +G
 * - spamfilter.conf como ejemplo de uso de filtro de texto.
 *   (comentado)
 * - operclass.default.conf contiene algunas buenas operclasses que
 * puedes usarlo en tus bloques operativos.
 */
include "help/help.conf";
include "badwords.conf";
//include "spamfilter.conf";
include "operclass.default.conf";

/* Este es el bloque me {} que básicamente dice quiénes somos.
 * Define el nombre de nuestro servidor, alguna línea de información y un "sid" único.
 * La identificación del servidor (sid) debe comenzar con un dígito seguido de dos dígitos o
 * letras. El sid debe ser único para su red IRC (cada servidor debe
 * tiene su propio sid).
 */
me {
	name "irc.ejemplo.org";
	info "Servidor EjemploNET";
	sid "001";
}

/* El bloque admin {} define lo que los usuarios verán si escriben /ADMIN.
 * Normalmente contiene información sobre cómo contactar al administrador.
 */
admin {
	"Bob Smith";
	"bob";
	"correo-electrónico@ejemplo.org";
}

/* Los clientes y servidores se colocan en bloques de clase {}, los definimos aquí.
 * Los bloques de clase constan de los siguientes elementos:
 * - pingfreq: con qué frecuencia hacer ping a un usuario /servidor (en segundos)
 * - connfreq: con qué frecuencia intentamos conectarnos a este servidor (en segundos)
 * - sendq: el tamaño máximo de cola para una conexión
 * - recvq: cola de recepción máxima de una conexión (control de inundaciones)
 */

/* Clase de cliente con buenos valores predeterminados */
class clients
{
	pingfreq 90;
	maxclients 1000;
	sendq 200k;
	recvq 8000;
}

/* Clase especial para IRCOps con límites superiores */
class opers
{
	pingfreq 90;
	maxclients 50;
	sendq 1M;
	recvq 8000;
}

/* Clase de servidor con buenos valores predeterminados */
class servers
{
	pingfreq 60;
	connfreq 15; /* intenta conectarte cada 15 segundos */
	maxclients 10; /* máximo de servidores */
	sendq 20M;
}

/* Bloques de permitir definen qué clientes pueden conectarse a este servidor.
 * Esto le permite agregar una contraseña de servidor o restringir el servidor a
 * IP específicas únicamente. También configuras las conexiones máximas
 * permitido por IP aquí.
 * Ver también: https://www.unrealircd.org/docs/Allow_block
 */

/* Permitir que todos entren, pero solo 3 conexiones por IP */
allow {
	mask *;
	class clients;
	maxperip 3;
}

/* Ejemplo de un bloque de permiso especial en una IP específica:
 * Requiere que los usuarios de esa IP se conecten con una contraseña. Si la contraseña
 * es correcto, entonces permite 20 conexiones en esa IP.
 */

allow {
	mask 192.0.2.1;
	class clients;
	password "algunacontraseña";
	maxperip 20;
}

/* Los bloques de operaciones definen sus operadores de IRC.
 * Los operadores de IRC son personas que tienen "derechos adicionales" en comparación con otros,
 * por ejemplo, pueden /KILL a otras personas, iniciar la vinculación del servidor,
 * /JOIN a canales aunque estén prohibidos, etc.
 *
 * Para obtener más información sobre cómo convertirse en un IRCOp y cómo administrar
 * tareas, consulte: https://www.unrealircd.org/docs/IRCOp_guide
 *
 * Para obtener detalles sobre el bloque oper {} en sí, consulte
 * https://www.unrealircd.org/docs/Oper_block
 */

/* Aquí hay un ejemplo de bloque de operador para 'bobsmith' con contraseña 'test'.
 * ¡¡DEBES cambiar esto !!
 */

oper bobsmith {
	class opers;
	mask *@*;
	password "test";
	/* Los permisos de operador se definen en un bloque 'operclass'.
     * Ver https://www.unrealircd.org/docs/Operclass_block
     * UnrealIRCd viene con una serie de bloques predeterminados, consulte
     * el artículo para una lista completa. Elegimos 'netadmin' aquí.
     */
	operclass netadmin;
	swhois "es un Administrador de Red";
	vhost netadmin.ejemplo.org;
}

/* Los bloques de escucha definen los puertos donde el servidor debe escuchar.
 * En otras palabras: los puertos que los clientes y servidores pueden usar para
 * conectarse a este servidor.
 * 
 * Sintaxis:
 * listen {
 * { 
 *   ip <ip>;
 *   port <puerto>;
 *   options {
 *     <opciones....>;
 *   }
 * }
 */

/* Puerto estándar para IRC 6667 */
listen {
	ip *;
	port 6667;
}

/* Puerto estándar para IRC SSL/TLS 6697 */
listen {
	ip *;
	port 6697;
	options { tls; }
}

/* Puerto especial SSL/TLS servers-only/(Solo servidores) para enlaces */
listen {
	ip *;
	port 6900;
	options { tls; serversonly; }
}

/* NOTA: Si está en una shell IRCd con varias IP y usa
 * los bloques listen {} anteriores, es probable que obtenga un
 * Error "address is already in use" y el ircd no se inicia.
 * Esto significa que DEBE vincularse a una IP específica en lugar de '*' como:
 * escuchar { ip 1.2.3.4; puerto 6667; }
 * Por supuesto, reemplace la IP con la IP que se le asignó.
 */

/*
 * Los bloques de enlaces le permiten enlazar varios servidores para formar una red.
 * Ver https://www.unrealircd.org/docs/Tutorial:_Linking_servers
 */

link hub.ejemplo.org
{
	incoming {
		mask *@algo;
	}

	outgoing {
		bind-ip *; /* o explícitamente una IP */
		hostname hub.ejemplo.org;
		port 6900;
		options { tls; }
	}

    /* Usamos la huella digital SPKI del otro servidor para la autenticación.
     * Ejecute './unrealircd spkifp' en el otro lado para obtenerlo.
     */

	password "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUV=" { spkifp; }

	class servers;
}

/* El bloqueo de enlaces para servicios suele ser mucho más sencillo.
 * Para obtener más información sobre qué son los Servicios,
 * ver https://www.unrealircd.org/docs/Services
 */

link servicios.ejemplo.org
{
	incoming {
		mask 127.0.0.1;
	}

	password "cambiameporfavor";

	class servers;
}

/* Las líneas U dan a otros servidores (incluso) más poder/comandos.
 * Si utiliza servicios debe agregarlos aquí.
 * ¡¡¡NUNCA ponga aquí el nombre de un servidor UnrealIRCd !!!
 */

ulines {
	servicios.ejemplo.org;
}

/* Aquí puede agregar una contraseña para los comandos solo IRCOp /DIE y /RESTART.
 * Esto está destinado principalmente a proporcionar una pequeña protección contra accidentes
 * se reinicia y el servidor se mata.
 */
 
drpass {
	restart "reiniciar";
	die "muere";
}

/* El bloque de registros define qué se debe registrar y en qué archivo.
 * Ver también https://www.unrealircd.org/docs/Log_block
 */

/* Este es un buen valor predeterminado, registra todo */
log "ircd.log" {
	flags {
		oper;
		connects;
		server-connects;
		kills;
		errors;
		flood;
		sadmin-commands;
		chg-commands;
		oper-override;
		tkl;
		spamfilter;
	}
}

/ * Con "aliases" puedes crear un alias como /ALGO para enviar un mensaje
  * algún usuario o bot. Suelen utilizarse para servicios.
  *
  * Tenemos varios archivos de alias preestablecidos, consulte el directorio alias /.
  * Como ejemplo, aquí incluimos todos los alias utilizados para los servicios de anope.
  * /

include "aliases/anope.conf";

/* Prohibir los apodos para que no puedan ser utilizados por usuarios habituales. */
ban nick {
	mask "*C*h*a*n*S*e*r*v*";
	reason "Reservado para Servicios";
}

/* Prohibir ip.
 * Tenga en cuenta que normalmente se usa /KLINE, /GLINE y /ZLINE para esto.
 */

ban ip {
	mask 195.86.232.81;
	reason "Te odio";
}

/* Ban server - if we see this server linked to someone then we delink */
ban server {
	mask eris.berkeley.edu;
	reason "Sal de aquí.";
}

/* Banear un user - solo como ejemplo, normalmente usa /KLINE or /GLINE para esto */

ban user {
	mask *tirc@*.saturn.bbn.com;
	reason "Idiota";
}

/* Banear realname te permite prohibir clientes en función de su 'nombre real'
 * o campo 'gecos'.
 */

ban realname {
	mask "Equipo Swat";
	reason "mIRKFORCE";
}

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

/* Excepciones de prohibición y TKL. Le permite eximir a los usuarios/máquinas de
 * KLINE, GLINE, etc.
 * Si es un IRCOp con una IP estática (y no hay personas que no sean de confianza en esa IP)
 * entonces le sugerimos que se agregue aquí. De esa manera siempre puedes entrar
 * incluso si accidentalmente te aplicas una prohibición de * LINE.
 */

/* Excepciones, te protege de KLINE and ZLINE */

except ban {
	mask *@192.0.2.1;
	//      puede agregar más entradas de máscara aquí..
}

/* excepto prohibir con tipo 'all' te protege de GLINE, GZLINE, QLINE, SHUN */

except ban {
	mask *@192.0.2.1;
	type all;
}

/* Con deny dcc puedes prohibir nombres de archivo para DCC */

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

/* deny channel te perimte banear un canal entero (mascará) */

deny channel {
	channel "*warez*";
	reason "Warez es ilegal";
	class "clients";
}

/* VHosts (Virtual Hosts) permite a los usuarios adquirir un host diferente.
 * Ver https://www.unrealircd.org/docs/Vhost_block
 */

/* Ejemplo de vhost que puede usar. En el tipo de IRC: /VHOST test test
 * NOTA: solo las personas con un host 'unrealircd.com' pueden usarlo así
 * asegúrese de cambiar vhost :: mask antes de realizar la prueba.
 */

vhost {
	vhost odio.microsefrs.com;
	mask *@unrealircd.com;
	login "testeo";
	password "testeo";
}

/* Los bloques de lista negra consultarán un servicio de lista negra de DNS externo
 * cada vez que un usuario se conecta, para ver si se conoce la dirección IP
 * por causar ataques con drones, es una máquina pirateada conocida, etc.
 * Documentación: https://www.unrealircd.org/docs/Blacklist_block
 * O simplemente eche un vistazo a los bloques a continuación.
 */

/* DroneBL, probablemente la lista negra más popular utilizada por los servidores IRC.
 * Consulte https://dronebl.org/ para obtener su documentación y el
 * significado de los tipos de respuesta. En el momento de escribir este artículo utilizamos tipos:
 * 3: IRC Drone, 5: Embotellador, 6: Spambot o drone desconocido,
 * 7: DDoS Drone, 8: Proxy SOCKS, 9: Proxy HTTP, 10: ProxyChain,
 * 11: Proxy de página web, 12: Open DNS Resolver, 13: Atacantes de fuerza bruta,
 * 14: Proxy Wingate abierto, 15: Enrutador / puerta de enlace comprometido,
 * 16: Gusanos de autorooting.
 */

blacklist dronebl {
        dns {
                name dnsbl.dronebl.org;
                type record;
                reply { 3; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; }
        }
        action gline;
        ban-time 24h;
        reason "Proxy/Drone detectado. Consulte https://dronebl.org/lookup?ip=$ip para más detalles.";
}

/* EFnetRBL, consulte https://rbl.efnetrbl.org/ para obtener documentación
 * y el significado de los tipos de respuesta.
 * Al momento de escribir este artículo: 1 es proxy abierto, 4 es TOR, 5 es drones/flooding.
 *
 * NOTA: Si desea permitir proxies TOR en su servidor, entonces
 * necesita eliminar el '4;' a continuación en la sección de respuesta.
 */

blacklist efnetrbl {
        dns {
                name rbl.efnetrbl.org;
                type record;
                reply { 1; 4; 5; }
        }
        action gline;
        ban-time 24h;
        reason "Proxy/Drone detectado. Consulte https://rbl.efnetrbl.org/?i=$ip para más detalles.";
}

/* Puede incluir otros archivos de configuración */
/* include "klines.conf"; */

/* Configuración de la red */
set {
	network-name 		"EjemploNET";
	default-server 		"irc.ejemplo.org";
	services-server 	"services.ejemplo.org";
	stats-server 		"stats.ejemplo.org";
	help-channel 		"#Ayuda";
	hiddenhost-prefix	"Clk";
	prefix-quit 		"Quit";

	/* Las claves de ocultación deben ser las mismas en todos los servidores de la red.
     * Se utilizan para generar hosts enmascarados y deben mantenerse en secreto.
     * Las claves deben ser 3 cadenas aleatorias de 50-100 caracteres
     * y debe constar de minúsculas (a-z), mayúsculas (A-Z) y dígitos (0-9).
     * SUGERENCIA: en * NIX, puede ejecutar './unrealircd gencloak' en su shell/Vps para 
     * que UnrealIRCd genere 3 cadenas aleatorias para ti.
     */
	cloak-keys {
		"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
		"uno más";
		"y otro más";
	}
}

/* Configuración específica del servidor */

set {
	kline-address "setea.un.correo.electrónico"; /* Correo electrónico o URL que se muestra cuando un usuario está baneado */
	modes-on-connect "+ixw"; /* cuando los usuarios se conectan, obtendrán estos modos de usuario */
	modes-on-oper "+xws"; /* cuando alguien se convierte en IRCOp obtendrá estos modos */
	modes-on-join "+nt"; /* modos de canal predeterminados cuando se crea un nuevo canal */
	oper-auto-join "#opers"; /* Las IRCOps se unen automáticamente a este canal. */
	options {
		hide-ulines; /* ocultar las líneas U en /MAP and /LINKS */
		show-connect-info; /* muestra "looking up your hostname" cuando conectas */
	}

	maxchannelsperuser 10; /* Número máximo de canales que un usuario puede /JOIN */

	/* El tiempo mínimo que un usuario debe estar conectado antes de que se le permita
     * usar un mensaje QUIT. Con suerte, esto ayudará a detener el spam.
     */
	anti-spam-quit-message-time 10s;

	/* O simplemente setea un quit estático, significa que cualquier /QUIT es ignorado */
	/* static-quit "Client quit";	*/

	/* static-part hace lo mismo para /PART */
	/* static-part yes; */

	/* Protección contra flood:
     * Hay muchas configuraciones para esto y la mayoría tienen buenos valores predeterminados.
     * Ver https://www.unrealircd.org/docs/Set_block#set::anti-flood
     */
	anti-flood {
	}

	/* Opciones de Filtro de texto */
	spamfilter {
		ban-time 1d; /* la duracion por defecto de un *LINE seteado por el filtro de texto */
		ban-reason "Spam/Publicidad"; /* razón por defecto */
		virus-help-channel "#ayuda"; /* canal de uso para 'viruschan' */
		/* except "#ayuda"; inmunidad para el canal Ayuda del filtro de texto */
	}

	/* Restringir ciertos comandos.
	 * Ver https://www.unrealircd.org/docs/Set_block#set::restrict-commands
	 */
	restrict-commands {
		list {
			connect-delay 60;
			exempt-identified yes;
			exempt-reputation-score 24;
		}
		invite {
			connect-delay 120;
			exempt-identified yes;
			exempt-reputation-score 24;
		}
		/* Además de la capacidad de restringir cualquier comando,
         * como se muestra arriba. También hay 4 tipos especiales
         * que puede restringir. Estos son "private-message",
         * "private-notice", "channel-message" y "channel-notice".
         * Están comentados (desactivados) en este ejemplo:
         */
		//private-message {
		//	connect-delay 10;
		//}
		//private-notice {
		//	connect-delay 10;
		//}
	}
}

/*
 * Lo siguiente configurará la limitación de la conexión de "unknown users".
 *
 * Cuando UnrealIRCd detecta una gran cantidad de usuarios que se conectan desde direcciones IP
 * que no se han visto antes, se rechazan las conexiones de las nuevas IP
 * por encima de la configuración establecida. Por ejemplo, 10:60 solo pueden conectarse 10 usuarios por minuto
 * que no se hayan visto antes. Las direcciones IP conocidas siempre pueden ingresar,
 * independientemente de la configuración establecida. Lo mismo para los usuarios que inician sesión con SASL.
 *
 * Consulte también https://www.unrealircd.org/docs/Connthrottle para obtener más detalles.
 * O simplemente siga leyendo los ajustes de configuración predeterminados a continuación:
 */

set {
	connthrottle {
		/* Primero debemos configurar lo que llamamos "known users".
         * De forma predeterminada, estos son usuarios en direcciones IP que tienen
         * una puntuación de 24 o más. Una puntuación de 24 significa que
         * La IP estuvo conectada a esta red durante al menos 2 horas
         * en el último mes (o mínimo 1 hora si está registrado).
         * La opción sasl-bypass es otra configuración. Significa
         * que los usuarios que se autentican en los servicios a través de SASL
         * también se consideran usuarios conocidos.
         * Usuarios del grupo "known users" (ya sea por reputación
         * o por SASL) siempre están permitidos por este módulo.
         */
		known-users {
			minimum-reputation-score 24;
			sasl-bypass yes;
		}

		/* Los nuevos usuarios son todos los usuarios que no pertenecen al
         * grupo de usuarios conocidos. Se consideran "nuevos" y en
         * caso de un gran número de nuevos usuarios que se conectan
         * están sujetos a limitación de velocidad de conexión.
         * Por defecto, la configuración es de 20 nuevos usuarios locales por minuto.
         * y 30 nuevos usuarios globales por minuto.
         */
		new-users {
			local-throttle 20:60;
			global-throttle 30:60;
		}

		/* Esta configuración es para cuando este módulo NO este activo.
         * La configuración predeterminada deshabilitará el módulo cuando:
         * - El módulo de reputación se ha estado ejecutando durante menos de
         *   una semana. Si se ejecuta menos de 1 semana, entonces hay
         * Datos insuficientes para considerar quién es un "known users".
         * - El servidor acaba de iniciarse (primeros 3 minutos).
         */
		disabled-when {
			reputation-gathering 1w;
			start-delay 3m;
		}
	}
}

/* Finalmente, es posible que desee tener un MOTD (Mensaje del día), esto puede ser
 * hecho creando un archivo de texto 'ircd.motd' en su directorio conf /.
 * Este archivo se mostrará a sus usuarios al conectarse.
 * Para obtener más información, consulte https://www.unrealircd.org/docs/MOTD_and_Rules
 */

/*
 * ¿Problemas o necesita más ayuda?
 * 1) https://www.unrealircd.org/docs/Main_Page/es
 * 2) https://www.unrealircd.org/docs/FAQ <- ¡responde el 80% de sus preguntas!
 * 3) Si aún tiene problemas, puede obtener asistencia:
 * - Foros: https://forums.unrealircd.org/
 * - IRC: irc.unrealircd.org (SSL en el puerto 6697) / #unreal-support
 * Tenga en cuenta que primero le pedimos que lea la documentación y las preguntas frecuentes.
 */
