Admin Libre - Administración de sistemas y redes

catgirl es un cliente minimalista de IRC
Por Francisco Gaitán el 21 de Octubre de 2022

catgirl es un cliente de IRC de terminal. Es una excelente alternativa a irssi para quienes el minimalismo y la seguridad sea lo más importante, ya que además de tener menos código aprovecha las características de seguridad de FreeBSD y OpenBSD usando sandboxing.

Tiene un modo restringido (restricted) que desactiva algunas funcionalidades y hace su funcionamiento más seguro. En OpenBSD aprovecha las mitigaciones de seguridad pledge(2) y unveil(2).

Como prestación minimalista, catgirl no implementa:

  • Configuración dinámica: toda la configuración se realiza al invocar el programa o en su archivo de configuración.
  • Multi-red: si quieres conectarte a varias redes tendrás que usar un multiplexor de terminal como tmux(1) o screen.
  • Reconexión: catgirl termina cuando se pierde la conexión al servidor en lugar de intentar reconectar automáticamente.
  • CTCP: catgirl no usa CTCP ya que lo considera un protocolo inútil que se presta al abuso.
  • Cobertura de protocolos: Sólo se incorporan las funcionalidades de IRCv3 que mejoren la experiencia de usuario.
  • IRC en texto claro: catgirl tan sólo conecta con servidores que usan TLS ya que los certificados son fáciles de obtener.

Comparte los atajos de teclado más comunes de irssi:

  • ESC-x va a la pestaña x
  • CTRL-p o CTRL-n va a la pestaña anterior o siguiente, respectivamente

Además permite navegar entre pestañas con el atajo ALT-x, siendo x el número de la pestaña.

Configuración

Si no se desea teclear las opciones en la línea de comandos se puede crear un archivo de configuración para cada red que se vaya a usar. Como ejemplo, esta sería una configuración con el modo restringido para mayor seguridad y con los colores de los nicks desactivados:

~/.config/catgirl/example
nick = mi_nick
real = mi_nombre
host = irc.example.com
user = mi_user
join = #canal
hash = 0,0
restrict
timestamp

Es importante que no haya ningún espacio al final de cada línea de configuración ya que si no catgirl no arrancará. Para cargar esta configuración ejecutaría $ catgirl example.

Ignorar mensajes JOINS, PARTS, QUITS, NICKS

Este ajuste se realiza por cada canal con la combinación de teclas C-+ (Alt +) o C-- (Alt -). Para que esto funcione en cwm(1) he necesitado añadir esto a mi archivo ~/.Xdefaults:

xterm*eightBitInput: false
xterm*eightBitControl: false

Servidores con certificado autofirmado

Para conectar con servidores con certificado autofirmado primero se guarda el certificado:

$ catgirl -o -h irc.example.com > ~/.config/catgirl/irc.example.com.pem

Y se añade esta linea al archivo de configuración correspondiente (en este caso ~/.config/catgirl/irc.example.com):

trust = irc.example.com.pem

Parche para mostrar los nombres de host

Gracias a este parche por Peter J. Philipp (publicado con su permiso) catgirl muestra los nombres de host de los usuarios:

--- handle.c.orig       Thu Feb 24 00:05:10 2022
+++ handle.c    Mon Dec 19 12:55:05 2022
@@ -353,8 +353,10 @@
        }
        uiFormat(
                id, filterCheck(Cold, id, msg), tagTime(msg),
-               "\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3",
+               "\3%02d%s\3 [%s@%s]\t%s%s%sarrives in \3%02d%s\3",
                hash(msg->user), msg->nick,
+               (msg->user ? msg->user : ""),
+               (msg->host ? msg->host : ""),
                (msg->params[2] ? "(" : ""),
                (msg->params[2] ?: ""),
                (msg->params[2] ? "\17) " : ""),

Y esta modificación donde además de mostrar el host oculta el nombre real:

--- handle.c.orig
+++ handle.c
@@ -353,11 +353,10 @@ static void handleJoin(struct Message *msg) {
        }
        uiFormat(
                id, filterCheck(Cold, id, msg), tagTime(msg),
-               "\3%02d%s\3\t%s%s%sarrives in \3%02d%s\3",
+               "\3%02d%s\3 [%s@%s]\tarrives in \3%02d%s\3",
                hash(msg->user), msg->nick,
-               (msg->params[2] ? "(" : ""),
-               (msg->params[2] ?: ""),
-               (msg->params[2] ? "\17) " : ""),
+               (msg->user ? msg->user : ""),
+               (msg->host ? msg->host : ""),
                hash(msg->params[0]), msg->params[0]
        );
        logFormat(id, tagTime(msg), "%s arrives in %s", msg->nick, msg->params[0]);

El archivo se llama patch-handle_c y va en el directorio patches del port de catgirl.

Restriciones al usuario de IRC desde el cortafuegos

Packet Filter permite aplicar reglas basadas en determinados usuarios o grupos. Bloquearé el acceso tcp y udp a cualquier servidor que no sea uno de los correspondientes a las redes IRC listadas:

table <libera_ips> const { 203.0.113.1, 203.0.113.2, 203.0.113.3 }
table <efnet_ips> const { 198.51.100.1 }
[...]
block proto { tcp, udp } user ircuser
pass out proto { tcp, udp } from any to { <libera_ips>, <efnet_ips> } user ircuser

Como conectar a múltiples servidores con tmux

tmux(1) es un multiplexor de terminal con el que podrás crear varias ventanas en un terminal. Estos son los atajos necesarios para crear distintas ventanas y moverse entre ellas:

Control B + C
Crea una nueva ventana
Control B + 0
Foco en la ventana 0
Control B + 1
Foco en la ventana 1
Control B + x
Elimina la ventana actual
Control B + ,
Renombra la ventana actual

Más información

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org