Shared posts
La riqueza de lo simple en la era de lo innecesario
BHDynamics. Filosofía espacial abierta
🇪🇸 Tecnología espacial con sello español

En el emergente ecosistema del NewSpace, donde la exploración espacial se democratiza gracias al hardware abierto y la colaboración internacional,
España cuenta con un actor singular: BHDynamics, y con su co-fundador: José Luis Tajada Herráiz.
Desde su laboratorio en Albacete, BHDynamics diseña y fabrica sistemas electrónicos avanzados para picosatélites y PocketQubes, con un enfoque educativo, modular y accesible.
José Luis Tajada: ciencia, divulgación y espacio
José Luis Tajada es un perfil atípico y fascinante.
Técnico superior en electrónica, investigador en nanotecnología, asesor en biotecnología y divulgador científico en medios como Espacio en Blanco (RNE), ha combinado su experiencia técnica con una pasión por la exploración espacial.
- Fundador de BHDynamics, empresa dedicada al desarrollo de hardware libre para aplicaciones científicas y espaciales.
- Ha trabajado en instituciones como el Centro Nacional de Biotecnología (CNB-CSIC) y el Institut Català de Nanociència i Nanotecnologia (ICN2).
- Divulga ciencia en su canal Tajada’s de Ciencia, donde explica desde física cuántica hasta ingeniería aeroespacial.
Su visión: hacer que el espacio sea comprensible, accesible y emocionante para todos.
Picosatélites y PocketQubes: el espacio en la palma de la mano
BHDynamics se especializa en el diseño de picosatélites, satélites de menos de 1 kg que pueden lanzarse en órbita baja (LEO) como parte de misiones científicas, educativas o tecnológicas. Su enfoque combina:
- Hardware modular
- Firmware abierto y programable
- Modelo educativo basado en la experimentación

🛰️ DynOSSAT-EDU: el satélite que enseña
Uno de sus desarrollos más destacados es el DynOSSAT-EDU, un kit educativo que simula una misión espacial real.
Incluye:
- OBC (On-Board Computer) con microcontrolador ATSAMD51J20A-AU (Cortex-M4F, 120 MHz)
- Sensores integrados:
- ICM-20948 (IMU de 9 ejes)
- MCP9808 (temperatura)
- SGP30 (calidad del aire)
- Comunicación sub-GHz (FSK, 30 dBm)
- Almacenamiento en microSD
- Conectividad USB-C, I2C, SPI, UART
- Compatible con Arduino IDE y CircuitPython
- Licencia libre: CERN OHL v1.2
Este satélite no solo vuela: enseña.
Está diseñado para que estudiantes, makers y profesionales puedan experimentar con programación, sensores, comunicaciones y gestión energética como si estuvieran diseñando una misión real.
🛰️ NessieSAT: modularidad y diversión
Otro proyecto es el NessieSAT, un satélite educativo con módulos intercambiables:
- Cámara
- LEDs programables
- Sensores de albedo
- Módulos de propulsión y orientación
Inspirado por la filosofía del NewSpace, NessieSAT convierte el aprendizaje técnico en una experiencia lúdica y creativa.
Tecnología con propósito
BHDynamics no solo fabrica hardware: fabrica conocimiento.
Sus desarrollos están pensados para:
- Formación técnica en universidades y centros educativos
- Prototipado rápido para misiones científicas
- Investigación en entornos extremos (espacio, biotecnología, nanotecnología)
- Divulgación científica accesible
Además, sus sistemas pueden integrarse con redes como SatNOGS, lo que permite recibir telemetría en tiempo real desde estaciones terrestres abiertas.
Filosofía abierta y colaborativa
BHDynamics comparte la visión de organizaciones como Libre Space Foundation:
- Uso de licencias libres (CERN OHL, GPL)
- Documentación pública de hardware y firmware
- Invitación a la colaboración global
Aunque no existe una colaboración formal entre ambas entidades, sus caminos convergen en la idea de que el espacio no debe ser exclusivo, sino inclusivo.
Disponen de su propio repositorio del que podeis descargar todo lo que han compartido con caracter educativo:
Conclusión: España en la vanguardia del espacio libre
BHDynamics representa una nueva forma de hacer ciencia y tecnología espacial en España: accesible, educativa, modular y abierta.
Bajo la dirección de José Luis Tajada, la empresa combina rigor técnico con pasión divulgativa, y convierte el espacio en un aula, un laboratorio y un juego.
En un mundo donde el acceso al espacio está cambiando, BHDynamics demuestra que la innovación no necesita millones, sino visión, conocimiento y voluntad de compartir.
Libre Space Foundation: Democratizando el acceso al espacio
🛰️ Qúe es la Libre Space Foundation

La Libre Space Foundation (LSF) es una organización sin ánimo de lucro con sede en Grecia, fundada en 2015 por los creadores del proyecto SatNOGS.
Su misión es clara y ambiciosa: hacer que el espacio sea accesible para todos mediante el uso de tecnologías libres y abiertas.
¿Qué significa “libre” en este contexto?
LSF promueve el uso de software libre y hardware abierto en el desarrollo de tecnologías espaciales. Esto implica que cualquier persona puede estudiar, modificar, compartir y utilizar sus diseños sin restricciones comerciales. En lugar de depender de grandes corporaciones o agencias gubernamentales, LSF apuesta por la colaboración global, la transparencia y la innovación abierta.
¿Qué les hace únicos?
- Acceso universal: democratizan el espacio eliminando barreras económicas y técnicas.
- Hardware abierto: sus satélites y estaciones terrestres están diseñados con componentes accesibles y documentados públicamente.
- Comunidad activa: fomentan una red global de colaboradores, desde radioaficionados hasta ingenieros aeroespaciales.
- Educación y divulgación: organizan talleres, hackatones y colaboran con universidades para formar a la próxima generación de exploradores espaciales.
En resumen, LSF no solo construye tecnología espacial: construye comunidad y conocimiento compartido.
Puedes visitar su página web en:
Libre Space Foundation
Tecnología y proyectos destacados
Aquí entramos en terreno técnico. LSF ha desarrollado una impresionante gama de proyectos que abarcan desde satélites hasta cohetes, pasando por redes de comunicación y herramientas de análisis de datos.

Satélites y misiones espaciales
UPSat
- Primer satélite griego y el primero en el mundo hecho completamente con software y hardware libre.
- Fue lanzado en 2017 como parte de la misión QB50 para estudiar la termosfera terrestre.
- Utilizó licencias como CERN-OHLv2 para hardware y GNU GPLv3 para software.
QUBIK y PicoBus
- Serie de PocketQubes (satélites diminutos) diseñados por LSF.
- PicoBus es el primer desplegador de satélites de código abierto.
- Aunque algunos lanzamientos no alcanzaron órbita, demostraron la viabilidad de sistemas abiertos en misiones reales.
PHASMA
- Proyecto en colaboración con la ESA con un presupuesto de 2 millones de euros.
- Consta de tres CubeSats que usarán inteligencia artificial para monitorizar el espectro electromagnético, detectar interferencias y analizar señales de navegación como GPS y Galileo.
SatNOGS: la red global de estaciones terrestres
- Más de 500 estaciones activas en todo el mundo.
- Permite recibir telemetría de satélites y compartirla en tiempo real.
- Utiliza software definido por radio (SDR) y componentes accesibles como motores paso a paso y placas Arduino.
Otros proyectos técnicos
| Proyecto | Descripción breve |
|---|---|
| SIDLOC | Sistema para identificar y localizar satélites usando el efecto Doppler |
| Cronos | Cohete de combustible híbrido diseñado por estudiantes griegos |
| OpenSatCom | Evaluación de modelos abiertos en telecomunicaciones satelitales |
| Polaris | Herramienta de machine learning para analizar telemetría satelital |
| SDR MakerSpace | Plataforma para proyectos SDR en colaboración con la ESA |
| MetaSat | Esquema de metadatos para vincular datos, software y hardware de misiones |
Repositorios en GitHub
LSF mantiene más de 20 repositorios públicos en GitHub. Algunos destacados:
-
upsat-obc-software: software del ordenador de a bordo de UPSat. -
upsat-comms-hardware: diseño del sistema de comunicaciones. -
upsat-plotter: script en Python para visualizar telemetría. -
g5500-ardushield: shield Arduino para controlar antenas rotatorias.
Estos repositorios no solo documentan el trabajo técnico, sino que invitan a la colaboración abierta.
Puedes acceder a todo el repositorio en:
GitLab
Algunos de sus proyectos están diseñados con el software open source KiCad y podeis verlos en la página de este software:
KiCad Website



Noticias y eventos
Eventos recientes
- En octubre de 2022, LSF volvió al espacio con el lanzamiento de QUBIK-3 y QUBIK-4 en el cohete Firefly Alpha.
- En 2023, se anunció el proyecto PHASMA con la ESA, marcando un hito en la monitorización del espectro espacial.
- Participación activa en el Google Summer of Code, mentorando proyectos como Polaris y gr-satnogs.
- Organización del Open Source CubeSat Workshop, un evento anual que reúne a expertos y entusiastas del espacio libre.
Reflexión final
La Libre Space Foundation representa una revolución silenciosa pero poderosa en la exploración espacial.
En lugar de competir por supremacía tecnológica, propone colaborar por conocimiento compartido.
En lugar de ocultar sus avances, los publica.
En lugar de excluir, invita.
📡 En un mundo donde el espacio parece reservado para unos pocos, LSF nos recuerda que la curiosidad, la ciencia y la colaboración no tienen fronteras.
Blender 5.0: Vulkan no será el render por defecto… por ahora
Debian 13 Trixie: Servidor PC

En esta sección pretendo hablar de como optimizar y adaptar la distribución Debian Trixie a un uso diario como Servidor doméstico, desde mi propia experiencia de usuario.
El recomendar Debian es poder usar la combinación de un Sistema Operativo Libre y alternativo con una gran comunidad de soporte detrás del proyecto.
En la web de descargas podremos elegir la distribución que más se adapte a nuestras necesidades.
Para el caso de esta guía vamos a emplear la plataforma AMD64, que es la más recomendable para uso en un PC con Procesador 64bits Descarga directa
Adicionalmente en la propia web podemos encontrar unas excelentes guías de instalación donde el proceso de instalación es guiado con todo tipo de detalles.
Resumiendo el procedimiento a grandes rasgos:
- Grabamos la ISO descargada en un CD/DVD o USB según capacidad y necesidad.
- Seleccionamos la opción de arranque desde el nuevo dispositivo en la configuración de nuestra UEFI/BIOS. Obligatorio deseleccionar opción de arranque rápido en Windows en caso de tenerlo activo y/o instalado.
- Ejecutamos el asistente de instalación.
-
Importante tildar para instalar en sistema durante asistente instalación:
Entorno de escritorio Debian + MATE + SSH server + Utilidades estándar del sistema Debian, el resto de opciones recomiendo descartarlas. - Disfrutar de las bondades de un gran sistema operativo y una gran comunidad asociada al mismo.
La opción Debian Blend agrega paquetes preconfigurados, ampliar información
No recomiendo instalar ninguno en el servidor, tan solo debemos de continuar
Sistema Base
El usuario de sistema sobre el que realizare la guía es pi para seguir en la linea del blog, recordad sustituir dicho usuario por el que habéis creado durante la instalación.
Planteado el guión inicial vamos a personalizar nuestra instalación, pero antes recordando que los ajustes en su mayor parte los ejecutaremos desde una terminal de sistema.
Configurando: SUDO
Lo primero con lo que comenzamos es añadiendo nuestro usuario al grupo sudo del sistema, para ello ejecutamos en la terminal:
su
Se nos solicitara la contraseña de root que previamente le dimos en la instalación. Procedemos a instalar la aplicación:
apt-get update && apt-get -y install sudo nano
A continuacion debemos de añadir nuestro usuario a los principales grupos del sistema, entre ellos sudo:
cd /sbin && \
./usermod -aG audio pi && \
./usermod -aG video pi && \
./usermod -aG dialout pi && \
./usermod -aG plugdev pi && \
./usermod -aG tty pi && \
./usermod -aG sudo pi
Si no es así haz caso omiso, el fallo reside en el PATH del Sistema que durante el resto de configuraciones del server se corrige.
Vamos a repasar los principales atajos de teclado que encontramos en el editor nano:
| Acción | Resultado |
|---|---|
| Control + O | Guardar fichero |
| Control + X | Salir del editor |
| Control + X | Salir del editor |
| Control + C | Muestra número linea donde se encuentra cursor |
| Control + K | Cortar linea |
| Control + U | Pegar linea |
| Control + W | Buscar en el fichero |
| Control + W + R | Buscar y reemplazar en el fichero |
Añadimos privilegios sudo a nuestro usuario editando la configuración:
nano /etc/sudoers
Y agregamos la siguiente sentencia al final del archivo:
# MOD
pi ALL=(ALL) NOPASSWD: ALL
Guardamos los cambios, salimos del editor de texto y salimos de la sesión root.
exit
Y ya tendremos configurado debidamente el perfil sudo en nuestro usuario de sistema.
Ajustando: Repositorios Sistema
El gestor de paquetes Apt/Aptitude/Synaptic de nuestra distribución se basa en un listado de fuentes de instalación.
Primero haremos un backup de las actuales y crearemos una personalizada:
cd /etc/apt && \
sudo mv sources.list sources.pi && \
sudo nano sources.list
En el documento en blanco que se nos abre, añadimos las nuevas personalizadas:
# Oficiales
deb http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
# Seguridad
deb http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
deb-src http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
# Actualizaciones Sistema
deb http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
# Actualizaciones Sistema Backports
deb http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware
Guardamos los cambios, salimos del editor de texto y actualizamos el listado de paquetes de software y posibles actualizaciones del mismo:
sudo apt-get clean && \
sudo apt-get autoclean && \
sudo apt-get -y autoremove && \
sudo apt-get update && \
sudo apt-get -y upgrade && \
sudo apt-get -y dist-upgrade
Tras finalizar la actualización tendremos el sistema actualizado y con las últimas novedades/parches instalados.
Utilidades Sistema
Posiblemente tendrás algún controlador pendiente de actualizar y/o instalar el driver necesario para poder interactuar con el y no esta compilado en el kernel. Una solución sencilla es instalar un paquete con algunos de los principales drivers (3Com, Atheros, Radeon, …), y si además queremos maximizar la eficiencia de nuestro procesador instalaremos este parche:
AMD 64bits & INTEL 64bits
sudo apt-get update && \
sudo apt-get -y install firmware-linux-nonfree \
amd64-microcode intel-microcode
Si necesitamos des/comprimir algún fichero de nuestro sistema y no se encuentra dentro de los formatos más habituales de GNU/Linux, deberemos de darle soporte para poder interactuar:
sudo apt-get update && \
sudo apt-get -y install rar unrar zip unzip unace bzip2 lzop p7zip \
p7zip-full p7zip-rar sharutils lzip xz-utils mpack arj cabextract
Otro conjunto de utilidades adicionales a instalar que necesitaremos para futuros usos son:
sudo apt-get update && \
sudo apt-get -y install mc htop curl bc git wget curl dnsutils exfat-fuse ntfs-3g hfsprogs \
hfsplus build-essential automake libtool uuid-dev psmisc linux-source yasm lsof \
autoconf g++ subversion linux-source tofrodos git-core subversion dos2unix \
make gcc automake cmake git-core dpkg-dev fakeroot pbuilder dh-make debhelper devscripts \
patchutils quilt git-buildpackage pristine-tar git yasm cvs mercurial libexif* libid3tag* \
libavutil* libavcodec-dev libavformat-dev libjpeg-dev libsqlite3-dev libexif-dev libid3tag0-dev \
libogg-dev libvorbis-dev libflac-dev ffmpeg libssl-dev libgnutls-openssl-dev \
linux-headers-`uname -r`
Configurando Idioma Sistema
Ejecutaremos un pequeño asistente con la orden de terminal:
sudo dpkg-reconfigure locales
Para poner nuestro sistema en español, tenemos que marcar las siguientes opciones en el asistente configuración de locales y deseleccionar cualquier otra que pudiese estar activa:
- en_GB.UTF-8 UTF-8
- es_ES.UTF-8 UTF-8
Para la configuración regional predeterminada seleccionamos:
- es-ES.UTF-8
Ejemplo salida comando:
pi@overclock:~ $ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
es_ES.UTF-8... done
Generation complete.
Y a continuación configuro franja horaria sistema con el asistente:
sudo dpkg-reconfigure tzdata
Ejemplo salida comando:
pi@roverclock:~ $ sudo dpkg-reconfigure tzdata
Current default time zone: 'Europe/Madrid'
Local time is now: Sat Jul 15 18:00:20 CEST 2023.
Universal Time is now: Sat Jul 15 16:00:20 UTC 2023.
Configurando TTY
Este paso aunque no es obligatorio en un entorno de Servidor, si lo considero que es altamente recomendado para optimizar recursos de sistema. Lo que vamos a hacer es deshabilitar el autoinicio del entorno gráfico instalado MATE
Lo que debemos de hacer a continuacón es adaptar el sistema a un arranque sin gestor de inicio sesiones LightDM
Para ello instalamos y configuramos la siguiente dependencia:
sudo apt-get -y install xserver-xorg-legacy
Vamos a reconfigurarla debidamente, previo backup de su configuración:
sudo mv /etc/X11/Xwrapper.config /etc/X11/Xwrapper.bak && \
sudo nano /etc/X11/Xwrapper.config
Agregamos el siguiente contenido al fichero que estamos editando:
# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# This file was generated by the post-installation script of the
# xserver-xorg-legacy package using values from the debconf database.
#
# See the Xwrapper.config(5) manual page for more information.
#
# This file is automatically updated on upgrades of the xserver-xorg-legacy
# package *only* if it has not been modified since the last upgrade of that
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
# dpkg-reconfigure xserver-xorg-legacy
needs_root_rights=yes
allowed_users=anybody
Guardamos los cambios y salimos del editor de texto. Ahora vamos a reconfigurar SystemD para el arranque en terminal:
sudo systemctl set-default multi-user.target
Llegado a este punto el sistema tras un reinicio o encendido del PC nos solicitaria el usuario: pi y su contraseña: **** para hacer login en terminal.
Autologin TTY
Podemos configurar un autologin que no lo recomiendo pero lo dejo a modo informativo.
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d && \
sudo nano /etc/systemd/system/getty@tty1.service.d/override.conf
Agregamos el siguiente contenido al fichero que estamos editando:
[Service]
Type=simple
ExecStart=
ExecStart=-/sbin/agetty --autologin pi --noclear %I 38400 linux
Guardamos los cambios y salimos del editor de texto.
Configurando RC.LOCAL
Si no queremos crear un script único para la ejecución de un comando o un script cada vez que iniciamos un sistema tipo Unix (BSD, Gnu/Linux, etc) tenemos la posibilidad de llamarlo desde el fichero /etc/rc.local.
Cualquier comando que coloquemos o script al que llamemos en dicho fichero será ejecutado al final del arranque, es decir, cuando todos los scripts que tenemos en el runlevel correspondiente hayan sido ejecutados.
Esta opción no viene habilitada por defecto en Debian 13 y para ello tendremos que habilitarla, creamos el servicio para Systemd:
sudo nano /etc/systemd/system/rc-local.service
Agregamos el siguiente contenido al fichero que estamos editando:
[Unit]
Description=Script /etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Guardamos los cambios, salimos del editor de texto, ahora pasamos a crear el fichero rc.local
sudo nano /etc/rc.local
Agregamos el siguiente contenido al fichero que estamos editando:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# SALIR
exit 0
Guardamos los cambios, salimos del editor de texto, debemos de darle permisos de ejecución al ficher creado:
sudo chmod +x /etc/rc.local
Habilitamos el servicio para que se ejecute al inicio del sistema y lo lanzamos para comprobar el correcto funcionamiento:
sudo systemctl enable rc-local && \
sudo systemctl start rc-local.service && \
sudo systemctl status rc-local.service
Llegado a este punto de configuración del servidor recomiendo un reset al sistema:
sudo reboot
ZRAM
Ampliar información en esta entrada
Tras el reinicio el sistema arrancara en TTY. Adjunto cuadro resumen con los principales comandos terminal:
| Comando terminal | Resultado |
|---|---|
| startx | Arrancar entorno gráfico (MATE) |
| exit | Salir/Cerrar sesión TTY |
| sudo su | Iniciar sesion como ROOT |
| sudo reboot | Reiniciar sistema |
| sudo poweroff | Apagar sistema |
Alías
En informática alias es una orden disponible en varios intérpretes de comandos tales como los shells de Unix, 4DOS/4NT y Windows PowerShell, que permite reemplazar una palabra o serie de palabras con otra. Su uso principal es el de abreviar órdenes o para añadir argumentos de forma predeterminada a una orden que se usa con mucha frecuencia. Los alias se mantienen hasta que se termina la sesión en la terminal, pero normalmente se suelen añadir en el fichero de configuración del intérprete de órdenes para de esta forma siempre están disponibles para todas las sesiones de terminal.
Un ejemplo clarifica este tema de forma sencilla, en TTY un alías que suelo usar es reiniciar, que ejecuta la orden sudo reboot.
Para configurar los alías editaremos el fichero de configuración de nuestra distro para que tanto el usuario root como pi tengan acceso a ellos:
sudo nano /etc/bash.bashrc
Y añadiremos al final del fichero los alías que definamos:
#
# Alias
#
alias reiniciar="sudo reboot"
alias apagar="sudo poweroff"
alias instalar="sudo apt-get -y install"
alias desinstalar="sudo apt-get -y purge"
alias actualizar="sudo apt-get autoclean && sudo apt-get clean && sudo apt-get -y autoremove && sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo apt-get moo"
alias limpiarcache="sudo ldconfig && sudo sync && sudo sysctl -w vm.drop_caches=2 && sudo sync"
alias win="startx"
alias enlaces="sudo nano /etc/bash.bashrc"
alias grubfix="sudo nano /etc/default/grub && sudo update-grub"
Guardamos los cambios, salimos del editor de texto y para activarlos tendremos que volver a abrir la sesión TTY para ello solo basta con salir de ella:
exit
Y cuando tengamos de nuevo la TTY operativa con lanzar el comando actualizar se nos actualizara el Sistema Operativo a las última versión disponible.
Dejo un extracto de la ejecución del comando:
pi@overclock:~$ actualizar
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Obj:1 http://deb.debian.org/debian trixie InRelease
Des:2 http://deb.debian.org/debian trixie-updates InRelease [36,8 kB]
Obj:3 http://security.debian.org/debian-security trixie-security InRelease
Descargados 36,8 kB en 3s (11,9 kB/s)
Leyendo lista de paquetes... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Calculando la actualización... Hecho
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Calculando la actualización... Hecho
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Optimizar SSD
Si contamos con más de 4GB de RAM, podemos hacer que la carpeta temporal del sistema no use el disco duro. Es la carpeta donde escriben muchas aplicaciones que estamos usando. Son datos que se borran al apagar el ordenador, con lo que no nos importa que se escriban en RAM. Para activarlo editamos nuevamente fstab:
sudo nano /etc/fstab
Y agregamos la siguiente sentencia al final del fichero:
# MODS SSD
tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
Guardamos los cambios y salimos del editor de texto. Adjunto como queda mi fichero fstab:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdc2 during installation
#
# SSD
UUID=ea691ed1-9a94-47b3-8534-3e00c7f0922f / ext4 noatime,nodelalloc,i_version,inode_readahead_blks=64,errors=remount-ro 0 1
# SWAP
UUID=b64de4e0-eedf-4e31-aeeb-e460ef6ac57c none swap sw 0 0
#
# Lector DVD
#/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
#
# NAS
UUID=2f42917d-7c1f-4b7f-bff0-963f19b9dcf5 /media/rednas ext4 defaults,relatime 0 0
#
# MODS SSD
tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
La partición swap, como ya sabéis es una partición cuyo fin principal es su uso cuando la RAM está llena, pero la cual no está vacía aunque tengas la RAM a la mitad.
Por ello es recomendable decirle al sistema que la use lo menos posible, sólo si es estrictamente necesario, para ellos crearemos el fichero de configuración:
sudo nano /etc/sysctl.d/overclock.conf
Y agregamos al fichero las siguientes variables:
#
# MODS
#
vm.overcommit_memory=1
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_writeback_centisecs=1500
kernel.dmesg_restrict=0
net.core.rmem_max=16777216
net.core.wmem_max=4194304
kernel.unprivileged_userns_clone=1
fs.inotify.max_user_watches=100000
Guardamos los cambios y salimos del editor de texto.
Has de saber que cuando borramos un fichero, el sistema operativo lo marca como espacio utilizable.
Los discos SSD pueden encargarse de controlar dichos bloques de espacio y reagruparlos, con lo que a través de la controladora del disco, la gestión del espacio será más rápida.
Para que la controladora se encargue, le solicitamos que analice el disco desde el sistema operativo con el comando fstrim.
Vamos a programar esta tarea, para que la realice a diario:
sudo nano /etc/cron.daily/fstrim
Y agregamos el siguiente contenido:
#!/bin/sh
/sbin/fstrim --all || true
Guardamos los cambios, salimos del editor de texto y le damos permisos de ejecución:
sudo chmod +x /etc/cron.daily/fstrim
Solamente nos queda reiniciar el Servidor para activar las nuevas mejoras:
sudo reboot
Adicionalmente me gusta agregar que tras 10 reinicios el sistema compruebe errores:
sudo tune2fs -c 10 /dev/sda1
Modding
Antes de empezar con la parte de Modding, necesitamos instalar una dependencia, que nos dara información sobre la temperatura de nuestro sistema.
sudo apt-get update && \
sudo apt-get -y install lm-sensors
A continuación debemos de ejecutar un script instalado que nos detecta la configuración de nuestro Servidor y…
sudo sensors-detect
…le damos continuamente a la tecla INTRO para que tome la respuesta por defecto que es siempre que sí y de esta forma buscará todos los chips que podría analizar.
Contiuamos hasta que nos salga la siguiente pregunta:
Do you want to add these lines to /etc/modules automatically? (yes/NO)
En este momento copiad y guardad en un documento de texto temporal lo que tenéis por encima entre los dos cut here (por ejemplo a mí me ha salido lo siguiente):
#----cut here----
# Chip drivers
coretemp
#----cut here----
Le damos nuevamente a INTRO para que no añada esas líneas automáticamente al fichero de modulos ya que las agregaremos manualmente para evitar posibles fallos de incompatibilidad, para ello editamos el fichero:
sudo nano /etc/modules
Y agregamos la siguientes lineas al final del fichero:
# Chip drivers
coretemp
Guardamos los cambios y salimos del editor de texto. Muestro como ha quedado mi fichero:
pi@overclock:~$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
#
# Chip drivers
coretemp
Recomiendo reiniciar el Servidor para activar los cambios:
sudo reboot
Tras el reinicio ya podremos ver la información que hemos configurado:
sensors
En mi caso la información devuelta es la siguiente:
pi@overclock:~$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +27.8°C (crit = +119.0°C)
temp2: +29.8°C (crit = +119.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +33.0°C (high = +84.0°C, crit = +100.0°C)
Core 0: +30.0°C (high = +84.0°C, crit = +100.0°C)
Core 1: +30.0°C (high = +84.0°C, crit = +100.0°C)
Core 2: +29.0°C (high = +84.0°C, crit = +100.0°C)
Core 3: +27.0°C (high = +84.0°C, crit = +100.0°C)
$USER/.BASHRC
El fichero .bashrc es un archivo script que se ejecuta cada vez que una nueva sesión de terminal server se inicia en el modo interactivo. Esto es lo que ocurre cuando se inicia TTY o simplemente abrir una nueva pestaña de terminal. Este fichero contiene una serie de configuraciones para la sesión de terminal. Vamos a editarlo para mejorarlo:
cd /home/$USER && nano .bashrc
Buscamos la variable #force_color_prompt=yes y la descomentamos quedando en el fichero sin la # de la siguiente forma:
force_color_prompt=yes
Nos movemos con el editor al final del fichero y añadimos el siguiente script:
# MOTD
show_temp(){
sensors | grep -oP 'Core 0.*?\+\K[0-9]+'
}
let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let horas=$((${upSeconds}/3600%24))
let dias=$((${upSeconds}/86400))
UPTIME=`printf "%d dias, %02dh%02dm%02ds" "$dias" "$horas" "$mins" "$secs"`
read one five fifteen rest < /proc/loadavg
echo "$(tput setaf 2)
`date +"%A, %e %B %Y, %r"`
`uname -srmo`$(tput setaf 1)
Tiempo de actividad..: ${UPTIME}
Memoria RAM..........: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
Promedios de carga...: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
Procesos activos.....: `ps ax | wc -l | tr -d " "`
IP conexion por SSH..: $(echo $SSH_CLIENT | awk '{ print $1}')
Temperatura Sistema..: $(show_temp)ºC
$(tput sgr0)"
Guardamos los cambios, salimos del editor de texto y creamos el siguiente archivo:
nano .inputrc
Con el siguiente contenido:
# Flecha arriba
"\e[A":history-search-backward
# Flecha abajo
"\e[B":history-search-forward
Guardamos los cambios, salimos del editor de texto y reiniciamos para ver los cambios.
reiniciar
Adjunto resultado de lo que veremos tras el reinicio:
Linux debian 6.12.38+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.38-1 (2025-07-16) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.
Last login: Sun Ago 10 10:00:00 2025 from 192.168.1.112
domingo, 10 agosto 2025, 12:39:55
Linux 6.1.0-10-amd64 x86_64 GNU/Linux
Tiempo de actividad..: 0 dias, 00h03m47s
Memoria RAM..........: 27151572kB (Free) / 32831084kB (Total)
Promedios de carga...: 0.08, 0.09, 0.09 (1, 5, 15 min)
Procesos activos.....: 236
IP conexion por SSH..: 192.168.1.112
Temperatura Sistema..: 32.0ºC
pi@overclock:~$
Redes
Tras haber configurado nuestro sistema Base, vamos a configurar y segurizar nuestra red doméstica.
Identificando RED
La primera tarea que debemos de realizar es encontrar el nombre de nuestro identificador de red y el rango de la misma.
Este comando nos dara la información esperada:
ip a
Y entre los valores que muestra el comando me quedo con la siguiente información:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master state UP
group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx
inet 192.168.1.250/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
Ahora se que mi dispositivo de red cableada esta identificado como ens33 y que la IP en mi red es 192.168.1.250 rango DHCP
Configurando RED
Vamos a habilitar la redicción de puertos sobre IPv4 que posteriormente usaremos para entre otros configurar debidamente la VPN.
sudo nano /etc/sysctl.d/overclock.conf
Agregamos al final del fichero estas variables:
# IPV4
net.ipv4.ip_forward=1
# IPV6
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.tun0.disable_ipv6=1
Guardamos los cambios, salimos del editor de texto y pasamos a configurar una red Bridge con IP estática:
sudo apt-get update && \
sudo apt-get -y install bridge-utils net-tools ifupdown && \
sudo mv /etc/network/interfaces /etc/network/interfaces.bak && \
sudo nano /etc/network/interfaces
En el documento en blanco que se nos abre, lo configuro con mi nombre de red ens33 y la ip estática que le voy a configurar 192.168.1.90:
# LO
auto lo
iface lo inet loopback
# Interfaz ens33
allow-hotplug ens33
iface ens33 inet manual
# Bridge
auto br0
iface br0 inet static
address 192.168.1.90
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
bridge_ports ens33
bridge_stp off
bridge_fd 0
bridge_maxwait 0
# Bridge IPV6
iface br0 inet6 auto
accept_ra 1
Guardamos los cambios, salimos del editor de texto y nos queda corregir un posible fallo aunque no es común, en el fichero de resolución de DNS:
sudo mv /etc/resolv.conf /etc/resolv.conf.bak && \
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
Para evitar que NetworkManager entre en juego editaremos su configuración, para deshabilitar que juegue con redes configuradas:
sudo nano /etc/NetworkManager/NetworkManager.conf
Y dejamos el fichero con el siguiente contenido:
[main]
plugins=ifupdown,keyfile
dns=none
[ifupdown]
managed=false
Guardamos los cambios, salimos del editor de texto y a continuación debemos de reiniciar el servidor para aplicar los nuevos cambios producidos en el dispositivo de red:
sudo reboot
Tras reiniciar nuevamente comprobamos la nueva configuración de red:
ip a
Y vemos los cambios realizados:
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx
inet 192.168.1.90/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever</pre>
A partir de este momento nuestra red cableada la identificaremos con el nombre de br0 y la IP de nuestro servidor en casa sera 192.168.1.90.
@Lordpedal BOT
Adicional al Canal de Telegram donde público enlaces de interés, también dispongo en la red de un BOT que podeis usar para notificar eventos en vuestro sistema con ayuda de unos scripts.
En Telegram podeís encontrarlo con el alías @Lordpedalbot
Cuando lo arranques te dará la bienvenida y te notificará el ID que tienes en la red Telegram, este ID debes de anotarlo, porque será una variable que uses en los scripts que modificaremos a continuación.
NOTA: El token de referencia que se va usar en los scripts no tiene validez, haz de usar tu propio bot u otro token conocido. Para ello debes de reemplazar el valor 289352425:AAHBCcKicDtSFaY2_Gq1brnXJ5CaGba6tMA por otro.
Protección TSHH
La función de este bash script es la de informarte vía Telegram de una anomalía en la temperatura del sistema y proceder a un apagado del mismo de forma controlada. Vamos a crear el script:
mkdir -p $HOME/scripts && \
cd $HOME/scripts && \
nano tshh.sh && \
chmod +x tshh.sh
Y le agregamos el siguiente contenido:
#!/bin/bash
#
# https://lordpedal.github.io
# Another fine release by Lordpedal
#
# Fichero Log
data=`date`
usu=`uname`
ini=`echo "Script alarma de temperatura ejecutada con éxito"`
rutalog=/home/$USER
# ID Telegram
telegram=79593223
# Temperatura máxima
overheat=70
# Calcula temperatura y crea temporales de calculo
sensors | grep -oP 'Core 0.*?\+\K[0-9]+' > termopar
# Ejecuta alarma y aviso por telegram
while read tempactual
do
if [ "$tempactual" -ge "$overheat" ]
then
echo "$data - $usu - $ini. Ejecutada protección de temperatura. Alcanzados $tempactualºC" >> $rutalog/tshh.log
/usr/bin/curl --silent --output /dev/null --data-urlencode "chat_id=$telegram" --data-urlencode "text=Temperatura del Sistema:$tempactualºC. Por seguridad ejecutado el protocolo de apagado sistema" "https://api.telegram.org/bot289352425:AAHBCcKicDtSFaY2_Gq1brnXJ5CaGba6tMA/sendMessage"
# Apaga el sistema
sudo poweroff
else
echo "Temperatura de sistema: $tempactualºC"
fi
done<termopar
# Borra los temporales generados
rm termopar
NOTA: Recuerda que el valor del ID de Telegram debes de sustituirlo por el tuyo propio y el valor overheat cambialo según rangos de temperatura de tu procesador obtenido tras ejecutar: sensors, en mi caso el rango que obtenía era de (high = +84.0°C, crit = +100.0°C) por eso defino 70°C como valor más conservador.
Guardamos los cambios, salimos del editor de texto y programamos el sistema para que el script sea ejecutado cada 15 segundos:
crontab -e
Al ser la primera ejecución del comando nos solicitara con que editor queremos trabajar, recomiendo nano :
pi@overclock:~$ crontab -e
no crontab for pi - using an empty one
Select an editor. To change later, run select-editor again.
1. /bin/nano <---- easiest
2. /usr/bin/mcedit
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]: 1
Y añadimos al final el fichero, recuerda sustituir pi por tu usuario:
*/1 * * * * /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 15 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 30 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 45 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
Guardamos los cambios, salimos del editor de texto y listo ya tendriamos la protección activa. El fichero en mi caso queda de la siguiente forma:
pi@overclock:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
#
*/1 * * * * /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 15 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 30 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 45 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
Notificación Arranque Servidor
La función de este bash script es la de informarte vía Telegram de que el Servidor esta online. Vamos a crear el script:
mkdir -p $HOME/scripts && \
cd $HOME/scripts && \
nano overspeed.sh && \
chmod +x overspeed.sh
Y le agregamos el siguiente contenido:
#!/bin/bash
#
# https://lordpedal.github.io
# Another fine release by Lordpedal
#
# ID Telegram
telegram=79593223
# Mensaje Online
mensaje='Overclock Server Online ... Another fine release by Lordpedal'
# Inicia bucle chequeo de Red
while true
do
# Comprueba disponibilidad de Red
if ping -c 1 -W 5 google.com 1>/dev/null 2>&1
then
# Red disponible
echo "Conexion establecida..."
/usr/bin/curl --silent \
--output /dev/null \
--data-urlencode "chat_id=$telegram" \
--data-urlencode "text=$mensaje" \
"https://api.telegram.org/bot289352425:AAHBCcKicDtSFaY2_Gq1brnXJ5CaGba6tMA/sendMessage"
# Termina bucle disponibilidad de Red
break
else
# Red no disponible
echo "Conexion no establecida..."
fi
# Espera 1s y reinicia bucle
sleep 1
done
NOTA: Recuerda que el valor del ID de Telegram debes de sustituirlo por el tuyo propio y el valor mensaje cambialo por tu mensaje personalizado.
Guardamos los cambios, salimos del editor de texto y programamos el sistema para que el script sea ejecutado tras reinicio de sistema y disponibilidad de red:
crontab -e
Y añadimos al final el fichero, recuerda sustituir pi por tu usuario:
@reboot /home/pi/scripts/overspeed.sh >/dev/null 2>&1
Guardamos los cambios, salimos del editor de texto y listo ya tendriamos la notificación activa. El fichero en mi caso queda de la siguiente forma:
pi@overclock:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
#
*/1 * * * * /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 15 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 30 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
*/1 * * * * sleep 45 && /home/pi/scripts/tshh.sh >/dev/null 2>&1
@reboot /home/pi/scripts/overspeed.sh >/dev/null 2>&1
P3DNS
Es un docker-compose que integra las siguientes herramientas:
-
Pi-hole: Aplicación centrada en bloqueo de publicidad y entornos maliciosos de la red. -
DNScrypt-Proxy: Aplicación proxy de cifrado mediante diferentes protocolos de criptografía de las peticiones DNS. -
Cloudflared: Aplicación de cifrado DoH (DNS over HTTPS) de las peticiones DNS.
Antes de continuar debemos de realizar estos pasos:
Configurando DNS Pública
Como sabras tu IP doméstica no es tu IP pública y al igual que en un comienzo tu IP doméstica era DHCP lo mismo ocurre con la IP pública. Por tanto para poder redireccionar servicios, necesitamos disponer de IP pública estática. La forma más sencilla es usar un proveedor de DNS públicas de calidad como por ejemplo DuckDNS
Entramos en la web y creamos una cuenta gratuita en la cual registraremos nuestro dominio, ejemplo: lordpedal.duckdns.org.
Adjunto enlace tutorial oficial:
Tutorial de configuración en GNU/Linux vía programador de tareas cron
Aunque recomiendo usar la versión Docker: DuckDNS publicada en este blog.
Luego tenemos que configurar nuestro hosts para agregar nuestra DNS Pública:
sudo nano /etc/hosts
Buscamos la línea:
127.0.0.1 localhost
Y la modificamos con nuestra cuenta en DuckDNS:
127.0.0.1 localhost lordpedal.duckdns.org
Guardamos los cambios y salimos del editor de texto.
VPN´s
Una red privada virtual es una tecnología de red de ordenadores que permite una extensión segura de la red de área local sobre una red pública o no controlada como Internet. Permite que el ordenador en la red envíe y reciba datos sobre redes compartidas o públicas como si fuera una red privada, con toda la funcionalidad, seguridad y políticas de gestión de una red privada. Esto se realiza estableciendo una conexión virtual punto a punto mediante el uso de conexiones dedicadas, cifrado o la combinación de ambos métodos.
Wireguard (Recomendada)
Ampliar información en esta entrada
OpenVPN (Opcional)
Teniendo ya fijada una DNS Pública, una IP estática interna y la redirección de puertos, ya podemos proceder a configurar de forma sencilla el acceso mediante VPN
Vamos a bajar un cliente asistente donde configuramemos nuestra red VPN:
cd ~/ && \
wget https://git.io/vpn -O openvpn-install.sh && \
chmod 755 openvpn-install.sh && \
sudo ./openvpn-install.sh
Durante la instalación nos solicitara unos parametros de nuestros pasos previos:
- IPv4 (automatically detected, if not enter the local IPv4 address):
192.168.1.90 - Public IP (enter your public IP address):
lordpedal.duckdns.org - Protocol:
UDP - Port (change to your desired port):
2194 - DNS:
Current system resolvers - Client name:
Lordpedal
Vamos a afinar la configuración de la VPN con capas extras de personalización, ahora debemos de conocer la IP de la nuestra red virtual TUN0
sudo ifconfig tun0 | grep 'inet'
En mi caso el valor de referencia es: 10.8.0.1. Vamos a editar la configuración del servidor de OpenVPN
sudo nano /etc/openvpn/server/server.conf
Buscamos la linea donde el codigo empieza por (suele ser una única línea en según que casos alguna duplicada):
push "dhcp-option DNS
Y sustituimos la linea o si existen varias dejamos una sola que haga referencia al codigo push dhcp-option con lo siguiente:
push "dhcp-option DNS 10.8.0.1"
Guardamos los cambios, salimos del editor de texto y reiniciamos el servicio OpenVPN:
sudo systemctl restart openvpn
Recordad que el fichero OVPN generado en nuestro caso se llamaba Lordpedal lo tendremos que pasar a nuestra carpeta de usuario.
sudo cp /root/Lordpedal.ovpn /home/pi && \
sudo chown pi:pi /home/pi/Lordpedal.ovpn
Ahora ya podremos pasar el fichero OVPN a nuestro Smartphone/Tablet/Pendrive/… para poder conectarnos en remoto previa configuración router.
Recuerda abrir el Puerto 2194 a la IP 192.168.1.90 con Protocolo UDP si has seguido la configuración que detallo paso a paso.
SSH
SSH es un protocolo de comunicación que encripta los datos que se intercambian, y es virtualmente imposible romper la privacidad de la comunicación. El acrónimo ssh viene del inglés: Secure SHell.
El protocolo ssh es muy versátil, tiene un software cliente que posibilita el acceso a la línea de comandos, permite la transferencia de archivos y la creación de túneles seguros con soporte de comunicación para otros protocolos.
Los clientes ssh se dividen en dos grupos:
- Terminal SSH Es un emulador de terminal que permite acceder de forma remota desde un equipo a la línea de comandos del equipo remoto, utilizando el protocolo SSH.
- Cliente SFTP Se trata de un cliente para transferencia de archivos que utiliza el Protocolo de Transferencia Segura de Archivos. Sus siglas significan en inglés (Secure File Transfer Protocol (SFTP)
Entrando en materia, si durante la instalación de Debian no instalamos SSH podemos activarlo de la siguiente forma:
instalar openssh-server openssh-client
Realizado este punto o ya instalado anteriormente, sabemos que remotamente podremos acceder a nuestro Server desde nuestra red local con el siguiente comando, recuerda sustituir usuario pi e ip por tus datos:
ssh pi@192.168.1.90
Pero recomiendo dar un paso más en la seguridad de nuestro sistema, por ello ahora nos toca securizarlo en la medida de la posible cambiando puerto por defecto 22, usuario root, …
Para ello editaremos el fichero de configuración SSH:
sudo nano /etc/ssh/sshd_config
Adjunto mi fichero de configuración con los mods de seguridad activos:
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Port 69
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 3
MaxSessions 5
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Guardamos los cambios, salimos del editor de texto y reiniciamos el servicio:
sudo systemctl restart ssh
Y a partir de este momento para conectarnos por SSH lo haremos de la siguiente forma:
ssh pi@192.168.1.90 -p 69
Fail2BAN
Fail2ban es una herramienta de seguridad escrita en Python fundamental para cualquier servidor.
La principal función de Fail2ban es securizar un servidor del siguiente modo:
- Evitando accesos indeseados a nuestro equipo o servidor.
- Evitando ataques de fuerza bruta para que un tercero averigüe nuestra contraseña o tumbe el servidor.
Por un lado está monitorizando las autenticaciones que una determinada IP hace a un determinado/s puerto/s y servicio/s. Para ello está consultando permanente los logs de autenticación de nuestro sistema como por ejemplo el /var/log/auth.log. Vamos a proceder a instalarlo:
sudo apt-get update && \
sudo apt-get -y install fail2ban
Una vez instalado vamos a configurarlo:
cd /etc/fail2ban && sudo nano jail.conf
Adjunto a modo resumen las opciones a buscar y modificar:
ignoreip = 127.0.0.1/8
bantime = 600
maxretry = 5
Y segundo como las dejaremos, en mi caso la IP es de rango 192.168.1.0:
ignoreip = 127.0.0.1/8 192.168.1.0/24
bantime = 3600
maxretry = 3
Una vez finalizada la edición, guardaremos los cambios, saldremos del editor de texto y lo activaremos en local:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora vamos a crear una configuración específica para aprovecharnos de notificaciones vía Telegram:
cd /etc/fail2ban/action.d && sudo nano telegram.conf
Y le agregamos el siguiente contenido:
# Fail2Ban configuration file
#
# Author: Lordpedal
#
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = /etc/fail2ban/scripts/fail2ban-telegram.sh start
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = /etc/fail2ban/scripts/fail2ban-telegram.sh stop
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = /etc/fail2ban/scripts/fail2ban-telegram.sh ban <ip>
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban = /etc/fail2ban/scripts/fail2ban-telegram.sh unban <ip>
[Init]
init = 21121981
Guardamos los cambios, salimos del editor de texto y crearemos el script de notificación:
cd /etc/fail2ban && \
sudo mkdir scripts && \
cd scripts && \
sudo nano fail2ban-telegram.sh && \
sudo chmod +x fail2ban-telegram.sh
Agregamos el siguiente bash script:
#!/bin/bash
#
# https://lordpedal.github.io
# Another fine release by Lordpedal
#
while true
do
if ping -c 1 -W 3 google.com 1>/dev/null 2>&1
then
echo ""
break
else
echo ""
fi
sleep 1
done
# Opciones ejecucion
info=`hostname -f`
function show_uso {
echo "Fail2ban Telegram by Lordpedal"
echo ""
echo "Usar: $0 opcion <ip>"
echo ""
echo "Opcion: start (Inicia notificaciones)"
echo " stop (Detiene notificaciones)"
echo " ban <ip> (Banea IP especificada) Ej: ban 192.168.1.2"
echo " unban <ip> (Desbanea IP especificada) Ej: unban 192.168.1.2"
echo ""
exit
}
# Notificacion
function send_msg {
# ID Telegram
telegram=79593223
# Enlace BOT
url="https://api.telegram.org/bot289352425:AAHBCcKicDtSFaY2_Gq1brnXJ5CaGba6tMA/sendMessage"
# Envia mensaje
curl -s -X POST $url -d chat_id=$telegram -d text="$1"
exit
}
# Chequea argumentos de script
if [ $# -lt 1 ]
then
show_uso
fi
# Ejecuta una accion depende del argumento
if [ $# -lt 1 ]
then
show_uso
fi
# Ejecuta una accion depende del argumento
if [ "$1" = 'start' ]
then
msg="Seguridad+Fail2ban+ha+sido+iniciada+en+el+host+$info"
send_msg $msg...Mazanoke: Docker

Mazanoke es una aplicación web auto-hospedable para optimizar imágenes directamente en tu navegador, sin necesidad de conexión a internet ni envío de archivos a servidores externos. Es ideal para quienes buscan una alternativa privada y sencilla a herramientas online que pueden comprometer la privacidad.
Características principales:
- Optimización local: todo el procesamiento ocurre en tu dispositivo.
- Privacidad total: no rastrea, no sube archivos, no requiere conexión.
- Conversión de formatos: JPG, PNG, WebP, ICO, HEIC, AVIF, TIFF, GIF, SVG.
- Control de calidad: ajusta compresión, tamaño objetivo, dimensiones máximas.
- Modo oscuro/claro y diseño responsive.
- Instalable como PWA (Aplicación Web Progresiva).
Instalación
Vamos a realizar unos pasos previos para preparar el entorno, para ello en primer lugar creamos las carpetas donde alojar el proyecto:
mkdir -p $HOME/docker/mazanoke && \
cd $HOME/docker/mazanoke
Ahora llega el turno de crear el fichero de configuración docker-compose.yml lanzando el siguiente comando:
cat << EOF > $HOME/docker/mazanoke/docker-compose.yml
#version: '3'
services:
mazanoke:
image: ghcr.io/civilblur/mazanoke:latest
container_name: Mazanoke
ports:
- "1336:80"
restart: always
EOF
Vamos a repasar los principales parámetros que hemos añadido sobre la anterior base, para poder adaptarlos a nuestro sistema y configuración especifica:
| Parámetro | Función |
|---|---|
1336:80 |
Puerto de acceso interfaz Web :1336
|
restart: always |
Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio |
Una vez configurado, levantamos el servicio para ser configurado y ejecutado:
docker compose up -d
En mi caso, el servicio estaría disponible en la dirección web http://192.168.1.90:1336
Y listo!
it-tools: Docker

IT-Tools es una colección de herramientas web útiles para desarrolladores y profesionales de TI, empaquetadas como una aplicación web que puedes auto-hospedar fácilmente usando Docker.
-
Herramientas útiles como:
- Generador de contraseñas
- Conversor de código
- Generador de códigos OTP
- Constructor de consultas SQL
- Analizador de JWT
- … y muchas más.
- Interfaz web moderna y fácil de usar
- Código abierto bajo licencia GNU GPLv3
Tiene la función de poder marcar tus herramientas favoritas para tener un acceso rápido a ellas.
Vamos a crear el servicio en nuestro servidor de forma sencilla.
Instalación
Vamos a realizar unos pasos previos para preparar el entorno, para ello en primer lugar creamos las carpetas donde alojar el proyecto:
mkdir -p $HOME/docker/it-tools && \
cd $HOME/docker/it-tools
Ahora llega el turno de crear el fichero de configuración docker-compose.yml lanzando el siguiente comando:
cat << EOF > $HOME/docker/it-tools/docker-compose.yml
#version: '3'
services:
it-tools:
image: sharevb/it-tools:latest
container_name: It-tools
ports:
- "1334:8080"
restart: always
EOF
Vamos a repasar los principales parámetros que hemos añadido sobre la anterior base, para poder adaptarlos a nuestro sistema y configuración especifica:
| Parámetro | Función |
|---|---|
1334:8080 |
Puerto de acceso interfaz Web :1334
|
restart: always |
Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio |
Una vez configurado, levantamos el servicio para ser configurado y ejecutado:
docker compose up -d
En mi caso, el servicio estaría disponible en la dirección web http://192.168.1.90:1334
Y listo!
El monitoreo de temperatura para chips Intel queda huerfano en Linux
🟢 Negra sombra - Rosalía de Castro -- Poemas imprescindibles 3
Esta sección nace con una intención clara: acercar la poesía a una era que la ha olvidado, sin filtros ni etiquetas, sin exigir formación previa ni pedir credenciales de sensibilidad. Aquí caben los poemas inspiradores, los difíciles, los sencillos, los crudos, los tiernos, los oscuros, los brillantes, los que consuelan y los que incomodan. Porque la poesía, lejos de ser propiedad de las élites ni de los eruditos, es un lenguaje universal que puede atravesar a cualquiera de nosotros en el momento justo. Leer poesía es una forma de estar más vivo, de ver lo invisible, de sentir lo que no sabíamos que estaba en nosotros. Por eso quiero acercarte la poesía como un acto de resistencia íntima frente al ruido, la prisa y la trivialidad. La palabra poética —bien lo dijo Gabriel Celaya— es un arma cargada de futuro. Cuando una frase te hiere con belleza, cuando un verso te nombra sin conocerte, entonces algo cambia para siempre. Eso es lo que buscamos: ese temblor.
El Problema de Ser Demasiado Bueno, con Xavier Guix
“A las malas se aprende que ser bueno no hace que te amen, sino que te usen” – Xavier Guix ...
The post El Problema de Ser Demasiado Bueno, con Xavier Guix appeared first on Fitness Revolucionario.
A Quick Community Update on PinePhone Pro and What’s Next

Hey everyone! As many have noticed, the PinePhone Pro is currently out ot stock on the Pine Store. Unfortunately we have to deliver you the following news: the PinePhone Pro is officially discontinued. We were told it didn’t sell well enough to keep production going. But the good news for current owners are that spare parts will still be made for up to two years, depending on demand. Meanwhile, the trusty PinePhone (A64) is still alive and kicking, and Pine Store plans to keep it rolling for about two more years.
No new PinePhone (Yet), future with RISC-V
Right now, we’ve got no insider info on a brand-new PinePhone, so don’t expect any surprise announcements soon. Pine Store is steering its energy toward other projects (including RISC-V and a little bit of AI), which you’ve probably noticed with the Oz64, STAR64, StarPro64, and Alpha One launches.
And one last thing: later this month there’ll be a small batch of refurbished PinePhone Pros up for grabs — your final shot at owning one of these little powerhouses.
🦖 DEBIAN 13 a Examen: Lo BUENO, lo MALO y mi DRAMA con NVIDIA
¿Ha conseguido Debian dejar de ser la distro "aburrida"? ¿Es ahora una opción para novatos y expertos por igual? ¡Agárrate, que te lo cuento todo!
En este vídeo verás:
LO BUENO: ¡El lavado de cara! Nuevo look con KDE Plasma 6.3, APT 3.0 con colores, adiós a Neofetch y hola a Fastfetch.
LO POLÉMICO: El gran debate del firmware non-free. ¿Se ha vendido Debian? ¡Te doy mi opinión sin filtros!
LO FRIKI: Las tripas de Trixie. Adiós a los 32 bits, hola a RISC-V, el Kernel 6.16, PipeWire, el bug del año 2038 y mucho más.
LA SEGURIDAD: ¿Por qué ahora APT es un auténtico guardaespaldas para tus paquetes?
A LA CARTA: Las "Debian Blends" que te ahorran horas de configuración.
EL VEREDICTO FINAL: ¿Es para ti? Te digo claramente si deberías instalarlo (y cuándo NO deberías hacerlo).
🎥 Capítulos
0:00 ¡El dinosaurio Trixie!
1:30 Lo BUENO: El lavado de cara
4:15 Lo POLÉMICO: El salseo del firmware non-free
6:20 Lo FRIKI: Las tripas del dinosaurio
8:28 El Guardaespaldas de tus Paquetes (APT)
9:30 Debian a la Carta (Blends)
10:37 EL VEREDICTO FINAL: ¿Es para ti?
11:23 Experiencia Personal
12:20 ¡Tu opinión importa!
💜 Suscríbete https://www.youtube.com/c/karlasproject?sub_confirmation=1
🎩 Apoya el Canal https://www.youtube.com/c/KarlasProject/join
💻 Mi Setup Grabación
🔸 Cámara Principal: MARVUE B5 1080P 24MP
🔸 Webcam 1: Logitech C930e (con lente "Carl Zeiss Tassar")
🔸 Webcam 2: Logitech C922 Pro
🔸 Microfono de solapa: DERICAM Micrófono Lavalier
🔸 Microfono de escritorio: Trust Gaming 21753 GXT
🔸 Pantalla verde: KHOMO GEAR 138 x 208 cm
💻 Mi Setup PC
🔸 CPU: Intel Core i9-10850K (10 cores a 5,20GHz)
🔸 Gráfica: NVIDIA RTX 2060
🔸 RAM: 4x Corsair 8GB DDR4 3200 mHz
🔸 Alimentador: Mars Gaming MPII750
🔸 Cooler: MSI MAG CORELIQUID 240R
⭐ Twitter https://twitter.com/KarlaPerezYT
⭐ Instagram https://www.instagram.com/karlaperezyt
⭐ Grupo Telegram https://t.me/KarlasProject
⭐ Página Web https://karlaperezyt.com
🔺 El objetivo de este vídeo (y del canal) es meramente educativo y/o divulgativo en el que se comparte información relacionada con la tecnología, la informática y software.
Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for "fair use" for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use.
Emuladores de Nes y SNES para Flinux, TDL y Spirit OS
💥 ¡Usa el cupón de descuento LOCOSPORLINUX para obtener un 10% de DESCUENTO!
GRUPO de Loc-OS (Signal): https://signal.group/#CjQKIFpeW4u6-wUj77vVPasE67ei1584iPtiPYXZ3g5WxuznEhANYSt0HuhrK43ePRS7lC-z
CANAL de Loc-OS (Telegram): https://t.me/locoslinux
#tinycorelinux #nintendo #emuladores
Entrenar en Ayunas: Pérdida de Grasa, Rendimiento Deportivo y Más
En este video hablo sobre el entrenamiento en ayunas o bajo en glucógeno. Vemos si ayuda a perder grasa o ...
The post Entrenar en Ayunas: Pérdida de Grasa, Rendimiento Deportivo y Más appeared first on Fitness Revolucionario.
Como instalar Debian 13 GNU/Linux | PASO A PASO, FÁCIL!
💥 ¡Usa el cupón de descuento LOCOSPORLINUX para obtener un 10% de DESCUENTO!
https://www.debian.org/
https://etcher.balena.io/
GRUPO de Loc-OS (Signal): https://signal.group/#CjQKIFpeW4u6-wUj77vVPasE67ei1584iPtiPYXZ3g5WxuznEhANYSt0HuhrK43ePRS7lC-z
CANAL de Loc-OS (Telegram): https://t.me/locoslinux
#debian13 #linux #xfce
😬 Ubuntu 25.10 hace algo ARRIESGADO que puede salir MAL ¿Genialidad o locura?
También comparo el movimiento con Fedora y Arch, y te doy consejos prácticos si eres early adopter o si usas Ubuntu para trabajar.
Mi consejo directo:
Si tu hardware no es muy nuevo, no compensa arriesgarte con un kernel tan reciente para el día a día. Si te gusta vivir al límite, haz copia/USB y cuéntame tu experiencia.
Bug Tracking Épico
¿Instalaste el 6.17 RC1? Déjame tu bug, hardware y pasos para reproducir en comentarios. Hacemos seguimiento entre todos.
Si te gustó, suscríbete y comparte con otro linuxero/a. ¡Gracias por volver a este canal! 🧡
#Ubuntu2510 #Linux #Kernel
🎥 Capítulos
00:00 — Introducción: “se la juega”
00:22 — Canonical apuesta por 6.17-rc1
01:06 — ¿Qué es un RC? (release candidate)
01:20 — Metáfora de los tomates (aún “verdes”)
01:42 — ¿Qué es el “freeze” de Ubuntu?
02:11 — Fedora y Arch: quién empuja el ritmo
02:50 — Fallos típicos en RC: Wi-Fi / GPU / Audio
04:02 — ¿25 millones de testers?
05:25 — Consejos: early adopter vs profesional
06:07 — Bug Tracking Épico
💜 Suscríbete https://www.youtube.com/c/karlasproject?sub_confirmation=1
🎩 Apoya el Canal https://www.youtube.com/c/KarlasProject/join
💻 Mi Setup Grabación
🔸 Cámara Principal: MARVUE B5 1080P 24MP
🔸 Webcam 1: Logitech C930e (con lente "Carl Zeiss Tassar")
🔸 Webcam 2: Logitech C922 Pro
🔸 Microfono de solapa: DERICAM Micrófono Lavalier
🔸 Microfono de escritorio: Trust Gaming 21753 GXT
🔸 Pantalla verde: KHOMO GEAR 138 x 208 cm
💻 Mi Setup PC
🔸 CPU: Intel Core i9-10850K (10 cores a 5,20GHz)
🔸 Gráfica: NVIDIA RTX 2060
🔸 RAM: 4x Corsair 8GB DDR4 3200 mHz
🔸 Alimentador: Mars Gaming MPII750
🔸 Cooler: MSI MAG CORELIQUID 240R
⭐ Twitter https://twitter.com/KarlaPerezYT
⭐ Instagram https://www.instagram.com/karlaperezyt
⭐ Página Web https://karlaperezyt.com
🔺 El objetivo de este vídeo (y del canal) es meramente educativo y/o divulgativo en el que se comparte información relacionada con la tecnología, la informática y software.
Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for "fair use" for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use.
Ventoy, la herramienta indispensable del técnico de sistemas
Podrás llevar decenas de ISOS de sistemas operativos y aplicaciones que se instalan desde una ISO (OPNSense, Pfsense, OpenWrt, etc)
También podrás usarlo para actualizaciones de Firmware, etc
🟢 Julio VERNE - El adivino optimista -- PROFETAS (4)
Una alternativa a 12ft.io. Tu propia web de eliminación de muros de pago, publicidad, cookies.
Veamos cómo poner en marcha un servidor con Python en nuestro propio equipo que haga que podamos sortear los muros de pago, publicidad y cookies de ciertas webs

La web actual se sumerge cada vez más en una «truñificación» que impide navegar con seguridad, y acceder a servicios y webs de manera libre. Banners emergentes, pagar o aceptar el rastreo de miles de empresas a traves de cookies, publicidad agresiva, rastreo, paga por leernos, etc.
Solo las webs pequeñas y los blogs artesanales poseen ese reposo y aire fresco que una vez tuvo internet. Las grandes webs tratan de exprimir cada clic, cada visita de aquellas personas que las visitan.
Hasta hace poco existía, una web llamada 12ft.io que limpiaba todo ese edor que provocan con sus muros de pago, sus anuncios de cookies con oscuros patrones de aceptación, sus banners incómodos, su rastreo. Pero me entero hoy que esa web ha sido cerrada, no se permite tal cosa en el internet actual.
Visitar una web de noticias (no pondré enlaces) puede ser un suplicio en el que desistir (cosa que hago cuando soy tratado tan agresivamente) o claudicar a sus requisitos. Vale, es su web y ponen sus reglas. Y como no me parecen justas, simplemente las rechazo de pleno o justifico el poder circundarlas para no caer en su fango maloliente.
Hasta ahora utilizaba la web 12ft.io para saltarme esos muros de pago, anuncios de cookies, etc. La utilización era muy sencilla, simplemente delante de la url llena de fango que querías visitar anteponías 12ft.io.<url> y la web se encargaba de hacer que pudieras visitar la web sin tener que mancharte de la mierda que destilan.
Pero eso no podía permitirse, así que la maquinaria «truñificadora» se puso en marcha con todos sus recursos para cerrar definitivamente esa herramienta. Pero poco conocen cómo funciona realmente la web y lo difícil que es ponerle puertas al campo.
Gracias al usuario del fediverso, Salva, me entero de una alternativa que existe a esa herramienta, y que se llama 13ft.io cuyo código está en GitHub y que me he procurado en clonar, por si la maquinaria «truñificadora» trata de cortar también este recurso.
Lo bueno de este recurso, es que lo podemos poner en marcha de manera local en nuestro equipo, por lo que es imposible que alguien pueda cerrar la web que ofrece dicho servicio porque es un servidor levantado en nuestro equipo que utilizaremos cuando queramos transitar entre el fango de las webs sin querer mancharnos de la bazofia que esparcen.
Tienes varias formas de hacer funcionar el recurso y poner en marcha el servidor que filtrará todos los muros de pago, cookies, etc. Podemos utilizar Docker, pero en mi caso me he decantado por el script en Python que levanta el servidor necesario y que hará todo el trabajo de filtrado permitiéndonos navegar sin problemas.
Lo primero clonar el repositorio de GitHub. Una vez hecho esto instalamos los paquetes de Python necesarios.
flask requests bs4
En mi caso los he instalado desde los repositorios de mi distribución (openSUSE Tumbleweed). El último no lo he encontrado, pero, instalando el primero con todos los paquetes recomendados ha funcionado sin problemas.
Una vez instalado todo, simplemente desde la carpeta app/ ejecutamos el script en python:
python3.13 portable.py
Y nos dará el siguiente mensaje:
* Serving Flask app 'portable' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 * Running on http://192.168.1.10:5000
Pinchamos en la dirección que nos muestra (direcciones locales de nuestro equipo y en nuestra red) Esto levantará un servidor con una página en la que introduciremos la url que queremos limpiar y visitar.
Después si queremos visitar otras páginas o enlaces dentro de esa web, tendremos que copiar el enlace que queremos visitar y copiarlo en la barra de dirección de nuestro navegador.
http://127.0.0.1:5000/<url_a_visitar>
Siempre que sigamos teniendo levantado el servidor que el script de Python ha levantado. Bastante simple, efectivo y muy útil.
Un buen método, resistente a la censura que servirá para poder accerder a todas esas webs que nos piden muros de pago, pagar o permitir que nos rastreen, etc.
Enlaces de interés

El Director de Radio Nacional de España dice que revisará el caso de los bloqueos a AntennaPod
En respuesta a una pregunta de un periodista, Javier Hernández Bravo, director de RNE, dice que se revisará el bloqueo de RNE a la aplicación de podcasts AntennaPod

Nuevo capítulo en la cruzada del bloqueo de Radio Nacional de España al acceso de sus podcasts por parte de algunas aplicaciones, entre ellas AntennaPod, la aplicación de software libre para gestionar tus podcasts en Android disponible en F-droid.
En este caso, quiero traducir un artículo escrito por James Cridland para la web podnews.net donde se hace eco de esta crisis en la que el ente público bloquea algunas aplicaciones de podcasts de acceso libre a su contenido.
Dar las gracias a James Cridland por darme permiso expreso para traducir su artículo que tenéis en inglés en este enlace:
La emisora pública española RTVE está bloqueando los podcasts de su emisora de radio nacional, RNE, de algunas aplicaciones de podcasts de terceros. Pero inusualmente, la compañía todavía publica fuentes RSS abiertas para todos sus programas, por lo que los programas aparecen en todas las aplicaciones de podcast que los usan.
La emisora ha optado por bloquear deliberadamente aplicaciones de podcast específicas para que no descarguen el audio. Una de esas aplicaciones de podcast que RNE está bloqueando es AntennaPod, una aplicación de podcast gratuita en Android.
Es una de las aplicaciones más populares en Android, y en España, el 78,8% de los usuarios españoles de teléfonos móviles usan teléfonos móviles Android.
Los usuarios han descubierto que RNE está bloqueando específicamente AntennaPod, según el agente de usuario de la aplicación, que está configurado correctamente para cada descarga. No está claro por qué: la aplicación no contiene publicidad y es de código abierto. Se puede descargar gratis y actúa de acuerdo con el contrato no escrito entre los editores de podcasts y las aplicaciones.
«Revisaremos el caso de AntennaPod», dijo J. Javier Hernández Bravo de RTVE, en un correo electrónico a Podnews, después de que le pidiéramos comentarios. Nos dijo: «RNE Audio continúa publicando fuentes RSS abiertas y, al mismo tiempo, ha decidido bloquear algunas aplicaciones de podcast de terceros para que no descarguen audio. Muchas de esas plataformas estaban ganando dinero con nuestro contenido».
No hay plataformas de podcast que Podnews conozca que cobren por el acceso a fuentes RSS abiertas. (Siempre estamos agradecidos de saber de alguno). Algunas aplicaciones de podcast contienen publicidad gráfica, pero este no es el caso de AntennaPod.
Bloquear no es el camino a seguir
RNE continúa publicando fuentes RSS abiertas, por lo que los programas de la emisora aparecen en aplicaciones de podcast, pero el audio no está disponible. Esto significa que los programas de RNE aparecen sin ningún problema, pero no se reproducen en algunos de ellos, lo que hace que el público piense que la aplicación, en lugar del editor, tiene la culpa. Como ejemplo, un hilo largo en el foro de soporte de AntennaPod, que está atendido por voluntarios, tratando de depurar el problema.
Apple Podcasts, de donde la mayoría de las aplicaciones obtienen su directorio de podcasts, distribuye direcciones de fuentes RSS abiertas a aplicaciones de podcasts de terceros. Apple ofrece a los editores la opción de optar por no participar en esta distribución: pero RNE no ha utilizado esta función, prefiriendo ofrecer a los oyentes españoles una experiencia rota en otros reproductores.
RNE dice: «Mantenemos acuerdos con las principales plataformas de audio y video como Spotify, YouTube y Apple Podcasts. Creemos que los usuarios afectados son una minoría».
RNE acababa de decirnos que algunas empresas estaban «ganando dinero» con el contenido de RNE, pero luego da tres ejemplos de las que lo hacen.
- Spotify gana dinero con el contenido de podcasts comercializando agresivamente actualizaciones premium de su aplicación de música y, en algunos casos, reproduciendo publicidad de audio antes y después del audio del episodio.
- YouTube pone la publicidad frente al contenido del podcast y comercializa una versión premium.
- Apple Podcasts gana dinero con el contenido de podcasts al estar disponible exclusivamente como una aplicación en iPhones y Macs, que solo Apple vende.
AntennaPod no hace ninguna de estas cosas: entonces, ¿por qué está bloqueado?
Y no bloqueando en absoluto
RNE le dice a Podnews: «Para escuchar nuestro contenido, no es necesario descargar la aplicación RNE Audio; es posible hacerlo directamente desde la URL https://www.rtve.es/play/radio/. También puede encontrar contenido escribiendo directamente su nombre en la barra de búsqueda de su navegador».
De hecho, puede escuchar a través de reproductores web, ya que el agente de usuario proporcionado por un sitio web es el agente de usuario del navegador, no la aplicación. Así, RNE pierde el control total de su contenido en la web, donde la publicidad es fácil de añadir a las páginas, pero es capaz de bloquear las aplicaciones de podcast porque dan información responsable sobre qué aplicación las está descargando.
RNE es una emisora de servicio público. El propietario de RNE, RTVE, recibe dinero de los contribuyentes españoles a través del gobierno español y un impuesto a los operadores de televisión de pago en el país. Sin embargo, esto significa que las mismas personas que pagan por el contenido de RTVE no pueden escuchar en el reproductor de podcasts de su elección.
RNE ha respondido a podnews.net: «Creemos que nuestro compromiso con el servicio público se fortalece al cumplir con la responsabilidad de saber dónde está nuestro contenido y qué se está haciendo con él», lo que no explica por qué están publicando fuentes RSS abiertas, disponibles en cualquier lugar, y solo bloquean específicamente algunas aplicaciones de podcast como AntennaPod.
Y, por supuesto, las estadísticas de descarga están disponibles directamente en los servidores de RNE, dondequiera que haya un podcast disponible.
Tampoco es por derechos
Por último, RNE nos dice, de forma opaca, que «existen limitaciones de derechos de emisión y distribución». El feed RSS abierto es el método de distribución, que no han restringido.
Los archivos de audio de RNE, ya sea que escuche a través de Apple o a través de AntennaPod, son los mismos y se descargan directamente desde los servidores de RNE. Conservan la propiedad total. No entendemos el argumento.
¿Por qué las emisoras de servicio público están tan en contra de que el público escuche?
Con el tremendo éxito del podcasting en todo el mundo (773 millones de horas de podcasts consumidas cada semana solo en los EE. UU.), está claro que el podcasting está teniendo un momento.
Hasta ahora, sin embargo, las emisoras públicas parecen estar luchando contra el podcasting. Hemos visto a la BBC bloquear aplicaciones por motivos espurios; Radio-Canada envía demandas legales engañosas a los podcasters, y Danish Radio elimina programas de RSS abiertos en favor de su propia aplicación.
Los resultados son claros: los usuarios no instalan estas aplicaciones, prefiriendo usar las aplicaciones que ya tienen en su teléfono. Los usuarios de aplicaciones de servicio público apenas están creciendo y envejeciendo. En un momento en que la radiodifusión de servicio público está bajo una renovada presión para obtener financiación, los organismos de radiodifusión están haciendo una elección no forzada a favor de la irrelevancia.
La elección de RNE de publicar a sabiendas fuentes RSS abiertas que no funcionan en algunas aplicaciones, sin consultar con esos desarrolladores de aplicaciones, es uno de los ejemplos más atroces.
En 2023, la emisora recibió 1.070 millones de euros (1.240 millones de dólares) según un informe anual publicado por la empresa. Esa financiación se realiza en virtud de la Ley 17/2006, que obliga a RTVE a «lograr la cobertura universal». Bloquear las aplicaciones de podcast disponibles gratuitamente parecería ir en contra de este requisito. Si RTVE no quiere ser una emisora pública, es bienvenido a devolver ese dinero.
Hasta aquí la traducción del artículo escrito por James Cridland para la web podnews.net, que me ha permitido traducir y publicar en mi pequeño blog, muchas gracias por eso.
En el artículo se ve que los argumentos defendidos por RNE y su «defensora del oyente» que me dió son bastante débiles y no justifican una medida como la que han implementado.
Bloquear algunas aplicaciones de podcasts frente a otras no tiene nada que ver con derechos de autor, ni con conocer los datos reales de las estadísticas de descargar, los argumentos que expuso la defensora del oyente.
Bloquear ciertas aplicaciones frente a otras es un acto sin ninguna base. Y más justificando que se puede hacer desde su web o aplicaciones propias. Le ha faltado decir «Total, sois cuatro gatos los que usáis aplicaciones como esas, por qué no bloquearos».
Espero que RNE reconsidere esta medida desigual y arbitraria basada en argumentos nada sólidos.
Y espero que os haya gustado este artículo en el que el autor ha tenido comunicación con el director de RNE y ha conseguido que de declaraciones oficiales, más allá de la respuesta copia/pega de la «defensora del oyente».

Ya entre nosotres Debian 13 Trixie
Desde el sábado 9 de agosto tenemos una nueva versión de la madre de todas la distros
Debian 13 Trixie
Segunda actualización de FLStream | Pequeña demostración en hardware real!
💥 ¡Usa el cupón de descuento LOCOSPORLINUX para obtener un 10% de DESCUENTO!
GRUPO de Loc-OS (Signal): https://signal.group/#CjQKIFpeW4u6-wUj77vVPasE67ei1584iPtiPYXZ3g5WxuznEhANYSt0HuhrK43ePRS7lC-z
CANAL de Loc-OS (Telegram): https://t.me/locoslinux
Pruebo Debian 13 Trixie GNU/Linux LXQt
💥 ¡Usa el cupón de descuento LOCOSPORLINUX para obtener un 10% de DESCUENTO!
GRUPO de Loc-OS (Signal): https://signal.group/#CjQKIFpeW4u6-wUj77vVPasE67ei1584iPtiPYXZ3g5WxuznEhANYSt0HuhrK43ePRS7lC-z
CANAL de Loc-OS (Telegram): https://t.me/locoslinux
Comandos Debian: Referencia Avanzada (RSA Ref.2)

Esta chuleta está centrada en tres áreas clave:
- Administración remota
- Contenedores (Docker y Podman)
- Automatización del sistema
Está organizada por tema y pensada para uso diario, auditoría, despliegues y control de sistemas remotos.
Administración remota por SSH y sistemas distribuidos
Conexión y ejecución remota:
ssh usuario@host # Conexión remota
ssh -p 2222 usuario@host # Puerto personalizado
ssh usuario@host "uptime" # Ejecutar comando remoto
Copiar archivos entre hosts:
scp archivo.txt usuario@host:/destino/
rsync -avz /local/ usuario@host:/remoto/
rsync -e ssh -av /origen/ host:/destino/ # Canal SSH explícito
Transferencia de clave pública (sin contraseña):
ssh-keygen # Genera clave
ssh-copy-id usuario@host # La copia al host remoto
Comandos remotos encadenados:
ssh usuario@host "cd /proyecto && git pull && ./deploy.sh"
Multiples hosts con Parallel SSH:
pssh -h hosts.txt -l root -i "hostname && df -h"
Administración de contenedores (Docker, Podman)
Docker: gestión básica:
docker ps -a # Contenedores activos y detenidos
docker run -d -p 8080:80 nginx # Ejecución desatendida
docker exec -it contenedor bash # Shell dentro del contenedor
docker cp contenedor:/archivo ./ # Copiar archivos desde contenedor
Docker: gestión avanzada:
docker inspect nginx | jq . # Salida estructurada
docker stats # Monitorización por contenedor
docker system prune -a # Elimina todo lo no usado
docker update --restart=always nombre # Política de reinicio
Podman (sin demonio):
podman run -it alpine sh # Contenedor sin root
podman ps -a # Estado
podman images # Imágenes disponibles
Podman + systemd: contenedor como servicio:
podman generate systemd --name web --files --restart-policy=always
cp container-web.service ~/.config/systemd/user/
systemctl --user enable --now container-web.service
Automatización con cron, systemd-timer y scripts
Cron (usuario):
crontab -e # Editar tareas
crontab -l # Listar
Ejemplo de tarea:
30 2 * * * /usr/local/bin/respaldo.sh
Systemd timer personalizado:
Archivo mi-tarea.service:
[Unit]
Description=Tarea automatizada
[Service]
Type=oneshot
ExecStart=/usr/local/bin/respaldo.sh
Archivo mi-tarea.timer:
[Unit]
Description=Ejecutar cada 15 minutos
[Timer]
OnBootSec=10min
OnUnitActiveSec=15min
Unit=mi-tarea.service
[Install]
WantedBy=timers.target
Activación:
systemctl daemon-reload
systemctl enable --now mi-tarea.timer
systemctl list-timers
Scripts autoauditados: ejemplo:
#!/bin/bash
LOG=/var/log/auditoria_$(date +%F).log
echo "[Inicio $(date)]" >> "$LOG"
uptime >> "$LOG"
df -h >> "$LOG"
ps -eo pid,%cpu,%mem,cmd --sort=-%cpu | head -10 >> "$LOG"
echo "[Fin $(date)]" >> "$LOG"
inotify: ejecutar al cambiar archivo:
inotifywait -m /etc/nginx/nginx.conf -e modify |
while read; do systemctl restart nginx; done
Comando at (una sola vez):
echo "/usr/local/bin/mensaje.sh" | at now + 10 minutes
Automatización con Ansible
Información del sistema
ansible --version # Ver versión instalada
ansible-config list # Mostrar configuración activa
ansible-doc -l # Listar módulos disponibles
ansible-doc <modulo> # Ver ayuda de un módulo
Inventario y conectividad
ansible all -m ping # Probar conexión SSH
ansible -i hosts.ini grupo -m ping # Usar inventario personalizado
ansible-inventory --list -y # Mostrar inventario estructurado
Comandos ad-hoc (acciones rápidas)
ansible all -m shell -a "uptime" # Ejecutar comando remoto
ansible web -m copy -a "src=local.txt dest=/tmp/" # Copiar archivo
ansible db -m apt -a "name=htop state=present" # Instalar paquete
ansible all -m reboot # Reiniciar remotos
Ejecución de playbooks
ansible-playbook despliegue.yml # Ejecutar playbook
ansible-playbook -i hosts.ini servicio.yml # Inventario personalizado
ansible-playbook -l web main.yml # Filtrar grupo de hosts
ansible-playbook --check mantenimiento.yml # Modo simulación (dry run)
Gestión de claves y secretos
ansible-vault create credenciales.yml # Crear archivo cifrado
ansible-vault edit credenciales.yml # Editar
ansible-playbook --ask-vault-pass secreto.yml # Ejecutar playbook cifrado
Utilidades y depuración
ansible all -m setup # Recopilar facts
ansible web -m debug -a "msg='Deploy OK'" # Mensaje de prueba
ansible-playbook -v script.yml # Modo verboso
ansible-playbook --start-at-task="Instalar Apache" archivo.yml
Comandos Debian: Referencia Básica (RSA Ref.1)
Gestión de paquetes
# apt update # Actualizar índice
# apt upgrade # Actualizar paquetes
# apt install paquete # Instalar paquete
# apt remove paquete # Eliminar paquete
# apt purge paquete # Eliminar con configuración
# apt autoremove # Quitar dependencias obsoletas
# dpkg -i archivo.deb # Instalar paquete .deb
# dpkg -l | grep nombre # Ver paquetes instalados
# apt-cache search palabra # Buscar paquetes por palabra clave
Información del sistema
$ uname -r # Versión del kernel
$ lsb_release -a # Detalles de distribución
$ hostnamectl # Hostname y SO
$ free -h # Memoria libre
$ df -h # Uso de disco
$ top / htop # Procesos activos
$ ps aux # Todos los procesos
$ who / w # Usuarios activos
Administración de usuarios
# adduser luisgulo # Crear usuario
# deluser luisgulo # Eliminar usuario
# passwd luisgulo # Cambiar contraseña
# usermod -aG sudo luisgulo # Añadir al grupo sudo
# chage -l luisgulo # Ver política de contraseña
Archivos y permisos
$ ls -la # Ver detalles y ocultos
$ chmod 755 archivo # Cambiar permisos
$ chown usuario:grupo archivo # Cambiar propietario
$ find / -name archivo # Buscar archivo por nombre
$ cp origen destino # Copiar
$ mv origen destino # Mover/renombrar
$ rm archivo # Eliminar
$ touch archivo # Crear archivo vacío
Red y conexión
$ ip a # Ver interfaces
$ ping 8.8.8.8 # Comprobar conectividad
$ ss -tuln # Ver puertos abiertos
$ curl http://... # Solicitud HTTP
$ wget http://... # Descargar archivo
$ scp archivo usuario@host:~/destino # Copiar por SSH
$ ssh usuario@host # Conectarse por SSH
Seguridad básica
# ufw status # Ver estado del firewall
# ufw enable # Activar firewall
# ufw allow 22/tcp # Permitir puerto SSH
# fail2ban-client status # Estado de protección
# last # Últimos accesos
# tail -n 50 /var/log/auth.log # Registro de autenticación
Mantenimiento
# journalctl -xe # Ver errores recientes
# dmesg # Mensajes del kernel
# systemctl status servicio # Estado de servicio
# systemctl restart nginx # Reiniciar servicio
# du -sh /carpeta # Tamaño de carpeta
# df -h # Espacio en disco
Recursos adicionales y documentación (RSA-17)

Este apartado recopila recursos clave para ampliar tus conocimientos, resolver dudas específicas, y acceder a documentación oficial y ejemplos prácticos en cada área tratada en la Ruta del SysAdmin de SoloConLinux.
1. Manuales y ayuda integrada
Comandos integrados
man comando # Manual completo
comando --help # Ayuda rápida
info comando # Manual más detallado (GNU)
whatis comando # Descripción corta
apropos tema # Búsqueda de comandos por tema
Ejemplo:
man tar
tar --help
2. Documentación oficial por tema
| Tema | Documentación principal |
|---|---|
| Linux general | https://tldp.org |
| Comandos bash | https://www.gnu.org/software/bash/manual/ |
| man pages (online) | https://man7.org/linux/man-pages/ |
| systemd / journald | https://freedesktop.org/wiki/Software/systemd/ |
| Debian manual | https://www.debian.org/doc/ |
| Arch Wiki | https://wiki.archlinux.org |
| SELinux | https://selinuxproject.org/page/Main_Page |
| Ubuntu Server Guide | https://help.ubuntu.com/lts/serverguide/ |
| Fedora Documentation | https://docs.fedoraproject.org/ |
| Red Hat System Admin Guide | https://access.redhat.com/documentation |
| OpenSUSE Documentation | https://doc.opensuse.org/ |
3. Cheatsheets y guías rápidas
- https://cheat.sh → Buscador de comandos directo desde terminal
- https://devhints.io → Guías rápidas para herramientas de desarrollo
- https://learnxinyminutes.com → Resúmenes por lenguaje de programación
Ejemplo desde terminal:
curl cheat.sh/tar
4. Comunidades y soporte
| Comunidad | Enlace |
|---|---|
| Stack Overflow | https://stackoverflow.com |
| Reddit (Linux) | https://reddit.com/r/linux |
| LinuxQuestions | https://linuxquestions.org |
| Ask Ubuntu | https://askubuntu.com |
| Arch Linux Forum | https://bbs.archlinux.org |
5. Documentación por servicio
| Servicio | Documentación oficial |
|---|---|
| Apache | https://httpd.apache.org/docs/ |
| Nginx | https://nginx.org/en/docs/ |
| OpenSSH | https://www.openssh.com/manual.html |
| vsftpd | https://security.appspot.com/vsftpd.html |
| Samba | https://wiki.samba.org/index.php/Main_Page |
| BIND (DNS) | https://bind9.readthedocs.io/en/latest/ |
| Postfix | http://www.postfix.org/documentation.html |
| Certbot / SSL | https://certbot.eff.org/docs/ |
| OpenVPN | https://openvpn.net/community-resources/ |
| SELinux | https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/using_selinux/index |
6. Libros recomendados
- Linux Pocket Guide – Daniel J. Barrett
- The Linux Command Line – William Shotts
- UNIX and Linux System Administration Handbook – Evi Nemeth et al
- How Linux Works: What Every Superuser Should Know – Brian Ward
→ Muchos de estos están disponibles como edición digital en bibliotecas técnicas, distribuciones educativas o sitios como GitHub.
7. Repositorios y colecciones útiles
- https://github.com/awesome-linux
- https://github.com/ibraheemdev/modern-unix
- https://github.com/k4m4/linux-sysadmin
→ Incluyen scripts, configuraciones, referencias y herramientas.
SIEMPRE hay una PRIMERA VEZ
Cuetlachtli Tech es un canal creado para aprender juntos, el que sabe enseña y el que no sabe pregunta así de simple.
- Toda la musica del canal pertenece a #Tracktribe y a #JeremyBlake
- www.youtube.com/@TrackTribe
- www.youtube.com/@RedMeansRecording
Instala Debian 13 Trixie para uso de Workstation
Video relacionado:
Activar hibernación en Linux
https://www.youtube.com/watch?v=XQcJlW7Uqao
Blog https://www.lastdragon.net/
Foro del canal https://foro.lastdragon.net
Twitter https://twitter.com/LastDragonMX
Patreon https://www.patreon.com/lastdragon
Link de grupo a Telegram https://t.me/lastdragonmex
🟢 Desiderata - Max Ehrmann -- Poemas imprescindibles 2
Esta sección nace con una intención clara: acercar la poesía a una era que la ha olvidado, sin filtros ni etiquetas, sin exigir formación previa ni pedir credenciales de sensibilidad. Aquí caben los poemas inspiradores, los difíciles, los sencillos, los crudos, los tiernos, los oscuros, los brillantes, los que consuelan y los que incomodan. Porque la poesía, lejos de ser propiedad de las élites ni de los eruditos, es un lenguaje universal que puede atravesar a cualquiera de nosotros en el momento justo. Leer poesía es una forma de estar más vivo, de ver lo invisible, de sentir lo que no sabíamos que estaba en nosotros. Por eso quiero acercarte la poesía como un acto de resistencia íntima frente al ruido, la prisa y la trivialidad. La palabra poética —bien lo dijo Gabriel Celaya— es un arma cargada de futuro. Cuando una frase te hiere con belleza, cuando un verso te nombra sin conocerte, entonces algo cambia para siempre. Eso es lo que buscamos: ese temblor.