middleware

Un proceso delante de todos los sitios.

Aquí ya no se entra con contraseña: pon el dedo, la cara o el PIN de este dispositivo.

¿Qué es esto? →
middleware
Hacer
Ir a
El panel
Guía ↗
Abrir ↗

      
De qué depende le falta algo

Lo que este sitio necesita en pie para hacer su trabajo, escrito en su manifiesto (needs). Sirve para dos cosas: arrancar en orden —se espera hasta un minuto a que aparezca lo necesario— y saber de quién es la culpa cuando algo no responde. Un dominio (z4.dcimorra.es) o un proceso propio y su sitio (faro@insomne.es).

Cambios del manifiesto

Cada vez que el panel escribe el site.json de este sitio se guarda lo que había antes, con el motivo y desde qué dispositivo. El fichero vive dentro del proyecto de otro, así que esto es lo único que cuenta lo que hizo la casa. Se puede volver a cualquiera de ellos.

Relevar el middleware

La conversación de aquí al lado puede editar el código y compilarlo, pero no reiniciarse: hacerlo se mata a sí misma a media frase. El último paso lo das tú. Los sitios no se enteran —son procesos aparte que sobreviven al relevo y se readoptan al volver— y la puerta la sostiene systemd, así que lo que llegue durante el hueco espera en vez de fallar. Lo que sí se corta es un WebSocket abierto.

Vuelve solo en unos segundos.
Encendido

Apagado es una decisión, no una avería: el sitio sigue dado de alta y con su carpeta, pero no se arranca y su dominio responde que está apagado a propósito. Es el mismo interruptor que los botones Arrancar y Parar — queda escrito en el manifiesto, así que sobrevive a un reinicio del middleware y viaja con la carpeta.

Con qué se arranca

Un sitio es un proceso porque tiene comando, y vuelve a ser ficheros cuando se le quita: no hay más interruptor que este. Se ejecuta dentro de la carpeta del sitio; el puerto lo pone el middleware y llega en $PORT —escríbelo en el comando solo si tu programa lo pide como argumento. Guardar releva el proceso.

En qué cajón sale

Los sitios se agrupan solos por su dominio padre. Un grupo los saca de ahí a un cajón propio dentro de esa familia — es lo que mantiene juntos los portales de Mask. Un grupo existe mientras algún sitio lo nombre: para crearlo, escríbelo; para borrarlo, quítalo del último que lo diga.

Procesos de este sitio

No atienden ningún dominio: los llama el propio sitio, o una regla del túnel que va directa a su puerto. El middleware solo los mantiene en pie.

Qué se sirve Verlo ↗

Sale en la página y va en la cabecera Retry-After, que es lo que le dice a Google que vuelva en vez de borrar la página.
Si se cae

Retirar este sitio

Sale del túnel y la carpeta se aparta. Se puede deshacer.
Pide escribir el dominio antes de hacerlo.
Quién puede entrar con contraseña

Con contraseña puesta, el dominio pide una clave antes de servir nada —también el cartel de mantenimiento: si un sitio es privado, que esté en obras tampoco es asunto de nadie—. Quien la acierta se queda dentro un mes. En el manifiesto se guarda la huella, no la contraseña. Para un programa que tenga que entrar, vale la misma clave por Authorization: Basic.

Quién puede entrar siempre con contraseña

El panel pide contraseña desde el primer arranque; lo que se guarda está en data/panel-password y se cambia en Ajustes. Si algún día no puedes entrar —ni por la contraseña ni por la lista de aquí abajo—, la puerta de atrás está en la máquina: middleware open deja el panel sin protección durante media hora, middleware open siempre hasta que lo cierres, y middleware close lo devuelve a su sitio. No hay que reiniciar nada.

Dispositivos dentro

Cada navegador que ha entrado, con el nombre que se le puso y cuándo se le vio por última vez. La llave de cada uno se puede quitar por separado: echar a uno no toca a los demás. Al cambiar la contraseña se van todos menos el que la cambia.

Passkeys

La llave se queda en el dispositivo —Face ID, huella, el PIN del ordenador— y no viaja nunca: aquí solo se guarda la parte pública, con la que no se puede entrar. El navegador ata la firma a este dominio, así que una copia de esta página en otra dirección no puede pedir una que valga aquí. Es lo más parecido a un certificado instalable que cabe detrás del túnel.

Este navegador no sabe de passkeys, o la página no se está viendo por su dominio con https.

Con esto puesto, la caja de la contraseña desaparece de la pantalla de acceso y da igual quién se haya llevado el fichero donde está escrita. Hace falta al menos una passkey para poder ponerlo, no se deja borrar la última mientras esté puesto, y middleware open desde la máquina se lo salta —esa es la forma de volver si se pierde el dispositivo.

Enlace de instalación

Para meter el panel en un teléfono sin escribir la contraseña con el pulgar. Se abre una sola vez —en cuanto alguien entra por él deja de valer— y caduca solo. Aquí se guarda su huella y no el enlace, así que se ve una vez y no hay dónde volver a leerlo.

Por qué nombres responde

El dominio de la carpeta responde siempre. Añade aquí otros nombres —un www, un dominio distinto del mismo proyecto— para que este mismo sitio conteste también por ellos, uno por línea. Guardar solo cambia el manifiesto: para que el nombre tenga DNS de verdad —y, con la puerta del 80/443, su propio certificado— hace falta «Publicar» después, en Detalles.

Partes con su propia puerta

Proteger el dominio entero sirve para una web privada; lo normal es lo otro: / abierto y /admin cerrado. Cada zona lleva lo mismo que el sitio entero —una contraseña, unas direcciones, o las dos—. Cubre la ruta y lo que cuelga de ella (/admin cubre /admin/informes) y no lo que solo empieza igual (/administracion es otra página). Si dos zonas encajan, manda la más concreta y solo ella: nadie debería escribir dos contraseñas seguidas.

Desde dónde se puede entrar con filtro

Una dirección o un rango por línea (88.1.2.3, 10.0.0.0/8, también IPv6). Si la lista blanca tiene algo, solo entra lo que esté en ella; la negra echa siempre, y gana a la blanca. Va por delante de la contraseña: a quien no puede llegar no se le enseña ni la caja. La dirección de verdad la pone Cloudflare, así que es la del visitante y no la del túnel.

En el panel hay una excepción, y es la que hace que esto no se pueda convertir en una puerta cerrada por dentro: quien llame desde la propia máquina —por el loopback, sin túnel de por medio— entra aunque no esté en la lista blanca. Y una lista que te dejaría fuera a ti no se guarda: se dice y no se toca nada.

Robots

Los rastreadores dicen quién son porque quieren que se les pueda dejar fuera, y ahí se acaba la garantía: quien quiera mentir aquí lo consigue cambiando una línea. Esto no guarda nada —para eso está Acceso—, sirve para que no se coman el ancho de banda ni se lleven el texto. Se cierra por familias y no uno a uno porque los nombres nuevos salen cada mes.

Un navegador siempre manda User-Agent; quien no lo manda es casi siempre un guion escrito deprisa. Ojo si algo tuyo llama a esta web sin ponerlo.

Países

El país lo pone Cloudflare en la cabecera CF-IPCountry, así que es el del visitante y no el del túnel. Si esa cabecera no llegara —geolocalización apagada en la zona, o una petición que no pasa por el borde—, una lista de «solo estos» dejaría fuera a todo el mundo: por eso aquí abajo se enseña la de ahora mismo.

Navegadores

Se mira lo mismo, el User-Agent, con la misma confianza: ninguna. Sirve para cerrar un navegador viejo que rompe la web, y sobre todo al revés — solo entran estos deja fuera de un golpe a todo lo que no se comporta como un navegador, robots incluidos. Cuidado con esa forma: lo que no está en la lista es «otro», y ahí caen los buscadores, las tarjetas de WhatsApp y cualquier programa tuyo que llame a esta web.

A mano

Un trozo de User-Agent por línea, sin distinguir mayúsculas: encaja si aparece en cualquier parte. Es la salida para lo que no está en ninguna tabla —un cliente concreto, un rastreador recién nacido— y manda sobre todo lo demás. Cuidado con lo corto: bot encaja también dentro de otras palabras, y mozilla lo dicen todos los navegadores del mundo.

Lo que se ha echado

Desde que este proceso arrancó, y sin pasar por el registro del sitio: un rastreador insistente escribiría una línea por petición y taparía lo único que ese registro tiene que decir. Aquí queda lo último, que es lo que hace falta para saber si la regla que acabas de escribir hace lo que querías.

Buscar un dominio

La disponibilidad se pregunta al registro de cada terminación por RDAP, que es el sustituto del whois. La API de Cloudflare no tiene búsqueda de dominios: lo que sí sabe, y sale marcado abajo, es qué terminaciones vende y cuáles ya son tuyas.

Los tuyos, en Cloudflare Registrar

Esto sí sale de su API: cuándo caduca cada uno, si se renueva solo y en qué estado está. Lo que caduca en menos de un mes, o lo que tiene el pago vencido, sale primero y en rojo.

Precios

Cloudflare vende a precio de coste pero no publica sus tarifas en la API —sondeada entera: no hay endpoint—. Así que esta tabla se escribe a mano, copiando de su página, y queda con la fecha en que se escribió. Un dominio sin precio en la tabla sale sin precio: en algo que acaba en «lo compro», un número inventado es peor que un hueco.

Tareas
De dónde salen los puertos

Un sitio que es un proceso recibe un puerto de este rango y no lo ve nadie más: no hay tabla que mantener ni colisión posible. Lo que sí importa es que el rango no pise puertos escritos a mano, que no incluya la puerta del propio middleware, y que el núcleo no pueda repartir esos números como puertos efímeros —eso es lo que tumbó esta máquina dos veces, con un «address already in use» de un puerto en el que no escuchaba nadie—.

Qué hay ocupado
La última hora
Disco y registros

—

Quién gasta ahora

Se mide durante un segundo: el gasto de un proceso solo existe como diferencia entre dos lecturas.

Cuando se apretó

Un episodio se abre cuando la CPU pasa del umbral y se queda ahí un rato. Guarda quién estaba gastando, para poder mirarlo al día siguiente — cuando el proceso que lo causó ya no existe.

Ajustes

Lo que este panel hace cuando no estás mirando.

Módulos

Las partes de esto que no todas las instalaciones quieren. Encender una pide sus credenciales y las comprueba contra el servicio de verdad antes de darla por buena: un panel que dice que algo está puesto y falla de madrugada es peor que uno que dice que no lo está. Lo que se guarda va cifrado en el volumen de datos.


min
$
Un arreglo ocurre de madrugada y sin nadie mirando, contra el tope de gasto de arriba.


La máquina

% CPU
min
Por encima del porcentaje, la tira de arriba se pone ámbar. Si además aguanta ese tiempo, se abre un episodio y se apunta quién está gastando.
% lleno
Un disco lleno no se parece a nada de lo demás: no va despacio, no se recupera solo y se lleva a los cuarenta sitios a la vez.
MB
Se copia y se trunca el mismo fichero, sin renombrarlo: es lo único que se puede hacer sin cortarle la salida al proceso que está escribiendo. Lo que se escriba entre la copia y el corte se pierde — una línea.

Avisos al teléfono

s
Casi todas las caídas se arreglan solas antes de que nadie pudiera hacer nada: el motor reintenta con espera creciente. Avisar de esas es enseñar a ignorar los avisos.

Por el servicio de push del navegador no viaja nada de esta casa: el aviso va vacío y el panel pregunta qué ha pasado al recibirlo.


Contraseña

Al cambiarla se cierran las demás sesiones abiertas.

Nueva tarea

Algo que ocurre porque toca. Es un fichero en tasks/; esto solo lo escribe.

Es lo único de una tarea que no se puede deducir leyendo el código. Sale en su ficha.
Se ejecuta dentro de esa carpeta.

Añadir un registro

Levantar un sitio

Una carpeta con este nombre. Si quieres, también su DNS y su sitio en el túnel.

Nace sirviendo ficheros, con una página de cortesía dentro. Con qué se arranca se dice después, en la ficha del sitio: al levantarlo todavía no se sabe con qué se va a escribir.