<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rafael Adiosdado Caballero Diéguez</title>
    <description>The latest articles on DEV Community by Rafael Adiosdado Caballero Diéguez (@adeodatohub).</description>
    <link>https://dev.to/adeodatohub</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4080290%2F8a06c258-1e9e-4587-84c8-b6b0ef4eec4b.png</url>
      <title>DEV Community: Rafael Adiosdado Caballero Diéguez</title>
      <link>https://dev.to/adeodatohub</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adeodatohub"/>
    <language>en</language>
    <item>
      <title>Cómo protegí mi correo y mi web: SPF, DKIM y DMARC en la práctica.</title>
      <dc:creator>Rafael Adiosdado Caballero Diéguez</dc:creator>
      <pubDate>Mon, 17 Aug 2026 11:15:34 +0000</pubDate>
      <link>https://dev.to/adeodatohub/como-protegi-mi-correo-y-mi-web-spf-dkim-y-dmarc-en-la-practica-4c7</link>
      <guid>https://dev.to/adeodatohub/como-protegi-mi-correo-y-mi-web-spf-dkim-y-dmarc-en-la-practica-4c7</guid>
      <description>&lt;p&gt;Un día me hice la pregunta incómoda: &lt;strong&gt;¿puede alguien enviar correos haciéndose pasar por mí?&lt;/strong&gt; Sin la protección adecuada, la respuesta es sí — y colaría. Así que me puse a cerrar esa puerta en mi propio dominio. Comparto cómo funciona, por si te sirve.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema: suplantar un correo es más fácil de lo que crees
&lt;/h2&gt;

&lt;p&gt;El protocolo del correo (SMTP) nació sin autenticación: por diseño, cualquiera puede escribir en el campo "De:" lo que quiera. Es la base del &lt;strong&gt;phishing&lt;/strong&gt; y del &lt;strong&gt;fraude del CEO&lt;/strong&gt; (BEC), el que más dinero mueve. Si tu dominio no está protegido, alguien puede escribir a tus clientes o a tu propio entorno como si fueras tú, y el correo llegará con tu nombre.&lt;/p&gt;

&lt;p&gt;La defensa no es un producto que se compra: son &lt;strong&gt;tres estándares abiertos&lt;/strong&gt; que se configuran una vez en el DNS del dominio y trabajan juntos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capa 1 · SPF — quién puede enviar en mi nombre
&lt;/h2&gt;

&lt;p&gt;SPF (&lt;em&gt;Sender Policy Framework&lt;/em&gt;) es una lista blanca de los servidores autorizados a enviar correo con tu dominio. Si un mensaje sale de un servidor que no está en la lista, el receptor sabe que algo huele mal. Es un registro TXT. En mi caso, el correo va por Zoho, así que:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=spf1 include:zohomail.eu ~all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El &lt;code&gt;~all&lt;/code&gt; indica "lo que no esté autorizado, trátalo como sospechoso". Solo puede existir &lt;strong&gt;un&lt;/strong&gt; registro SPF por dominio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capa 2 · DKIM — una firma que prueba que es auténtico
&lt;/h2&gt;

&lt;p&gt;DKIM (&lt;em&gt;DomainKeys Identified Mail&lt;/em&gt;) añade a cada correo una &lt;strong&gt;firma criptográfica&lt;/strong&gt;. El servidor de envío firma con una clave privada y el receptor verifica con la clave pública publicada en tu DNS. Demuestra dos cosas: que el correo salió de verdad de ti y que &lt;strong&gt;nadie lo manipuló&lt;/strong&gt; por el camino. La clave pública se publica en un registro TXT bajo un "selector" (en mi proveedor, &lt;code&gt;zmail._domainkey&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Capa 3 · DMARC — qué hacer con quien falla (y visibilidad)
&lt;/h2&gt;

&lt;p&gt;DMARC (&lt;em&gt;Domain-based Message Authentication&lt;/em&gt;) es el que ata todo: le dice al receptor qué hacer con los correos que no pasan SPF/DKIM, y —clave— te envía &lt;strong&gt;informes&lt;/strong&gt; de quién está intentando enviar en tu nombre. Su política es progresiva:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;p=none&lt;/code&gt; — solo observa e informa (no afecta a la entrega).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;p=quarantine&lt;/code&gt; — lo que falla va a spam.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;p=reject&lt;/code&gt; — lo que falla se rechaza directamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo mío está en &lt;code&gt;quarantine&lt;/code&gt; con alineamiento estricto y con informes activados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=quarantine; adkim=s; aspf=s; rua=mailto:...@adeodato.es; fo=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La forma correcta de avanzar es empezar en &lt;code&gt;none&lt;/code&gt;, revisar los informes unas semanas para asegurarte de que no bloqueas nada legítimo, y subir después a &lt;code&gt;quarantine&lt;/code&gt; y &lt;code&gt;reject&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sin esto: el doble castigo
&lt;/h2&gt;

&lt;p&gt;Un dominio sin autenticación sufre lo peor de dos mundos: por un lado, &lt;strong&gt;cualquiera puede suplantarte&lt;/strong&gt;; por otro, tus &lt;strong&gt;correos legítimos acaban en spam&lt;/strong&gt;, porque los proveedores desconfían de lo que no está autenticado. Pierdes seguridad y entregabilidad a la vez.&lt;/p&gt;

&lt;h2&gt;
  
  
  La web también: empieza por los cimientos
&lt;/h2&gt;

&lt;p&gt;La misma lógica aplica al sitio web: &lt;strong&gt;adeodato.es&lt;/strong&gt; va por &lt;strong&gt;HTTPS&lt;/strong&gt; y con el dominio bien configurado. La seguridad no es una capa que se añade al final, es el cimiento sobre el que se construye lo demás.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crear, no comprar
&lt;/h2&gt;

&lt;p&gt;Nada de esto es un producto ni una licencia: son estándares abiertos y públicos que cualquiera puede implementar y auditar. Prefiero soluciones que entiendo y poseo, sin ataduras de proveedor.&lt;/p&gt;

&lt;h2&gt;
  
  
  La lección
&lt;/h2&gt;

&lt;p&gt;Autenticar el correo es de las medidas de mayor impacto y menor coste que existen: se configura una vez y protege para siempre contra un vector de ataque que sigue siendo el número uno. Lo apliqué primero en mi propia casa — &lt;strong&gt;predico con el ejemplo&lt;/strong&gt; — porque la mejor forma de recomendar algo es haberlo hecho tú antes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Escrito por Rafael Adiosdado Caballero Diéguez — **Adeodato&lt;/em&gt;&lt;em&gt;, ciberseguridad IT/OT y desarrollo seguro. Más en &lt;a href="https://adeodato.es" rel="noopener noreferrer"&gt;adeodato.es&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>networking</category>
      <category>security</category>
    </item>
    <item>
      <title>Control parental en Android sin root: DNS-over-HTTPS, bloqueo de ajustes y de apps (así construí AdeoShield)</title>
      <dc:creator>Rafael Adiosdado Caballero Diéguez</dc:creator>
      <pubDate>Sun, 16 Aug 2026 16:51:39 +0000</pubDate>
      <link>https://dev.to/adeodatohub/control-parental-en-android-sin-root-filtrado-con-dns-over-https-asi-construi-adeoshield-56kf</link>
      <guid>https://dev.to/adeodatohub/control-parental-en-android-sin-root-filtrado-con-dns-over-https-asi-construi-adeoshield-56kf</guid>
      <description>&lt;p&gt;title: "Control parental en Android sin root: DNS-over-HTTPS, bloqueo de ajustes y de apps (así construí AdeoShield)"&lt;br&gt;
published: false&lt;br&gt;
description: "Control parental para Android sin root: filtrado DNS-over-HTTPS (AdGuard Family), bloqueo de ajustes sensibles, bloqueo de apps por PIN y protección PBKDF2. Defensa en 3 capas y modelo de amenaza honesto."&lt;br&gt;
tags: android, kotlin, security, privacy&lt;br&gt;
canonical_url: &lt;a href="https://adeodato.es/articulo-adeoshield.html" rel="noopener noreferrer"&gt;https://adeodato.es/articulo-adeoshield.html&lt;/a&gt;&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;Publicado originalmente en &lt;a href="https://adeodato.es/articulo-adeoshield.html" rel="noopener noreferrer"&gt;adeodato.es&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Filtrar lo que ve un Android &lt;strong&gt;sin rootearlo y sin ADB&lt;/strong&gt; parece imposible: el sistema aísla las apps entre sí. La clave no es pelearse con Android, sino usar sus propias piezas —&lt;strong&gt;VpnService&lt;/strong&gt; y &lt;strong&gt;servicio de Accesibilidad&lt;/strong&gt;— para montar una defensa en capas. Así construí &lt;strong&gt;AdeoShield&lt;/strong&gt;: nació para proteger a una familia de verdad, y es también un ejercicio de ingeniería de seguridad.&lt;/p&gt;
&lt;h2&gt;
  
  
  Qué hace, en resumen
&lt;/h2&gt;

&lt;p&gt;AdeoShield (nativo en Kotlin + Jetpack Compose) no es solo un filtro de webs. Combina cuatro capacidades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filtrado de red por DNS-over-HTTPS&lt;/strong&gt; contra &lt;strong&gt;AdGuard Family DNS&lt;/strong&gt; (bloquea contenido adulto y malicioso a nivel de resolución de nombres).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bloqueo de los ajustes sensibles&lt;/strong&gt; del sistema que permitirían desactivar la protección.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bloqueo de aplicaciones por PIN:&lt;/strong&gt; el adulto elige qué apps proteger y AdeoShield exige el PIN para abrirlas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protección por PIN&lt;/strong&gt; de toda la configuración, con criptografía seria.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Cómo funciona: defensa en tres capas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Capa de resolución.&lt;/strong&gt; Un &lt;code&gt;VpnService&lt;/code&gt; local captura las consultas DNS del dispositivo y las reenvía cifradas (DoH) a AdGuard Family DNS. No hay servidor propio ni túnel a terceros: el contenido no deseado &lt;em&gt;ni siquiera llega a resolverse&lt;/em&gt;. El esqueleto del túnel es el patrón estándar de Android:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AdeoShield"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"10.0.0.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addDnsServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"10.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// el DNS lo atiende la propia app&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;vpnInterface&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;establish&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// Leer las consultas DNS del descriptor, resolverlas por DoH y filtrar.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Capa de persistencia.&lt;/strong&gt; Un &lt;code&gt;AccessibilityService&lt;/code&gt; vigila las pantallas que apagarían la protección —Accesibilidad, VPN, DNS privado, administradores de dispositivo, opciones de desarrollador— y las bloquea o las protege con PIN. Sin esta capa, el filtro se desactivaría en dos toques.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Capa de autenticación.&lt;/strong&gt; El PIN protege toda la configuración: derivado con &lt;code&gt;PBKDF2WithHmacSHA256&lt;/code&gt;, &lt;strong&gt;120.000 iteraciones&lt;/strong&gt; y &lt;em&gt;salt&lt;/em&gt; aleatorio por instalación. Nunca se guarda en claro, y hay bloqueo temporal tras varios intentos fallidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Más que webs: bloqueo de aplicaciones por PIN
&lt;/h2&gt;

&lt;p&gt;La parte que más suele sorprender: además de filtrar dominios, AdeoShield deja al adulto &lt;strong&gt;seleccionar apps concretas&lt;/strong&gt; de la lista de instaladas. Cuando alguien intenta abrir una app bloqueada, el servicio de Accesibilidad &lt;strong&gt;intercepta la apertura y pide el PIN&lt;/strong&gt; antes de dejar entrar. El control no es solo de red, también de acceso a aplicaciones — todo bajo la misma autenticación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09dt1s6xtolgj066t6zj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09dt1s6xtolgj066t6zj.jpg" alt="Bloqueo de acceso y protecciones del sistema" width="800" height="2293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Protecciones configurables y el punto ciego del DNS privado
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Granularidad:&lt;/strong&gt; cinco protecciones activas por defecto; el bloqueo de "Ajustes del sistema" se ofrece como opción avanzada &lt;em&gt;desactivada&lt;/em&gt; por defecto, por su impacto en la usabilidad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detección de DNS privado (DoT):&lt;/strong&gt; si el usuario configura un DNS privado a nivel de sistema, este podría resolver consultas &lt;em&gt;antes&lt;/em&gt; de que entren en el túnel. AdeoShield detecta esa situación y avisa — un vector de elusión que muchas soluciones ignoran.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El modelo de amenaza (y sus límites honestos)
&lt;/h2&gt;

&lt;p&gt;Parte de la ingeniería seria es decir &lt;strong&gt;hasta dónde NO llega&lt;/strong&gt; la defensa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Restricted Settings (Android 13+):&lt;/strong&gt; el sistema bloquea conceder Accesibilidad a apps instaladas por &lt;em&gt;sideload&lt;/em&gt; (APK), lo que afecta a la capa de bloqueo de ajustes en dispositivos modernos. En Android 10 no ocurre. Documentado en el modelo de amenazas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS privado del sistema (DoT):&lt;/strong&gt; puede resolver antes del túnel; la app avisa, pero la mitigación total depende de proteger esa pantalla.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceso físico:&lt;/strong&gt; modo seguro o restablecimiento de fábrica sortean cualquier control parental de app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La premisa es honesta: en un dispositivo que el usuario controla físicamente, ninguna protección a nivel de app es absoluta. El objetivo es &lt;strong&gt;elevar mucho el coste y la dificultad&lt;/strong&gt; de eludirla, no prometer lo imposible. Probado en dispositivos reales (Galaxy J6 con Android 10 y A54 con Android 13+), con APK de release firmado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué open source (GPL-3.0)
&lt;/h2&gt;

&lt;p&gt;AdeoShield es libre bajo &lt;strong&gt;GPL-3.0&lt;/strong&gt;: cualquier derivado debe seguir siendo libre. En una herramienta de protección familiar, que el código sea auditable importa — nadie tiene que fiarse de mi palabra, puede leerlo.&lt;/p&gt;

&lt;h2&gt;
  
  
  La lección
&lt;/h2&gt;

&lt;p&gt;Incluso un "simple" control parental es un ejercicio de ingeniería de seguridad: entender el modelo de la plataforma, usar sus piezas a tu favor, cifrar por defecto, defender en profundidad, proteger la propia app y ser transparente sobre sus límites. Pensar como atacante para construir mejor como desarrollador.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Escrito por Rafael Adiosdado Caballero Diéguez — **Adeodato&lt;/em&gt;&lt;em&gt;, ciberseguridad IT/OT y desarrollo Android seguro. Más en &lt;a href="https://adeodato.es" rel="noopener noreferrer"&gt;adeodato.es&lt;/a&gt; · &lt;a href="https://github.com/Adeodato-hub/AdeoShield" rel="noopener noreferrer"&gt;AdeoShield en GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>security</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Slowloris: cómo una sola máquina tumba un servidor web (y cómo defenderte)</title>
      <dc:creator>Rafael Adiosdado Caballero Diéguez</dc:creator>
      <pubDate>Sun, 16 Aug 2026 16:23:49 +0000</pubDate>
      <link>https://dev.to/adeodatohub/slowloris-como-una-sola-maquina-tumba-un-servidor-web-y-como-defenderte-3kco</link>
      <guid>https://dev.to/adeodatohub/slowloris-como-una-sola-maquina-tumba-un-servidor-web-y-como-defenderte-3kco</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Publicado originalmente en &lt;a href="https://adeodato.es/articulo-slowloris.html" rel="noopener noreferrer"&gt;adeodato.es&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Una sola máquina, sin botnets y sin saturar la red, puede dejar un servidor web sin responder en segundos. No es un ataque volumétrico: es &lt;strong&gt;Slowloris&lt;/strong&gt;, un ataque de Denegación de Servicio de &lt;strong&gt;Capa 7&lt;/strong&gt; que no ahoga tu ancho de banda, sino tus conexiones. Lo reproduje en laboratorio para entenderlo por dentro y, sobre todo, para saber pararlo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué es Slowloris y por qué es peligroso
&lt;/h2&gt;

&lt;p&gt;Un ataque volumétrico clásico busca saturar la red con tráfico masivo: es ruidoso y fácil de detectar. Slowloris hace lo contrario. Abre cientos de conexiones y envía las cabeceras HTTP &lt;strong&gt;a cámara lenta&lt;/strong&gt;, de forma incompleta, manteniendo los &lt;em&gt;sockets&lt;/em&gt; ocupados esperando datos que nunca llegan. Cuando se agota el límite de conexiones del servidor, deja de atender a usuarios legítimos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No consume ancho de banda:&lt;/strong&gt; el consumo de red es mínimo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le basta una sola máquina:&lt;/strong&gt; no necesita botnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parece tráfico legítimo:&lt;/strong&gt; peticiones HTTP válidas desde una IP normal, así que evade los firewalls de red.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  La demostración: del reconocimiento al colapso
&lt;/h2&gt;

&lt;p&gt;En un laboratorio controlado, con &lt;code&gt;slowhttptest&lt;/code&gt;, el ataque adopta la forma de un &lt;em&gt;Slow Headers&lt;/em&gt; contra la página de login del servidor objetivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;slowhttptest &lt;span class="nt"&gt;-c&lt;/span&gt; 1000 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; 10 &lt;span class="nt"&gt;-r&lt;/span&gt; 200 &lt;span class="nt"&gt;-u&lt;/span&gt; http://servidor-victima/login.php &lt;span class="nt"&gt;-t&lt;/span&gt; GET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada parámetro cuenta parte de la historia que un defensor debe reconocer: &lt;code&gt;-c 1000&lt;/code&gt; mantiene 1000 conexiones abiertas; &lt;code&gt;-H&lt;/code&gt; activa cabeceras lentas; &lt;code&gt;-i 10&lt;/code&gt; envía un fragmento cada 10 s para mantener viva la conexión; &lt;code&gt;-r 200&lt;/code&gt; abre 200 conexiones nuevas por segundo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;En el segundo 10:&lt;/strong&gt; 623 conexiones ocupadas, 0 cerradas y &lt;code&gt;service available: NO&lt;/code&gt;. El servidor está caído — sigue esperando cabeceras que nunca llegarán.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4vv7nkkd28yjf3vdqddz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4vv7nkkd28yjf3vdqddz.png" alt="Captura del colapso del servicio en Capa 7" width="792" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué funcionó: la vulnerabilidad no es el hardware
&lt;/h2&gt;

&lt;p&gt;El servidor no cayó por falta de potencia, sino por &lt;strong&gt;configuración&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timeouts laxos:&lt;/strong&gt; tolera esperas larguísimas por cabeceras que no llegan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sin límite por IP:&lt;/strong&gt; ningún tope de conexiones por origen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capa 7 = tráfico legítimo:&lt;/strong&gt; las peticiones parecen válidas y evaden los firewalls de red.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sin WAF ni IDS:&lt;/strong&gt; nadie alertó del volumen anómalo de conexiones abiertas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cómo detectarlo (perspectiva Blue Team)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pico de conexiones concurrentes desde muy pocas IPs.&lt;/li&gt;
&lt;li&gt;Muchas conexiones &lt;code&gt;ESTABLISHED&lt;/code&gt; que no envían datos: esperan cabecera.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workers agotados con la CPU y el ancho de banda bajos&lt;/strong&gt; — la pista clave frente a un ataque volumétrico.&lt;/li&gt;
&lt;li&gt;Peticiones cuya cabecera se recibe a goteo y nunca se completa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regla de oro:&lt;/strong&gt; si las conexiones abiertas suben pero el tráfico real no, sospecha.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo defenderte: el playbook
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timeouts agresivos&lt;/strong&gt; — &lt;code&gt;RequestReadTimeout&lt;/code&gt; (Apache) / &lt;code&gt;client_header_timeout&lt;/code&gt; (Nginx). La medida de mayor impacto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mod_reqtimeout&lt;/strong&gt; — corta automáticamente las conexiones lentas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Límites por IP&lt;/strong&gt; — &lt;code&gt;LimitRequestFields&lt;/code&gt;, &lt;code&gt;MaxKeepAliveRequests&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control de tasa&lt;/strong&gt; — &lt;code&gt;limit_req_zone&lt;/code&gt; en Nginx.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fail2ban&lt;/strong&gt; — bloqueo dinámico ante comportamiento anómalo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WAF / CDN&lt;/strong&gt; (Cloudflare, Akamai) — absorben y filtran el tráfico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La clave: &lt;strong&gt;los timeouts estrictos impiden que las conexiones incompletas ocupen sockets indefinidamente&lt;/strong&gt;, que es el mecanismo del ataque.&lt;/p&gt;

&lt;h2&gt;
  
  
  La lección
&lt;/h2&gt;

&lt;p&gt;La robustez de un sistema no se mide por lo rápido que procesa peticiones, sino por su capacidad de gestionar &lt;strong&gt;conexiones anómalas&lt;/strong&gt;. Slowloris opera bajo el radar, simulando tráfico legítimo y agotando recursos de forma silenciosa pero letal. Entender el ataque es el primer paso para diseñar la defensa.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Escrito por Rafael Adiosdado Caballero Diéguez — **Adeodato&lt;/em&gt;&lt;em&gt;, ciberseguridad IT/OT. Ayudo a PYME e industria a detectar, contener y responder ataques reales, también en entornos OT. Más en &lt;a href="https://adeodato.es" rel="noopener noreferrer"&gt;adeodato.es&lt;/a&gt; · &lt;a href="https://github.com/Adeodato-hub/SOC-Adeodato" rel="noopener noreferrer"&gt;SOC Adeodato en GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>blueteam</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
