catgirl es un cliente minimalista de IRC
Por 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