Systemd valida DNSSEC, pero no muestra las firmas DNSSEC a sus clientes

Durante las pruebas con DNSSEC para escribir mis artículos recientes sobre el tema, observaba comportamientos extraños cuando hacía los experimentos con mi portátil. Pedía toda la información de un dominio protegido por DNSSEC y recibía validación DNSSEC de mi resolver local, pero no me llegaban las firmas digitales asociadas. Algo incomprensible considerando que el resolver necesita disponer de esas firmas digitales para que poder hacer esa validación.

Nota

En una versión inicial de este artículo utilizaba mi dominio jcea.es para las demostraciones, pero dado que los servidores DNS autoritativos para un dominio no realizan verificaciones DNSSEC para dicho dominio (no activan el flag AD [1]), el resultado era confuso.

Es por eso que he actualizado este artículo para utilizar el dominio nic.fr.

Por ejemplo, esto es lo que veo desde mi portátil cuando pido ver las firmas digitales DNSSEC (los registros RRSIG del DNS):

jcea@jcea:~$ dig +dnssec nic.fr

; <<>> DiG 9.16.1-Ubuntu <<>> +dnssec nic.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20487
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;nic.fr.                                IN      A

;; ANSWER SECTION:
nic.fr.                 600     IN      A       192.134.5.37

;; Query time: 135 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: mar jun 28 14:22:40 CEST 2022
;; MSG SIZE  rcvd: 74

Aquí vemos que el resolver local hace validación DNSSEC (el flag AD [1] al principio de la respuesta). Estupendo. ¡Pero no me sale la firma digital asociada!

Leer más…

DNSSEC: Migración de "jcea.es" a ECDSAP256SHA256

La experiencia de migrar algunos de mis subdominios DNS de uso privado a ECDSAP256SHA256 en 2020, tal y como describo en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios, ha sido muy indolora y positiva. Sin embargo a la hora de migrar el dominio DNS jcea.es entero, el tema de la compatibilidad sigue sobre la mesa.

Hay novedades recientes documentadas en DNSSEC: enlaces interesantes (20220611), como que la mitad de los dominios DNS protegidos por DNSSEC en Holanda usan ya ECDSAP256SHA256, o que el registrador francés .fr acaba de migrar a ECDSAP256SHA256.

Parece que hay consenso en que usar ECDSAP256SHA256 en DNSSEC es el estado del arte actual y que debería funcionar en cualquier cosa que tenga menos de diez años (si tiene más de diez años, o no soporta DNSSEC en absoluto o, sencillamente, dejará de validar DNSSEC, como si el dominio no estuviese firmado).

Para migrar jcea.es a ECDSAP256SHA256 voy a seguir básicamente los pasos descritos en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios. Ls diferencia fundamental es que quiero editar los registros DS solo una vez, porque quiero interactuar con mi registrador DNS lo mínimo posible.

Es decir, en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios añado las claves KSK y ZSK nuevas, manteniendo las claves viejas y añadiendo registros DS nuevos de forma que se admitan las claves KSK viejas y nuevas. Una vez que se propagan los cambios, puedo eliminar los registros DS, y las claves KSK y ZSK antiguos.

Ahora solo quiero hacer un cambio en los registro DS.

Los pasos son:

Leer más…

DNSSEC: enlaces interesantes (20220611)

Puesta al día de algunos enlaces interesantes sobre DNSSEC para quitármelos de mis marcadores del navegador web:

¿Cómo compilar un kernel nuevo en Ubuntu 20.04?

El kernel actual de Ubuntu 20.04 tiene un problema catastrófico si utilizas ZRAM, como describo en zram: Decompression failed! Lo fácil sería esperar a que Ubuntu publique una actualización, pero eso puede llevar semanas. Con eventos catastróficos diarios, no me puedo permitir esperar.

Necesito compilar mi propio kernel Linux. Lo triste del asunto es que la cosa no es ni sencilla ni está bien documentada. En la web de Ubuntu y por todo internet hay infinidad de tutoriales describiendo el proceso, pero son para versiones antiguas del sistema operativo y ya no funcionan. La verdad es que he perdido bastante tiempo leyendo y experimentando, con poco éxito y bastante frustración. Mis necesidades son bastante razonables:

  • Idealmente, compilar el mismo kernel oficial de Ubuntu, pero con la opción CONFIG_PGTABLE_MAPPING=y desactivada. Esto me permitiría reemplazar el kernel sin tener que preocuparme de paquetes y otras historias, y podría reutilizar también el initrd normal del sistema operativo. Eso me daría compatibilidad con todo lo que necesito, incluyendo ZFS y VirtualBox. Además, Ubuntu tiene parches en su kernel que no están disponibles en las versiones de kernel.org.

    Tendría que tener cuidado en recompilar un kernel nuevo cada vez que Ubuntu publicase una actualización que no incluyese la corrección, pero me parecía asumible.

    Ubuntu publica detalles sobre cómo descargar y compilar sus kernels, pero es un proceso complejo y que no he conseguido hacer funcionar satisfactoriamente.

  • Mis necesidades son algo delicadas si en vez de intentar reutilizar componentes Ubuntu, compilo un kernel genérico por mi cuenta:

    • Debe tener compatibilidad con ZFS.
    • Debe tener compatibilidad con VirtualBox. Esto supone que los módulos VirtualBox se recompilen automáticamente cuando se publica una actualización del software, lo que no es trivial.

    El plan es utilizar este kernel personal hasta que Ubuntu publique una actualización solucionando el problema.

Leer más…

zram: Decompression failed!

Con un ordenador y un sistema operativo nuevo toca encontrar y pulir detalles todo el tiempo. En esta ocasión lo que estaba viendo es que, cuando la máquina estaba muy cargada de CPU, se me morían procesos de vez en cuando. Tras experimentarlo varias veces en días diferentes, tras haber reiniciado el ordenador entre medias y notar esa aparente correlación entre la carga de CPU y los fallos de los programas, planteé dos hipótesis rápidas:

  • Que la máquina nueva está defectuosa y da problemas cuando se calienta mucho (carga de CPU elevada). Estamos en noviembre en Madrid, pero es cierto que yo torturo mis ordenadores cosa mala. Esta hipótesis se podría validar con una carga de CPU media y un secador de pelo, o advirtiendo si las incidencias suben o baja en función de la temperatura ambiental.
  • Memoria defectuosa, tal vez vinculada también a la temperatura. Para comprobar esta hipótesis lo más evidente sería utilizar una herramienta como memtest86, pero me llevé la gran sorpresa de que memtest86 no funciona en ordenadores con arranque UEFI, que es el caso de mi nuevo portátil.

Estaba dando vueltas al problema cuando se me ocurrió examinar los logs del sistema operativo y me encontré los siguientes mensajes de error:

[42028.302788] zram: Decompression failed! err=-22, page=1014500
[42054.078557] zram: Decompression failed! err=-22, page=723903
[42059.341537] zram: Decompression failed! err=-22, page=882298
[42059.341559] zram: Decompression failed! err=-22, page=882298
[42059.341564] Read-error on swap-device (252:2:7058384)
[42060.219105] zram: Decompression failed! err=-22, page=882298
[42060.219124] zram: Decompression failed! err=-22, page=882298
[42060.219128] Read-error on swap-device (252:2:7058384)
[42227.794573] zram: Decompression failed! err=-22, page=683032
[42624.876873] zram: Decompression failed! err=-22, page=922205
[42624.876898] zram: Decompression failed! err=-22, page=922205
[42624.876902] Read-error on swap-device (252:2:7377640)
[42626.831143] zram: Decompression failed! err=-22, page=662025
[42626.831160] zram: Decompression failed! err=-22, page=662025
[42626.831164] Read-error on swap-device (252:3:5296200)
[42630.433498] zram: Decompression failed! err=-22, page=905764
[42630.433517] zram: Decompression failed! err=-22, page=905764
[42630.433521] Read-error on swap-device (252:2:7246112)
[42989.405417] zram: Decompression failed! err=-22, page=877548
[42999.463318] zram: Decompression failed! err=-22, page=629447

Vaya, ¡parece que tenemos un ganador!

Leer más…

Live patching "libpam.so" in SmartOS platform

A few days ago a serious security bug was discovered in Solaris and Solaris derivatives like Illumos. Details:

Briefly, an unauthenticated network attacker can trivially take over your system.

I use SmartOS heavily, an Illumos distribution. SmartOS is a Hypervisor and upgrading it is usually quite trivial, but at this moment I can not afford any kind of downtime. Bad timing.

What to do?

Leer más…

Instalación manual de Kubuntu 20.04 con LUKS y ZFS

Recientemente he estado experimentando con las versiones 20.04 de Ubuntu y Kubuntu y con la versión actual de Tumbleweed, la distribución rolling release de OpenSUSE. Algunos resultados:

  • Kubuntu y OpenSUSE utilizan KDE, mi entorno preferido de escritorio. Ubuntu emplea Gnome, entorno que suelo probar de vez en cuando y cada vez me parece peor (para mi gusto y mis necesidades).

  • Ubuntu y Kubuntu soportan ambos ZFS de forma nativa. Desde que utilicé ZFS en Solaris en 2005, no quiero usar nada más. Los otros sistemas de ficheros son de juguete.

    Además, mi máquina actual emplea ZFS sobre Linux y lo exprimo de forma exhaustiva: snapshots diarios, replicación, copias de seguridad rápidas, clones... No, no quiero usar otra cosa.

  • Kubuntu tiene un soporte de tres años para los paquetes de software propios, mientras que Ubuntu, su base, ofrece cinco años de soporte.

    Esto ya lo he sufrido en mi Sistema Operativo actual, Kubuntu 16.04. Afortunadamente, la base Ubuntu de Kubuntu sí tiene cinco años de soporte.

  • El instalador de Ubuntu incluye un instalador ZFS experimental. El instalador de Kubuntu no.

  • Si haces una instalación ZFS de Ubuntu, no tienes la opción de cifrado. El cifrado solo está disponible para Sistemas de ficheros más tradicionales. Y esto a pesar de que las versiones recientes de ZFS tienen cifrado nativo y que también se podría usar LUKS (que es mi solución hasta el momento).

Descarté OpenSUSE rápidamente porque no tiene un soporte evidente de ZFS, aunque en casa hay otro ordenador con Tumbleweed y estamos contentos con la experiencia. Además, no quiero que todos los ordenadores de casa utilicen la misma rolling release, porque una actualización problemática puede ser una catástrofe.

Mi decisión ha sido la siguiente:

Leer más…

Salvapantallas y envío de eventos al sistema "X Window"

Por razones que no vienen al caso necesitaba dejar mi portátil funcionando, pero que no saltase el salvapantallas. Yo utilizo KDE y este permite realizar acciones diferentes cuando llevas el ratón a las esquinas del monitor. En mi Kubuntu 20.04, cada esquina puede hacer una de quince acciones diferentes, incluyendo "no hacer nada" y "activar el salvapantallas". Pero no hay ninguna acción que sea "inhibir la activación del salvapantallas".

Obviamente, si no quería que saltase el salvapantallas ese día, una opción evidente era desactivarlo por completo, pero me incomodaba que no hubiese una accción simple de inhibición temporal.

Tirando de Internet veo que aparentemente existen varios comandos para interactuar con el entorno gráfico y concretamente con el salvapantallas. Algunas de ellas eran loginctl o xdg-screensaver, pero ninguna funcionaba correctamente en mi sistema. Por ejemplo, xdg-screensaver reset no impedía que saltase el salvapantallas, pero sí impedía que se apagase el monitor.

Incluso intenté ver cómo programas como mplayer interactúan con el entorno gráfico para evitar que la pantalla se bloquee mientras estás viendo una película. Asomarse a ese abismo me dio repelús. "No quieres ir por ahí", me dije.

Nada de esto me servía.

Leer más…

Usar la memoria RAM para montar sistemas de archivos

A veces es muy conveniente montar un sistema de archivos en RAM. Algunos motivos comunes:

  • Estamos usando un entorno live cd o similar y necesitamos una zona de lectura y escritura.
  • Queremos que los cambios en un sistema de archivos sean temporales, que se puedan deshacer con facilidad. Un ejemplo de esto sería unionFS o mergeFS.
  • Queremos una zona de trabajo no persistente de alta velocidad. Por ejemplo, para alojar los ficheros intermedios creados durante un proceso de compilación. Son ficheros de usar y tirar que no necesitan ser persistentes, pero cuyo rendimiento de acceso debería ser lo más elevado posible.
  • Podemos necesitar almacenar datos en un sistema de archivos, pero no queremos que esos datos se almacenen de forma persistente en ningún sitio, que no dejen rastro ni siquiera accidental. Por ejemplo, por contener claves criptográficas.
  • Necesitamos espacio temporal y tenemos RAM más que suficiente para albergar ese contenido.

En todos estos casos es muy importante que no nos importe que el sistema de archivos desaparezca si se reinicia el ordenador, ya que se almacena en RAM.

Veamos algunas formas de utilizar RAM para montar un sistema de archivos no persistente en entornos Linux:

Leer más…

Cómo ver la temperatura del hardware en una máquina Solaris (o derivados)

Para ver las temperaturas hardware en máquinas con Sistema Operativo Solaris o derivados (Illumos o, en mi caso, SmartOS), podemos hacer lo siguiente:

[root@xXx ~]# /usr/lib/fm/fmd/fmtopo -V "*sensor=temp"
TIME                 UUID
Aug 15 15:30:59 aa2bfd40-5c98-637b-8781-9c452912b4c6

hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=0?sensor=temp
  group: protocol                       version: 1   stability: Private/Private
    resource          fmri      hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=0?sensor=temp
  group: authority                      version: 1   stability: Private/Private
    product-id        string    System-Product-Name
    chassis-id        string    System-Serial-Number
    server-id         string    xXx
  group: facility                       version: 1   stability: Private/Private
    sensor-class      string    threshold
    type              uint32    0x1 (TEMP)
    units             uint32    0x1 (DEGREES_C)
    reading           double    73.000000

hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=1?sensor=temp
  group: protocol                       version: 1   stability: Private/Private
    resource          fmri      hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=1?sensor=temp
  group: authority                      version: 1   stability: Private/Private
    product-id        string    System-Product-Name
    chassis-id        string    System-Serial-Number
    server-id         string    xXx
  group: facility                       version: 1   stability: Private/Private
    sensor-class      string    threshold
    type              uint32    0x1 (TEMP)
    units             uint32    0x1 (DEGREES_C)
    reading           double    75.000000

hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=2?sensor=temp
  group: protocol                       version: 1   stability: Private/Private
    resource          fmri      hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=2?sensor=temp
  group: authority                      version: 1   stability: Private/Private
    product-id        string    System-Product-Name
    chassis-id        string    System-Serial-Number
    server-id         string    xXx
  group: facility                       version: 1   stability: Private/Private
    sensor-class      string    threshold
    type              uint32    0x1 (TEMP)
    units             uint32    0x1 (DEGREES_C)
    reading           double    72.000000

hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=3?sensor=temp
  group: protocol                       version: 1   stability: Private/Private
    resource          fmri      hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0/core=3?sensor=temp
  group: authority                      version: 1   stability: Private/Private
    product-id        string    System-Product-Name
    chassis-id        string    System-Serial-Number
    server-id         string    xXx
  group: facility                       version: 1   stability: Private/Private
    sensor-class      string    threshold
    type              uint32    0x1 (TEMP)
    units             uint32    0x1 (DEGREES_C)
    reading           double    73.000000

hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0?sensor=temp
  group: protocol                       version: 1   stability: Private/Private
    resource          fmri      hc://:product-id=System-Product-Name:server-id=xXx:chassis-id=System-Serial-Number/motherboard=0/chip=0?sensor=temp
  group: authority                      version: 1   stability: Private/Private
    product-id        string    System-Product-Name
    chassis-id        string    System-Serial-Number
    server-id         string    xXx
  group: facility                       version: 1   stability: Private/Private
    sensor-class      string    threshold
    type              uint32    0x1 (TEMP)
    units             uint32    0x1 (DEGREES_C)
    reading           double    76.000000

Leer más…