Error de segmentación

Incluso en 2018, cuando las aplicaciones de mensajería instantánea modernas y ricas en funciones como Gitter o la extremadamente popular Slack, son tan generalizadas como siempre, IRC sigue siendo el método de comunicación preferido para muchos desarrolladores. Es simple, estable, ubicuo y, lo más importante, totalmente descentralizado. Sin embargo, es un protocolo antiguo, ya que el IRC ha estado funcionando desde principios de los noventa (el protocolo IRC RFC se publicó en 1993). Como tal, IRC viene con sus limitaciones.

Una de las más notables para mí es la falta de archivo de mensajes. Todos los mensajes enviados y recibidos por un cliente de IRC no se almacenan en su máquina, ni obtiene una repetición de las conversaciones pasadas en un canal al que se acaba de unir. Cada vez que inicias sesión en una sala de chat IRC, se te da un borrón y cuenta nueva. Esto es inconveniente, dado que el IRC se usa muy a menudo como un canal de comunicación fuera de banda. Te unes a un canal, dejas una pregunta y luego esperas unas horas para que alguien te responda, ya que la gente no tiende a monitorear el IRC con tanta frecuencia como lo haría con otras aplicaciones de mensajería instantánea.

Afortunadamente y tal vez no es sorprendente, este ha sido un problema resuelto desde hace bastante tiempo. El método más rápido y sencillo es establecer una conexión permanente con el servidor IRC desde un servidor bajo nuestro control que esté en 24/7 y establecer una sesión SSH/tmux con él cada vez que queramos volver a chequear en IRC. Cuando hayamos terminado, simplemente separe la sesión con C-a d en la pantalla de GNU o C-b d en tmux. Esto resuelve el problema de perder todos los mensajes enviados en un canal mientras estábamos fuera, pero eso es todo lo que obtienes. Si está buscando una solución que ofrezca mucho más que esto, es hora de echar un vistazo a los gorilas.

¿Qué es un servidor de gorila?

Un servidor de gorila es un servidor que usamos como proxy para acceder a IRC. Un gorila tomará nuestros detalles de IRC y establecerá una conexión a un servidor IRC en nuestro nombre e incluso se unirá a una lista de canales predefinidos.

Luego nos conectamos a este servidor de gorila desde nuestro cliente IRC en lugar de al servidor IRC directamente, y a partir de este punto, nuestros mensajes serán «rebotados» por el gorila al servidor de destino.

Los gorilas ofrecen varios beneficios, entre los que se incluyen:

  • Sesiones persistentes de servidor y canal
  • Registro de conversaciones de canal en un archivo de texto para archivar
  • Autenticación de usuario de Bouncer
  • Autenticación automática de servidor IRC a través de NickServ o SASL
  • Automatizar los estados de usuario de IRC (dejar mensajes ausentes &, etc.)
  • Y mucho más!

Configurar el servidor de gorila en AWS

Vamos a configurar nuestro propio servidor de gorila utilizando ZNC, la aplicación de servidor de gorila más popular, en una instancia AWS EC2 económica.

Lanzar una nueva instancia EC2 de Ubuntu Server 16.04 t2.nano con todas las configuraciones predeterminadas, excepto las siguientes:

  • Datos de usuario: instale el software bouncer (ZNC), cree un usuario para el proceso y un directorio para que almacene sus archivos y un archivo de unidad systemd para iniciarlo al inicio.
#!/bin/bashapt-get update && apt-get dist-upgrade -y && \apt-get install -y znc znc-dev znc-perl znc-python znc-tcl && \useradd -M -s /bin/false znc && usermod -L znc && \mkdir /opt/znc && \cat > /etc/systemd/system/znc.service <<- EOFDescription=ZNC IRC BouncerExecStart=/usr/bin/znc -d /opt/zncExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=alwaysType=forkingUser=zncWantedBy=multi-user.targetAlias=znc.serviceEOF

Dado que el archivo de unidad systemd se ha colocado directamente en /etc/systemd/system, se ejecutará automáticamente al iniciar. No hay necesidad de habilitarlo.Subred

  • : asegúrese de que la instancia se inicie en una subred pública con una puerta de enlace de Internet conectada, de modo que sea fácilmente accesible desde Internet.
  • Volumen de EBS: su contraseña de ZNC (Gorila), la contraseña del servidor IRC y los registros de conversación de IRC se almacenarán en archivos de texto plano, por lo que le recomiendo encarecidamente que cifre el volumen.
  • Crear un nuevo grupo de seguridad para adjuntarlo de modo que los siguientes puertos estén abiertos:
    • SSH: para que podamos configurar la instancia
    • puerto TCP 7078 (cualquier puerto sin reserva servirá, en realidad): Puerto de escucha ZNC
  • Establezca su etiqueta» Name » en algo significativo, si desea

Ahora genere una nueva dirección IP elástica y asóciela a la instancia.

Instalar ZNC

SSH en su instancia EC2 recién creada y ejecutar el proceso de configuración por primera vez de ZNC, que nos pedirá que establezcamos un puerto de escucha para el gorila y que creemos una cuenta de administrador. Seleccione las opciones que se muestran a continuación.

$ znc --makeconf Checking for list of available modules... -- Global settings -- Listen on port (1025 to 65534): 7078 Listen using SSL (yes/no) : yes Verifying the listener... Unable to locate pem file: , creating it Writing Pem file ... Enabled global modules -- Admin user settings -- Username (alphanumeric): admin Enter password: Confirm password: Nick : Alternate nick : Ident : Real name (optional): Bind host (optional): Enabled user modules Set up a network? (yes/no) : no Writing config ... To connect to this ZNC you need to connect to it as your IRC server using the port that you supplied. You have to supply your login info as the IRC server password like this: user/network:pass. Try something like this in your IRC client... /server <znc_server_ip> +7078 admin:<pass> To manage settings, users and networks, point your web browser to https://<znc_server_ip>:7078/ Launch ZNC now? (yes/no) : no

Esto generará un archivo de configuración que se almacenará en el directorio personal para el usuario en el que usemos ssh como (ubuntu si está utilizando la AMI de servidor Ubuntu predeterminada proporcionada por Amazon). Movamos los archivos de configuración recién creados de este directorio a /opt/znc y otorguemos a znc derechos de propietario de usuario.

$ sudo mv ~/.znc/* /opt/znc$ rmdir ~/.znc$ sudo chown -R znc:znc /opt/znc

Ahora puedes iniciar ZNC

$ sudo systemctl start znc

Asegúrese de que ZNC haya comenzado con éxito

$ systemctl status znc● znc.service - ZNC IRC Bouncer Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-07-29 13:02:07 UTC; 21min ago Process: 1181 ExecStart=/usr/bin/znc -d /opt/znc (code=exited, status=0/SUCCESS) Main PID: 1245 (znc) Tasks: 1 Memory: 10.8M CPU: 54ms CGroup: /system.slice/znc.service └─1245 /usr/bin/znc -d /opt/znc

Configuración de ZNC

Se ha completado la primera etapa de configuración. Ahora necesitamos agregar el usuario que vamos a iniciar sesión como y una red IRC para asociarlo a ese usuario.

Para aplicar los ajustes restantes al bouncer, nos conectaremos a su interfaz de configuración web, disponible en el puerto en el que lo configuramos para escuchar (en mi caso, el puerto 7078). Por lo tanto, en su navegador, ingrese la siguiente URL: https://<bouncer_ip_address>:7078. Si obtienes un error de «certificado HTTPS faltante» o similar, puedes ignorarlo de forma segura e indicar a tu navegador que continúe. Ahora inicia sesión como el usuario administrador que creaste antes, usando la contraseña que ingresaste.

 Interfaz web de ZNC

Una vez que inicie sesión, puede hacer clic en la entrada del menú «Configuración global» en el lado derecho para echar un vistazo a la configuración general del gorila.

ZNC instala una colección de módulos (objetos compartidos) en /usr/lib/znc que puede cargar o descargar mientras se ejecuta el demonio. Si se desplaza hacia abajo hasta la parte inferior, verá una lista de los módulos globales que afectan el funcionamiento del gorila, que puede activar/desactivar activando las casillas de verificación en la columna «Nombre». En mi caso, tengo» log » habilitado, ya que quiero que mi gorila almacene en un archivo de texto todos los mensajes enviados en los canales de los que soy miembro.

 Módulos globales de ZNC

Haga clic en «Administrar usuarios» en el menú derecho para abrir el panel de configuración de usuario. Ahora haga clic en «Agregar» para agregar un nuevo usuario y complete los detalles: nombre de usuario, contraseña (tenga en cuenta que esta contraseña solo se usará para autenticarse con ZNC, no se usará con el servidor IRC), detalles de IRC y una lista de módulos que puede querer cargar específicamente para este usuario.

 Detalles de usuario de ZNC

Luego haga clic en «Guardar y continuar» en la parte inferior para que podamos agregar una red IRC para este usuario.

Agregar una red a un usuario

Complete los detalles de la red IRC a la que se asociará este usuario y, opcionalmente, habilite cualquier módulo que desee cargar automáticamente al conectarse a esta red. Uno de estos módulos podría ser sasl si desea autenticarse usando este método con el servidor IRC. Habilitaré este módulo en esta red.

En el cuadro de texto» Servidores de esta red IRC», ingresará la información del servidor IRC al que desea conectarse en el formato

<server> <port> <irc_password>

Añada un signo más al puerto para indicar una conexión SSL. <irc_password> es la contraseña que usó para registrarse en el servidor IRC a través del comando /NickServ, que está completamente separada de la contraseña que configuró para autenticarse en el propio gorila anterior.

Por ejemplo, para conectarse a la red IRC de Freenode a través de SSL con una cuenta registrada previamente, el contenido de este cuadro de texto sería

irc.freenode.net +6697 myNickServPassword123

De lo contrario, podría ser simplemente

irc.freenode.net 6667

Configuración de la red IRC

Notará que su contraseña de IRC está almacenada en texto plano en el servidor. Esta es la razón por la que recomendé durante los pasos de configuración de VPS cifrar su volumen EBS y, naturalmente, tener un control muy estricto sobre quién puede acceder a su servidor de gorila. Se recomienda bloquear el grupo de seguridad VPS para permitir solo conexiones entrantes desde un subconjunto muy pequeño de IPs.

Haga clic en» Guardar y continuar » de nuevo. Ahora puede agregar opcionalmente una lista de canales en los que desea que el gorila inicie sesión, pero también recordará aquellos a los que se une cuando se conecte a él.

Ahora tenemos un AWS VPS (Servidor Privado Virtual) que aloja una instalación completamente funcional de ZNC. Lo último que hay que hacer es apuntar a nuestro cliente IRC al portero.

Conexión a la gorila

Voy a usar irssi para conectarme a la gorila. Estos son los pasos que seguí para que funcionara. Su kilometraje puede variar en un cliente diferente, como HexChat o mIRC, pero los detalles en sí deben seguir siendo casi los mismos.

Inicie irssi especificando el apodo a usar para conectarse al gorila

$ irssi -n <username>

Cree una nueva red llamada freenodebnc y agregue los detalles del gorila a ella. Como me estoy conectando al servidor IRC de Freenode a través de SSL, estoy usando el puerto que expone para conexiones seguras, 6697 y pasando la marca -ssl. username/freenode es la combinación de nombre de usuario y red que creamos en el panel de configuración de usuario de ZNC. password es la contraseña que usamos para autenticarnos con ZNC, no con el servidor IRC.

/network add freenodebnc/server add -net freenodebnc -auto -ssl <bouncer_ip> 6697 username/freenode:password

Ejecute los siguientes comandos para guardar estos cambios en el archivo de configuración irssi y conéctese al gorila.

/save/connect freenodebnc

Si cargó el módulo SASL (puede comprobar si está cargado ejecutando /msg *status ListModules), debe configurarlo en este punto. Por lo tanto, una vez que esté conectado al gorila, ejecute los siguientes comandos en su cliente de IRC.

/query *saslmechanism external plainset <NickServName> <password>

Donde NickServName es su nombre de usuario registrado con el servidor IRC y password la contraseña que usa para autenticarse en el servidor mencionado anteriormente.

Ahora vuelva a conectarse a la red IRC con el módulo SASL reconfigurado.

/msg *status jump

Puede tomar unos momentos para que el gorila establezca la conexión (especialmente si se está conectando a través de SSL y utilizando mecanismos de autenticación como SASL), pero después de esto, obtendrá una sesión permanente y segura con el servidor IRC que puede pausar y reanudar cuando lo desee. Feliz charla!