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).
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.
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.
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.
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.
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.
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.
Retry-After,
que es lo que le dice a Google que vuelva en vez de borrar la página.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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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—.
—
Se mide durante un segundo: el gasto de un proceso solo existe como diferencia entre dos lecturas.
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.