{"id":10781,"date":"2025-06-13T08:58:00","date_gmt":"2025-06-13T06:58:00","guid":{"rendered":"https:\/\/www.loading.es\/blog\/?p=10781"},"modified":"2025-06-18T11:32:34","modified_gmt":"2025-06-18T09:32:34","slug":"fail2ban-evita-ataques-fuerza-bruta-vps","status":"publish","type":"post","link":"https:\/\/www.loading.es\/blog\/fail2ban-evita-ataques-fuerza-bruta-vps\/","title":{"rendered":"Evita ataques por fuerza bruta en tu VPS con Fail2Ban"},"content":{"rendered":"\n<p>\u00bfTienes un <strong><a href=\"https:\/\/www.loading.es\/servidores-vps-cloud\/index.html\" target=\"_blank\" rel=\"noopener\" title=\" VPS con administraci\u00f3n completa en Loading\">VPS<\/a><\/strong> y te preocupa su seguridad? Es normal. Cuando tu servidor est\u00e1 conectado a internet, est\u00e1 expuesto constantemente a intentos de acceso no autorizados. No hablamos de ciberdelincuentes con capucha, sino de <strong>bots autom\u00e1ticos<\/strong> que recorren la red buscando servidores mal protegidos. Por suerte, tenemos <strong>Fail2Ban<\/strong>.<\/p>\n\n\n\n<p>Uno de los m\u00e9todos m\u00e1s comunes que usan estos bots es el <strong>ataque por fuerza bruta<\/strong>. Prueban combinaciones de usuario y contrase\u00f1a, una tras otra, hasta que alguna funciona. Si no haces nada para evitarlo, y tus contrase\u00f1as no son todo lo seguras que deber\u00edan, es posible que acierten. Y aunque no lo consigan, estos intentos <strong>consumen recursos de tu servidor<\/strong> y lo ralentizan.<\/p>\n\n\n\n<p><strong>Fail2Ban<\/strong> est\u00e1 dise\u00f1ado justo para eso: <strong>detectar esos intentos repetidos y bloquear autom\u00e1ticamente a quien los hace<\/strong>. No necesitas ser un experto para usarlo. Con unos pocos pasos puedes instalarlo, configurarlo y empezar a <strong>proteger tu VPS en serio<\/strong>.<\/p>\n\n\n\n<p><strong><em>Tabla de Contenidos<\/em><\/strong><\/p>\n\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a href=\"#aioseo-que-es-fail2ban-y-para-que-sirve-en-tu-vps\">Qu\u00e9 es Fail2ban y para qu\u00e9 sirve en tu VPS<\/a><\/li><li><a href=\"#aioseo-como-funciona-fail2ban-por-dentro\">C\u00f3mo funciona Fail2Ban por dentro<\/a><\/li><li><a href=\"#aioseo-ventajas-reales-de-usar-fail2ban\">Ventajas reales de usar Fail2Ban<\/a><ul><li><a href=\"#aioseo-por-que-merece-la-pena-instalarlo\">\u00bfPor qu\u00e9 merece la pena instalarlo?<\/a><\/li><li><a href=\"#aioseo-y-si-nunca-me-han-atacado\">\u00bfY si nunca me han atacado?<\/a><\/li><\/ul><\/li><li><a href=\"#aioseo-como-instalar-fail2ban-paso-a-paso\">C\u00f3mo instalar Fail2Ban paso a paso<\/a><ul><li><a href=\"#aioseo-paso-1-accede-al-servidor\">Paso 1. Accede al servidor<\/a><\/li><li><a href=\"#aioseo-paso-2-actualiza-tu-sistema\">Paso 2. Actualiza tu sistema<\/a><\/li><li><a href=\"#aioseo-paso-3-instala-fail2ban\">Paso 3. Instala Fail2Ban<\/a><\/li><li><a href=\"#aioseo-paso-4-activa-y-arranca-fail2ban\">Paso 4. Activa y arranca Fail2Ban<\/a><\/li><li><a href=\"#aioseo-y-ahora-que\">\u00bfY ahora qu\u00e9?<\/a><\/li><\/ul><\/li><li><a href=\"#aioseo-configuracion-basica-para-que-fail2ban-empiece-a-proteger\">Configuraci\u00f3n b\u00e1sica para que Fail2Ban empiece a proteger<\/a><ul><li><a href=\"#aioseo-paso-1-no-toques-el-archivo-original\">Paso 1. No toques el archivo original<\/a><\/li><li><a href=\"#aioseo-paso-2-edita-la-copia-para-activar-el-jail-de-ssh\">Paso 2. Edita la copia para activar el jail de SSH<\/a><\/li><li><a href=\"#aioseo-paso-3-reinicia-fail2ban-para-aplicar-los-cambios\">Paso 3. Reinicia Fail2Ban para aplicar los cambios<\/a><\/li><li><a href=\"#aioseo-que-significan-esos-parametros\">\u00bfQu\u00e9 significan esos par\u00e1metros?<\/a><\/li><\/ul><\/li><li><a href=\"#aioseo-como-saber-si-fail2ban-esta-funcionando\">C\u00f3mo saber si Fail2Ban est\u00e1 funcionando<\/a><ul><li><a href=\"#aioseo-ver-si-el-servicio-esta-activo\">Ver si el servicio est\u00e1 activo<\/a><\/li><li><a href=\"#aioseo-ver-que-esta-vigilando\">Ver qu\u00e9 est\u00e1 vigilando<\/a><\/li><li><a href=\"#aioseo-ver-si-ha-bloqueado-alguna-ip\">Ver si ha bloqueado alguna IP<\/a><\/li><\/ul><\/li><li><a href=\"#aioseo-conclusion\">Conclusi\u00f3n<\/a><\/li><\/ul><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.loading.es\/servidores-vps-cloud\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1000\" height=\"100\" src=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps.png\" alt=\"Oferta Contratar VPS\" class=\"wp-image-8081\" srcset=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps.png 1000w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-300x30.png 300w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-768x77.png 768w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-850x85.png 850w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-que-es-fail2ban-y-para-que-sirve-en-tu-vps\">Qu\u00e9 es Fail2ban y para qu\u00e9 sirve en tu VPS<\/h2>\n\n\n\n<p><strong>Fail2Ban<\/strong> es una herramienta de seguridad dise\u00f1ada para proteger tu servidor frente a accesos no autorizados. Aunque su nombre suene t\u00e9cnico, su funci\u00f3n es muy sencilla de entender: <strong>bloquea autom\u00e1ticamente a quienes intentan acceder a tu servidor y fallan varias veces<\/strong>. As\u00ed de simple.<\/p>\n\n\n\n<p>Imagina que tu VPS es una casa. Cada vez que alguien intenta entrar, deja una huella en la cerradura. Si lo intenta una vez, puede ser un error. <strong>Si lo intenta diez veces en dos minutos<\/strong>, es bastante sospechoso, \u00bfno? Pues Fail2Ban act\u00faa como un portero que observa esos intentos y si detecta que alguien insiste demasiado, <strong>le cierra la puerta de golpe<\/strong> bloqueando su <strong>direcci\u00f3n IP<\/strong>.<\/p>\n\n\n\n<p>Este tipo de comportamiento \u2014intentar adivinar la contrase\u00f1a por fuerza bruta\u2014 es <strong>uno de los ataques m\u00e1s comunes<\/strong> en servidores accesibles desde internet. Los atacantes <strong>no necesitan saber qui\u00e9n eres<\/strong> ni qu\u00e9 haces. Utilizan <strong>bots autom\u00e1ticos<\/strong> que prueban nombres de usuario y contrase\u00f1as sin parar, hasta que dan con una combinaci\u00f3n v\u00e1lida, si es que pueden.<\/p>\n\n\n\n<p>Aqu\u00ed es donde Fail2Ban es el jefe. <strong>Evita que esos ataques sigan indefinidamente<\/strong>, protege tus servicios m\u00e1s vulnerables (como el acceso por <a href=\"https:\/\/www.loading.es\/blog\/que-es-ssh-y-como-puedo-utilizarlo-con-mi-vps\/\" target=\"_blank\" rel=\"noopener\" title=\"Acceso SSH al VPS\">SSH<\/a>) y adem\u00e1s, ayuda a <strong>reducir el consumo de recursos<\/strong> que provocan estos intentos masivos. Menos intentos significa menos carga, menos ruido en tus logs y m\u00e1s tranquilidad para ti.<\/p>\n\n\n\n<p>Y lo mejor es que <strong>no necesitas ser experto<\/strong> en ciberseguridad para usarlo. Fail2Ban funciona en segundo plano y puedes configurarlo para que se ajuste a tus necesidades. Si tienes un <strong><a href=\"https:\/\/www.loading.es\/servidores-vps-cloud\/index.html\" target=\"_blank\" rel=\"noopener\" title=\"Servidor VPS en Loading\">servidor VPS<\/a><\/strong> con acceso root, ya tienes lo necesario para empezar.<\/p>\n\n\n\n<style>\n        .fail2ban-container {\n            max-width: 900px;\n            margin: 0 auto;\n            padding: 20px;\n            font-family: 'Arial', sans-serif;\n            background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%);\n            border-radius: 15px;\n            box-shadow: 0 10px 30px rgba(0,0,0,0.3);\n            color: white;\n        }\n\n        .title {\n            text-align: center;\n            font-size: 2.2em;\n            margin-bottom: 30px;\n            text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n            color: white !important;\n        }\n\n        .diagram-flow {\n            display: flex;\n            flex-direction: column;\n            gap: 20px;\n            align-items: center;\n        }\n\n        .step {\n            background: rgba(255,255,255,0.1);\n            backdrop-filter: blur(10px);\n            border: 1px solid rgba(255,255,255,0.2);\n            border-radius: 12px;\n            padding: 20px;\n            width: 100%;\n            max-width: 700px;\n            transition: all 0.3s ease;\n            cursor: pointer;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .step::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: -100%;\n            width: 100%;\n            height: 100%;\n            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent);\n            transition: left 0.5s ease;\n        }\n\n        .step:hover::before {\n            left: 100%;\n        }\n\n        .step:hover {\n            transform: translateY(-5px);\n            box-shadow: 0 15px 35px rgba(0,0,0,0.2);\n            background: rgba(255,255,255,0.15);\n        }\n\n        .step-number {\n            display: inline-block;\n            background: #ff6b6b;\n            color: white;\n            width: 30px;\n            height: 30px;\n            border-radius: 50%;\n            text-align: center;\n            line-height: 30px;\n            margin-right: 15px;\n            font-weight: bold;\n            font-size: 1.1em;\n            animation: pulse 2s infinite;\n        }\n\n        @keyframes pulse {\n            0% { box-shadow: 0 0 0 0 rgba(255, 107, 107, 0.7); }\n            70% { box-shadow: 0 0 0 10px rgba(255, 107, 107, 0); }\n            100% { box-shadow: 0 0 0 0 rgba(255, 107, 107, 0); }\n        }\n\n        .step-title {\n            font-size: 1.3em;\n            font-weight: bold;\n            margin-bottom: 10px;\n            display: flex;\n            align-items: center;\n        }\n\n        .step-description {\n            font-size: 1em;\n            line-height: 1.6;\n            opacity: 0.9;\n        }\n\n        .arrow {\n            font-size: 2em;\n            color: #4ecdc4;\n            text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n            transition: transform 0.3s ease;\n        }\n\n        .arrow:hover {\n            transform: scale(1.2);\n        }\n\n        .config-panel {\n            background: rgba(255,255,255,0.1);\n            border-radius: 12px;\n            padding: 20px;\n            margin-top: 20px;\n            border-left: 4px solid #4ecdc4;\n        }\n\n        .config-title {\n            font-size: 1.2em;\n            font-weight: bold;\n            margin-bottom: 15px;\n            color: #4ecdc4;\n        }\n\n        .config-item {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 10px;\n            padding: 8px 12px;\n            background: rgba(255,255,255,0.05);\n            border-radius: 6px;\n            transition: background 0.3s ease;\n        }\n\n        .config-item:hover {\n            background: rgba(255,255,255,0.1);\n        }\n\n        .config-label {\n            font-weight: bold;\n        }\n\n        .config-value {\n            color: #ffd93d;\n        }\n\n        .stats-container {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n            gap: 15px;\n            margin-top: 20px;\n        }\n\n        .stat-card {\n            background: rgba(255,255,255,0.1);\n            border-radius: 10px;\n            padding: 15px;\n            text-align: center;\n            transition: all 0.3s ease;\n            border: 1px solid rgba(255,255,255,0.2);\n        }\n\n        .stat-card:hover {\n            transform: scale(1.05);\n            background: rgba(255,255,255,0.15);\n        }\n\n        .stat-number {\n            font-size: 2em;\n            font-weight: bold;\n            color: #ffd93d;\n            display: block;\n        }\n\n        .stat-label {\n            font-size: 0.9em;\n            opacity: 0.8;\n            margin-top: 5px;\n        }\n\n        .icon {\n            font-size: 1.5em;\n            margin-right: 10px;\n            vertical-align: middle;\n        }\n\n        @media (max-width: 768px) {\n            .fail2ban-container {\n                padding: 15px;\n                margin: 10px;\n            }\n            \n            .title {\n                font-size: 1.8em;\n            }\n            \n            .step {\n                padding: 15px;\n            }\n            \n            .step-title {\n                font-size: 1.1em;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"fail2ban-container\">\n        <h2 class=\"title\">\ud83d\udee1\ufe0f C\u00f3mo Funciona Fail2Ban<\/h2>\n        \n        <div class=\"diagram-flow\">\n            <div class=\"step\" data-step=\"1\">\n                <div class=\"step-title\">\n                    <span class=\"step-number\">1<\/span>\n                    <span class=\"icon\">\ud83d\udc64<\/span>\n                    Intento de Acceso Sospechoso\n                <\/div>\n                <div class=\"step-description\">\n                    Un bot o atacante intenta acceder a tu servidor SSH con credenciales incorrectas m\u00faltiples veces.\n                <\/div>\n            <\/div>\n            \n            <div class=\"arrow\">\u2b07\ufe0f<\/div>\n            \n            <div class=\"step\" data-step=\"2\">\n                <div class=\"step-title\">\n                    <span class=\"step-number\">2<\/span>\n                    <span class=\"icon\">\ud83d\udccb<\/span>\n                    An\u00e1lisis de Logs\n                <\/div>\n                <div class=\"step-description\">\n                    Fail2Ban monitoriza constantemente los logs del sistema buscando patrones de fallos de autenticaci\u00f3n.\n                <\/div>\n            <\/div>\n            \n            <div class=\"arrow\">\u2b07\ufe0f<\/div>\n            \n            <div class=\"step\" data-step=\"3\">\n                <div class=\"step-title\">\n                    <span class=\"step-number\">3<\/span>\n                    <span class=\"icon\">\ud83d\udd0d<\/span>\n                    Detecci\u00f3n de Patr\u00f3n\n                <\/div>\n                <div class=\"step-description\">\n                    Cuando detecta que una IP supera el l\u00edmite de intentos fallidos en el tiempo configurado, activa la alerta.\n                <\/div>\n            <\/div>\n            \n            <div class=\"arrow\">\u2b07\ufe0f<\/div>\n            \n            <div class=\"step\" data-step=\"4\">\n                <div class=\"step-title\">\n                    <span class=\"step-number\">4<\/span>\n                    <span class=\"icon\">\ud83d\udeab<\/span>\n                    Bloqueo Autom\u00e1tico\n                <\/div>\n                <div class=\"step-description\">\n                    Fail2Ban instruye al firewall (iptables\/nftables) para bloquear esa IP durante el tiempo configurado.\n                <\/div>\n            <\/div>\n            \n            <div class=\"arrow\">\u2b07\ufe0f<\/div>\n            \n            <div class=\"step\" data-step=\"5\">\n                <div class=\"step-title\">\n                    <span class=\"step-number\">5<\/span>\n                    <span class=\"icon\">\u2705<\/span>\n                    Servidor Protegido\n                <\/div>\n                <div class=\"step-description\">\n                    El atacante queda bloqueado y tu servidor est\u00e1 protegido contra futuros intentos desde esa IP.\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"config-panel\">\n            <div class=\"config-title\">\u2699\ufe0f Configuraci\u00f3n T\u00edpica SSH<\/div>\n            <div class=\"config-item\">\n                <span class=\"config-label\">Intentos m\u00e1ximos:<\/span>\n                <span class=\"config-value\">5 fallos<\/span>\n            <\/div>\n            <div class=\"config-item\">\n                <span class=\"config-label\">Tiempo de an\u00e1lisis:<\/span>\n                <span class=\"config-value\">10 minutos<\/span>\n            <\/div>\n            <div class=\"config-item\">\n                <span class=\"config-label\">Tiempo de bloqueo:<\/span>\n                <span class=\"config-value\">1 hora<\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"stats-container\">\n            <div class=\"stat-card\" id=\"blocked-ips\">\n                <span class=\"stat-number\" id=\"blocked-count\">0<\/span>\n                <div class=\"stat-label\">IPs Bloqueadas<\/div>\n            <\/div>\n            <div class=\"stat-card\" id=\"active-jails\">\n                <span class=\"stat-number\">1<\/span>\n                <div class=\"stat-label\">Jails Activos<\/div>\n            <\/div>\n            <div class=\"stat-card\" id=\"uptime\">\n                <span class=\"stat-number\" id=\"uptime-count\">0<\/span>\n                <div class=\"stat-label\">D\u00edas Protegido<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ Animaci\u00f3n de contador para estad\u00edsticas\n        function animateCounter(elementId, targetValue, duration = 2000) {\n            const element = document.getElementById(elementId);\n            const startValue = 0;\n            const increment = targetValue \/ (duration \/ 16);\n            let currentValue = startValue;\n\n            const timer = setInterval(() => {\n                currentValue += increment;\n                if (currentValue >= targetValue) {\n                    currentValue = targetValue;\n                    clearInterval(timer);\n                }\n                element.textContent = Math.floor(currentValue);\n            }, 16);\n        }\n\n        \/\/ Efectos de hover mejorados para los pasos\n        document.querySelectorAll('.step').forEach(step => {\n            step.addEventListener('mouseenter', function() {\n                this.style.transform = 'translateY(-5px) scale(1.02)';\n            });\n            \n            step.addEventListener('mouseleave', function() {\n                this.style.transform = 'translateY(0) scale(1)';\n            });\n        });\n\n        \/\/ Animaci\u00f3n de las estad\u00edsticas cuando se carga la p\u00e1gina\n        window.addEventListener('load', function() {\n            setTimeout(() => {\n                animateCounter('blocked-count', 247, 2000);\n                animateCounter('uptime-count', 365, 2500);\n            }, 500);\n        });\n\n        \/\/ Efecto de pulsaci\u00f3n en las tarjetas de estad\u00edsticas\n        document.querySelectorAll('.stat-card').forEach(card => {\n            card.addEventListener('click', function() {\n                this.style.transform = 'scale(0.95)';\n                setTimeout(() => {\n                    this.style.transform = 'scale(1.05)';\n                }, 100);\n                setTimeout(() => {\n                    this.style.transform = 'scale(1)';\n                }, 200);\n            });\n        });\n\n        \/\/ Animaci\u00f3n secuencial de los pasos al hacer scroll (simplificada)\n        const observer = new IntersectionObserver((entries) => {\n            entries.forEach(entry => {\n                if (entry.isIntersecting) {\n                    entry.target.style.opacity = '1';\n                    entry.target.style.transform = 'translateY(0)';\n                }\n            });\n        });\n\n        document.querySelectorAll('.step').forEach(step => {\n            step.style.opacity = '0';\n            step.style.transform = 'translateY(20px)';\n            step.style.transition = 'opacity 0.6s ease, transform 0.6s ease';\n            observer.observe(step);\n        });\n    <\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-como-funciona-fail2ban-por-dentro\">C\u00f3mo funciona Fail2Ban por dentro<\/h2>\n\n\n\n<p>Fail2Ban <strong>no es un antivirus ni un firewall<\/strong> en s\u00ed mismo. Es m\u00e1s bien un <strong>sistema de vigilancia<\/strong> que observa lo que ocurre en tu servidor y act\u00faa cuando detecta algo raro. Lo que hace es <strong>leer los registros del sistema (los logs)<\/strong> y buscar patrones de comportamiento sospechoso, como varios intentos fallidos de acceso en poco tiempo.<\/p>\n\n\n\n<p>Cuando detecta uno de esos patrones, no se queda de brazos cruzados: <strong>le dice al firewall del servidor que bloquee esa direcci\u00f3n IP<\/strong> durante un tiempo. Esa es su gran ventaja. No espera a que ocurra un da\u00f1o, sino que act\u00faa antes de que lo consigan.<\/p>\n\n\n\n<p><strong>C\u00f3mo sabe qu\u00e9 vigilar<\/strong><\/p>\n\n\n\n<p>Fail2Ban funciona gracias a unas <strong>reglas<\/strong> que se llaman <strong>jails<\/strong> (prisiones). Cada jail est\u00e1 pensada para un servicio concreto: por ejemplo, el acceso por SSH, un panel de administraci\u00f3n web o el servidor de correo.<\/p>\n\n\n\n<p>Cada jail tiene tres valores clave que puedes ajustar:<\/p>\n\n\n\n<ul>\n<li><strong>maxretry<\/strong>: cu\u00e1ntos intentos fallidos se permiten antes de actuar.<\/li>\n\n\n\n<li><strong>findtime<\/strong>: en cu\u00e1nto tiempo deben producirse esos intentos fallidos (por ejemplo, 5 fallos en 10 minutos).<\/li>\n\n\n\n<li><strong>bantime<\/strong>: cu\u00e1nto tiempo se bloquear\u00e1 la IP (desde unos minutos hasta indefinidamente).<\/li>\n<\/ul>\n\n\n\n<p>Por ejemplo, puedes tener una regla que diga:<br><em>\u201cSi alguien falla 5 veces al intentar entrar por SSH en menos de 10 minutos, bloqu\u00e9alo durante una hora.\u201d<\/em><\/p>\n\n\n\n<p>Y si adem\u00e1s tienes otros servicios expuestos (como FTP, correo o Apache), puedes activar m\u00e1s jails para que Fail2Ban los vigile tambi\u00e9n.<\/p>\n\n\n\n<p><strong>\u00bfQu\u00e9 herramientas usa para bloquear?<\/strong><\/p>\n\n\n\n<p>Fail2Ban <strong>no bloquea por s\u00ed mismo<\/strong>, sino que se apoya en el sistema de cortafuegos de tu servidor, como iptables, nftables o firewalld, seg\u00fan el sistema operativo. Es decir, \u00e9l detecta y da la orden, pero el que bloquea de verdad es el firewall.<\/p>\n\n\n\n<p>Esto le permite trabajar con <strong>mucha flexibilidad<\/strong> y sin necesidad de instalar software pesado o complejo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-ventajas-reales-de-usar-fail2ban\">Ventajas reales de usar Fail2Ban<\/h2>\n\n\n\n<p>Tener un servidor expuesto a internet es como <strong>tener una casa con muchas puertas<\/strong>. Aunque t\u00fa sepas por d\u00f3nde se entra, hay otras personas \u2014o mejor dicho, bots\u2014 que van probando todas, una por una, a ver si alguna est\u00e1 abierta. <strong>Y no lo hacen una vez al mes, lo hacen cada d\u00eda<\/strong>.<\/p>\n\n\n\n<p>Lo bueno es que no est\u00e1s solo para defender tu servidor. Aqu\u00ed es donde entra Fail2Ban, que hace un trabajo que muchos valoran m\u00e1s de lo que parece: <strong>vigila por ti sin que tengas que estar pendiente todo el tiempo<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"650\" height=\"975\" src=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/como-funciona-fail2ban.jpg\" alt=\"C\u00f3mo funciona Fail2ban\n\" class=\"wp-image-10782\" srcset=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/como-funciona-fail2ban.jpg 650w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/como-funciona-fail2ban-200x300.jpg 200w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/como-funciona-fail2ban-300x450.jpg 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-por-que-merece-la-pena-instalarlo\">\u00bfPor qu\u00e9 merece la pena instalarlo?<\/h3>\n\n\n\n<ul>\n<li><strong>Porque te quita preocupaciones.<\/strong> <br>En lugar de revisar logs y mirar qui\u00e9n ha intentado entrar, Fail2Ban lo hace por ti. Y si ve algo raro, act\u00faa. As\u00ed de sencillo.<\/li>\n\n\n\n<li><strong>Porque protege sin molestar.<\/strong> <br>Funciona en segundo plano, no ralentiza tu servidor ni te exige que seas un experto en redes o ciberseguridad. Puedes configurarlo una vez y dejarlo trabajando.<\/li>\n\n\n\n<li><strong>Porque ahorra recursos.<\/strong> <br>Cada intento de acceso genera actividad en tu servidor. Si hay cientos de intentos al d\u00eda, eso significa m\u00e1s carga, m\u00e1s l\u00edneas en los logs y m\u00e1s posibilidades de error. Fail2Ban bloquea al atacante y reduce ese ruido.<\/li>\n\n\n\n<li><strong>Porque te da control.<\/strong> <br>Puedes decidir cu\u00e1ntos intentos tolerar, durante cu\u00e1nto tiempo bloquear y qu\u00e9 servicios quieres proteger. Si solo usas SSH, activas el jail de SSH y listo.<\/li>\n\n\n\n<li><strong>Porque es gratuito y funciona.<\/strong><br> Hay pocas herramientas que hagan tanto con tan poco. Y lleva a\u00f1os siendo confiable.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-y-si-nunca-me-han-atacado\">\u00bfY si nunca me han atacado?<\/h3>\n\n\n\n<p>Probablemente s\u00ed lo han hecho, aunque no te hayas enterado. Es lo normal. Lo importante no es esperar a que pase algo grave. Es <strong>poner medidas antes<\/strong>, como har\u00edas con una alarma en casa aunque nunca hayas tenido un robo.<\/p>\n\n\n\n<p>Fail2Ban es esa alarma silenciosa. No te avisa con sirenas, pero <strong>act\u00faa cuando tiene que actuar<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-como-instalar-fail2ban-paso-a-paso\">C\u00f3mo instalar Fail2Ban paso a paso<\/h2>\n\n\n\n<p>Vale, ya te hemos contado lo que hace Fail2Ban y por qu\u00e9 deber\u00edas tenerlo. Ahora toca lo importante: <strong>c\u00f3mo se instala<\/strong>.<\/p>\n\n\n\n<p>La buena noticia es que no necesitas hacer magia negra ni pelearte con la consola. Si tienes acceso root a tu VPS, puedes instalar Fail2Ban en unos minutos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-1-accede-al-servidor\">Paso 1. Accede al servidor<\/h3>\n\n\n\n<p>Primero, con\u00e9ctate a tu VPS por SSH. Desde tu ordenador, puedes usar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh tu_usuario@tu_ip_del_servidor<\/code><\/pre>\n\n\n\n<p>Si ya est\u00e1s dentro, genial. Si no sabes c\u00f3mo conectarte, revisa los datos que te dio tu proveedor de hosting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-2-actualiza-tu-sistema\">Paso 2. Actualiza tu sistema<\/h3>\n\n\n\n<p>Antes de instalar cualquier cosa, es buena idea asegurarte de que todo est\u00e1 actualizado:<\/p>\n\n\n\n<p><strong>En Ubuntu o Debian:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade<\/code><\/pre>\n\n\n\n<p><strong>En CentOS, Fedora o Rocky:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo yum update<\/code><\/pre>\n\n\n\n<p>O si usas DNF:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf update<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-3-instala-fail2ban\">Paso 3. Instala Fail2Ban<\/h3>\n\n\n\n<p>Ahora s\u00ed, vamos a instalarlo:<\/p>\n\n\n\n<p><strong>En Ubuntu o Debian:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install fail2ban<\/code><\/pre>\n\n\n\n<p><strong>En CentOS \/ RHEL:<\/strong><br>Primero necesitas activar el repositorio EPEL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo yum install epel-release<\/code><\/pre>\n\n\n\n<p>Y despu\u00e9s:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo yum install fail2ban<\/code><\/pre>\n\n\n\n<p><strong>Con DNF (Fedora y similares):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf install fail2ban<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-4-activa-y-arranca-fail2ban\">Paso 4. Activa y arranca Fail2Ban<\/h3>\n\n\n\n<p>Una vez instalado, toca activarlo para que empiece a proteger:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable fail2ban\nsudo systemctl start fail2ban<\/code><\/pre>\n\n\n\n<p>Y si quieres comprobar que est\u00e1 funcionando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status fail2ban<\/code><\/pre>\n\n\n\n<p>Deber\u00edas ver un mensaje que dice \u201cactive (running)\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-y-ahora-que\">\u00bfY ahora qu\u00e9?<\/h3>\n\n\n\n<p>Una vez instalado, Fail2Ban ya est\u00e1 vigilando tu servidor, pero <strong>con una configuraci\u00f3n muy b\u00e1sica<\/strong>. Por defecto, suele venir con el jail de SSH desactivado, as\u00ed que <strong>en el siguiente apartado veremos c\u00f3mo configurarlo a tu medida<\/strong>.<\/p>\n\n\n\n<p>Pi\u00e9nsalo as\u00ed: ahora tienes al portero en la puerta, pero necesita instrucciones claras para saber cu\u00e1ndo tiene que actuar.<\/p>\n\n\n\n<!-- L\u00cdNEA CORREGIDA: Carga de iconos de Font Awesome usando CSS para m\u00e1xima compatibilidad -->\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\" \/>\n\n<!-- Estilos CSS encapsulados para la gu\u00eda interactiva -->\n<style>\n    \/* El ID #f2b-interactive-guide asegura que estos estilos solo se aplican a este bloque *\/\n    #f2b-interactive-guide * {\n        margin: 0;\n        padding: 0;\n        box-sizing: border-box;\n    }\n\n    #f2b-interactive-guide {\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    }\n\n    #f2b-interactive-guide .container {\n        max-width: 1200px;\n        margin: 0 auto;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 20px;\n        box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\n        overflow: hidden;\n        border: 1px solid #e0e0e0; \/* Un borde sutil para delimitar el bloque *\/\n    }\n\n    #f2b-interactive-guide .header {\n        background: linear-gradient(135deg, #ff6b6b, #ee5a24);\n        color: white;\n        padding: 40px;\n        text-align: center;\n        position: relative;\n        overflow: hidden;\n    }\n\n    #f2b-interactive-guide .header::before {\n        content: '';\n        position: absolute;\n        top: -50%;\n        left: -50%;\n        width: 200%;\n        height: 200%;\n        background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);\n        animation: f2b-rotate 20s linear infinite;\n    }\n\n    @keyframes f2b-rotate {\n        0% { transform: rotate(0deg); }\n        100% { transform: rotate(360deg); }\n    }\n\n    #f2b-interactive-guide .header h1 {\n        font-size: 3em;\n        margin-bottom: 10px;\n        position: relative;\n        z-index: 2;\n    }\n\n    #f2b-interactive-guide .header p {\n        font-size: 1.2em;\n        opacity: 0.9;\n        position: relative;\n        z-index: 2;\n    }\n\n    #f2b-interactive-guide .progress-bar {\n        background: #ecf0f1;\n        height: 8px;\n        border-radius: 4px;\n        margin: 30px 40px;\n        overflow: hidden;\n    }\n\n    #f2b-interactive-guide .progress-fill {\n        background: linear-gradient(90deg, #00d2ff, #3a7bd5);\n        height: 100%;\n        width: 0%;\n        border-radius: 4px;\n        transition: width 0.5s ease;\n    }\n\n    #f2b-interactive-guide .steps-container {\n        padding: 40px;\n    }\n\n    #f2b-interactive-guide .step {\n        background: white;\n        border-radius: 15px;\n        margin-bottom: 25px;\n        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);\n        overflow: hidden;\n        transition: all 0.3s ease;\n        border-left: 5px solid #ddd;\n    }\n\n    #f2b-interactive-guide .step:hover {\n        transform: translateY(-5px);\n        box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);\n    }\n\n    #f2b-interactive-guide .step.active {\n        border-left-color: #00d2ff;\n        transform: scale(1.02);\n    }\n\n    #f2b-interactive-guide .step.completed {\n        border-left-color: #27ae60;\n    }\n\n    #f2b-interactive-guide .step-header {\n        padding: 25px;\n        cursor: pointer;\n        display: flex;\n        align-items: center;\n        background: linear-gradient(45deg, #f8f9fa, #ffffff);\n    }\n\n    #f2b-interactive-guide .step-number {\n        background: linear-gradient(135deg, #667eea, #764ba2);\n        color: white;\n        width: 50px;\n        height: 50px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-weight: bold;\n        margin-right: 20px;\n        font-size: 1.2em;\n        transition: all 0.3s ease;\n        flex-shrink: 0;\n    }\n\n    #f2b-interactive-guide .step.completed .step-number {\n        background: linear-gradient(135deg, #27ae60, #2ecc71);\n    }\n\n    #f2b-interactive-guide .step-title {\n        flex: 1;\n        font-size: 1.4em;\n        font-weight: 600;\n        color: #2c3e50;\n    }\n\n    #f2b-interactive-guide .step-icon {\n        font-size: 1.5em;\n        color: #7f8c8d;\n        transition: transform 0.3s ease;\n    }\n\n    #f2b-interactive-guide .step.active .step-icon {\n        transform: rotate(90deg);\n    }\n\n    #f2b-interactive-guide .step-content {\n        padding: 0 25px 25px;\n        display: none;\n        animation: f2b-fadeIn 0.3s ease;\n    }\n\n    #f2b-interactive-guide .step.active .step-content {\n        display: block;\n    }\n\n    @keyframes f2b-fadeIn {\n        from { opacity: 0; transform: translateY(-10px); }\n        to { opacity: 1; transform: translateY(0); }\n    }\n\n    #f2b-interactive-guide .command-block {\n        background: #1e1e1e;\n        color: #f8f8f2;\n        padding: 20px;\n        border-radius: 10px;\n        margin: 15px 0;\n        position: relative;\n        overflow: hidden;\n        font-family: 'Courier New', monospace;\n        transition: all 0.3s ease;\n    }\n    \n    #f2b-interactive-guide .command-block code {\n       font-family: 'Courier New', monospace;\n       white-space: pre-wrap; \/* Para que el texto largo se ajuste *\/\n       word-break: break-all; \/* Para romper palabras largas si es necesario *\/\n    }\n\n    #f2b-interactive-guide .command-block:hover {\n        transform: scale(1.01);\n        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);\n    }\n\n    #f2b-interactive-guide .command-block::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: -100%;\n        width: 100%;\n        height: 100%;\n        background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent);\n        transition: left 0.5s ease;\n    }\n\n    #f2b-interactive-guide .command-block:hover::before {\n        left: 100%;\n    }\n\n    #f2b-interactive-guide .copy-btn {\n        position: absolute;\n        top: 10px;\n        right: 10px;\n        background: #3498db;\n        color: white;\n        border: none;\n        padding: 8px 12px;\n        border-radius: 5px;\n        cursor: pointer;\n        font-size: 0.8em;\n        transition: all 0.3s ease;\n    }\n\n    #f2b-interactive-guide .copy-btn:hover {\n        background: #2980b9;\n        transform: scale(1.05);\n    }\n\n    #f2b-interactive-guide .copy-btn.copied {\n        background: #27ae60;\n    }\n\n    #f2b-interactive-guide .info-box, \n    #f2b-interactive-guide .warning-box, \n    #f2b-interactive-guide .success-box {\n        color: white;\n        padding: 20px;\n        border-radius: 10px;\n        margin: 15px 0;\n    }\n\n    #f2b-interactive-guide .info-box {\n        background: linear-gradient(135deg, #74b9ff, #0984e3);\n        border-left: 5px solid #0984e3;\n    }\n\n    #f2b-interactive-guide .warning-box {\n        background: linear-gradient(135deg, #fdcb6e, #e17055);\n        border-left: 5px solid #e17055;\n    }\n\n    #f2b-interactive-guide .success-box {\n        background: linear-gradient(135deg, #00b894, #00cec9);\n        border-left: 5px solid #00b894;\n    }\n\n    #f2b-interactive-guide .os-selector {\n        display: flex;\n        gap: 10px;\n        margin: 15px 0;\n        flex-wrap: wrap;\n    }\n\n    #f2b-interactive-guide .os-btn {\n        background: #ecf0f1;\n        border: 2px solid #bdc3c7;\n        padding: 10px 20px;\n        border-radius: 25px;\n        cursor: pointer;\n        transition: all 0.3s ease;\n        font-weight: 500;\n        color: #34495e;\n    }\n\n    #f2b-interactive-guide .os-btn:hover {\n        background: #d5dbdb;\n        transform: translateY(-2px);\n    }\n\n    #f2b-interactive-guide .os-btn.active {\n        background: linear-gradient(135deg, #667eea, #764ba2);\n        color: white;\n        border-color: #667eea;\n    }\n\n    #f2b-interactive-guide .hidden {\n        display: none;\n    }\n\n    #f2b-interactive-guide .tooltip {\n        position: relative;\n        display: inline-block;\n        cursor: help;\n    }\n\n    #f2b-interactive-guide .tooltip .tooltiptext {\n        visibility: hidden;\n        width: 200px;\n        background-color: #2c3e50;\n        color: #fff;\n        text-align: center;\n        border-radius: 6px;\n        padding: 5px;\n        position: absolute;\n        z-index: 10;\n        bottom: 125%;\n        left: 50%;\n        margin-left: -100px;\n        opacity: 0;\n        transition: opacity 0.3s;\n        font-size: 0.9em;\n    }\n\n    #f2b-interactive-guide .tooltip:hover .tooltiptext {\n        visibility: visible;\n        opacity: 1;\n    }\n\n    \/* Media Queries para responsividad *\/\n    @media (max-width: 768px) {\n        #f2b-interactive-guide .container {\n            margin: 10px 0;\n            border-radius: 15px;\n        }\n        #f2b-interactive-guide .header {\n            padding: 30px 20px;\n        }\n        #f2b-interactive-guide .header h1 {\n            font-size: 2em;\n        }\n        #f2b-interactive-guide .steps-container {\n            padding: 20px;\n        }\n        #f2b-interactive-guide .step-header {\n            padding: 20px;\n            flex-direction: column;\n            text-align: center;\n        }\n        #f2b-interactive-guide .step-number {\n            margin-right: 0;\n            margin-bottom: 10px;\n        }\n        #f2b-interactive-guide .os-selector {\n            justify-content: center;\n        }\n    }\n<\/style>\n\n<!-- Contenido HTML de la gu\u00eda interactiva -->\n<div id=\"f2b-interactive-guide\">\n    <div class=\"container\">\n        <div class=\"header\">\n            <h1><i class=\"fas fa-shield-alt\"><\/i> Fail2Ban<\/h1>\n            <p>Gu\u00eda interactiva para proteger tu servidor paso a paso<\/p>\n        <\/div>\n\n        <div class=\"progress-bar\">\n            <div class=\"progress-fill\" id=\"f2b_progressFill\"><\/div>\n        <\/div>\n\n        <div class=\"steps-container\">\n            <!-- Paso 1: Acceso al servidor -->\n            <div class=\"step\" data-step=\"1\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">1<\/div>\n                    <div class=\"step-title\">Accede a tu servidor<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Primero necesitas conectarte a tu VPS por SSH. Usa el comando apropiado desde tu terminal:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>ssh tu_usuario@tu_ip_del_servidor<\/code>\n                    <\/div>\n                    <div class=\"info-box\">\n                        <i class=\"fas fa-info-circle\"><\/i> <strong>Tip:<\/strong> Reemplaza \u00abtu_usuario\u00bb por tu nombre de usuario real y \u00abtu_ip_del_servidor\u00bb por la IP de tu VPS.\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"1\">\n                        <i class=\"fas fa-check\"><\/i> Ya estoy conectado\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Paso 2: Actualizar sistema -->\n            <div class=\"step\" data-step=\"2\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">2<\/div>\n                    <div class=\"step-title\">Actualiza tu sistema<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Antes de instalar Fail2Ban, es importante actualizar el sistema. Selecciona tu distribuci\u00f3n:<\/p>\n                    <div class=\"os-selector\">\n                        <button class=\"os-btn active\" data-f2b-os-btn=\"ubuntu-commands\">Ubuntu\/Debian<\/button>\n                        <button class=\"os-btn\" data-f2b-os-btn=\"centos-commands\">CentOS\/RHEL<\/button>\n                        <button class=\"os-btn\" data-f2b-os-btn=\"fedora-commands\">Fedora<\/button>\n                    <\/div>\n                    <div id=\"ubuntu-commands\" class=\"f2b-os-content\">\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo apt update && sudo apt upgrade<\/code>\n                        <\/div>\n                    <\/div>\n                    <div id=\"centos-commands\" class=\"hidden f2b-os-content\">\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo yum update<\/code>\n                        <\/div>\n                    <\/div>\n                    <div id=\"fedora-commands\" class=\"hidden f2b-os-content\">\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo dnf update<\/code>\n                        <\/div>\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"2\">\n                        <i class=\"fas fa-check\"><\/i> Sistema actualizado\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Paso 3: Instalar Fail2Ban -->\n             <div class=\"step\" data-step=\"3\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">3<\/div>\n                    <div class=\"step-title\">Instala Fail2Ban<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Ahora vamos a instalar Fail2Ban seg\u00fan tu distribuci\u00f3n:<\/p>\n                     <div class=\"os-selector\">\n                        <button class=\"os-btn active\" data-f2b-os-btn=\"ubuntu-install\">Ubuntu\/Debian<\/button>\n                        <button class=\"os-btn\" data-f2b-os-btn=\"centos-install\">CentOS\/RHEL<\/button>\n                        <button class=\"os-btn\" data-f2b-os-btn=\"fedora-install\">Fedora<\/button>\n                    <\/div>\n                    <div id=\"ubuntu-install\" class=\"f2b-os-content\">\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo apt install fail2ban<\/code>\n                        <\/div>\n                    <\/div>\n                    <div id=\"centos-install\" class=\"hidden f2b-os-content\">\n                        <p>Primero activa el repositorio EPEL:<\/p>\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo yum install epel-release<\/code>\n                        <\/div>\n                        <p>Despu\u00e9s instala Fail2Ban:<\/p>\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo yum install fail2ban<\/code>\n                        <\/div>\n                    <\/div>\n                    <div id=\"fedora-install\" class=\"hidden f2b-os-content\">\n                        <div class=\"command-block\">\n                            <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                            <code>sudo dnf install fail2ban<\/code>\n                        <\/div>\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"3\">\n                        <i class=\"fas fa-check\"><\/i> Fail2Ban instalado\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Paso 4: Activar servicio -->\n            <div class=\"step\" data-step=\"4\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">4<\/div>\n                    <div class=\"step-title\">Activa y arranca Fail2Ban<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Ahora vamos a activar el servicio para que se inicie autom\u00e1ticamente:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo systemctl enable fail2ban<\/code>\n                    <\/div>\n                    <p>Y lo iniciamos:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo systemctl start fail2ban<\/code>\n                    <\/div>\n                    <p>Verifica que est\u00e1 funcionando:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo systemctl status fail2ban<\/code>\n                    <\/div>\n                    <div class=\"success-box\">\n                        <i class=\"fas fa-check-circle\"><\/i> <strong>\u00a1Perfecto!<\/strong> Deber\u00edas ver un mensaje que dice \u00abactive (running)\u00bb.\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"4\">\n                        <i class=\"fas fa-check\"><\/i> Servicio activado\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Paso 5: Configuraci\u00f3n -->\n            <div class=\"step\" data-step=\"5\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">5<\/div>\n                    <div class=\"step-title\">Configura la protecci\u00f3n SSH<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Ahora vamos a configurar Fail2Ban para proteger el acceso SSH:<\/p>\n                    <div class=\"warning-box\">\n                        <i class=\"fas fa-exclamation-triangle\"><\/i> <strong>Importante:<\/strong> No edites directamente jail.conf, crea una copia personalizada.\n                    <\/div>\n                    <p>Crea el archivo de configuraci\u00f3n personalizado:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo cp \/etc\/fail2ban\/jail.conf \/etc\/fail2ban\/jail.local<\/code>\n                    <\/div>\n                    <p>Edita el archivo:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo nano \/etc\/fail2ban\/jail.local<\/code>\n                    <\/div>\n                    <p>Busca la secci\u00f3n [sshd] y aseg\u00farate de que est\u00e9 as\u00ed:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>[sshd]\nenabled = true\nport    = ssh\nlogpath = %(sshd_log)s\nbackend = systemd<\/code>\n                    <\/div>\n                    <div class=\"info-box\">\n                        <i class=\"fas fa-keyboard\"><\/i> <strong>Tip:<\/strong> En nano, usa Ctrl+W para buscar \u00absshd\u00bb, Ctrl+O para guardar y Ctrl+X para salir.\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"5\">\n                        <i class=\"fas fa-check\"><\/i> Configuraci\u00f3n lista\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Paso 6: Reiniciar y verificar -->\n            <div class=\"step\" data-step=\"6\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\">6<\/div>\n                    <div class=\"step-title\">Reinicia y verifica<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Reinicia Fail2Ban para aplicar los cambios:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo systemctl restart fail2ban<\/code>\n                    <\/div>\n                    <p>Verifica que el jail SSH est\u00e1 activo:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo fail2ban-client status sshd<\/code>\n                    <\/div>\n                    <p>Ve el estado general:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>sudo fail2ban-client status<\/code>\n                    <\/div>\n                    <div class=\"success-box\">\n                        <i class=\"fas fa-shield-alt\"><\/i> <strong>\u00a1Enhorabuena!<\/strong> Tu servidor ya est\u00e1 protegido contra ataques de fuerza bruta por SSH.\n                    <\/div>\n                    <button class=\"os-btn active\" data-f2b-complete-btn=\"6\">\n                        <i class=\"fas fa-trophy\"><\/i> \u00a1Completado!\n                    <\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- Paso 7: Informaci\u00f3n adicional -->\n            <div class=\"step\" data-step=\"7\">\n                <div class=\"step-header\">\n                    <div class=\"step-number\"><i class=\"fas fa-cog\"><\/i><\/div>\n                    <div class=\"step-title\">Configuraci\u00f3n avanzada (opcional)<\/div>\n                    <i class=\"fas fa-chevron-right step-icon\"><\/i>\n                <\/div>\n                <div class=\"step-content\">\n                    <p>Si quieres personalizar m\u00e1s la configuraci\u00f3n, aqu\u00ed tienes los par\u00e1metros principales:<\/p>\n                    <div class=\"info-box\">\n                        <h4>Par\u00e1metros importantes:<\/h4>\n                        <ul style=\"margin-top: 10px; line-height: 1.6; list-style-position: inside;\">\n                            <li><strong>maxretry<\/strong>: N\u00famero de intentos fallidos antes del bloqueo (por defecto: 5)<\/li>\n                            <li><strong>findtime<\/strong>: Ventana de tiempo para contar los fallos (por defecto: 600 segundos)<\/li>\n                            <li><strong>bantime<\/strong>: Tiempo de bloqueo de la IP (por defecto: 3600 segundos)<\/li>\n                        <\/ul>\n                    <\/div>\n                    <p>Para cambiar estos valores, a\u00f1ade estas l\u00edneas en la secci\u00f3n [sshd]:<\/p>\n                    <div class=\"command-block\">\n                        <button class=\"copy-btn\" data-f2b-copy-btn>Copiar<\/button>\n                        <code>maxretry = 5\nfindtime = 600\nbantime = 3600<\/code>\n                    <\/div>\n                    <div class=\"tooltip\">\n                        <span class=\"tooltiptext\">Ejemplo: 5 intentos en 10 minutos = 1 hora de bloqueo<\/span>\n                        \ud83d\udca1 Personaliza seg\u00fan tus necesidades\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Script de interactividad -->\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    const guideContainer = document.getElementById('f2b-interactive-guide');\n    if (!guideContainer) return; \/\/ Salir si el contenedor no existe\n\n    let completedSteps = new Set();\n    const totalSteps = 6; \/\/ Sin contar el paso 7 que es opcional\n    const progressFill = guideContainer.querySelector('#f2b_progressFill');\n    const allSteps = guideContainer.querySelectorAll('.step');\n\n    function updateProgress() {\n        if (!progressFill) return;\n        const progress = (completedSteps.size \/ totalSteps) * 100;\n        progressFill.style.width = progress + '%';\n    }\n\n    function toggleStep(stepElement) {\n        if (!stepElement) return;\n        \n        const isActive = stepElement.classList.contains('active');\n\n        \/\/ Cerrar todos los dem\u00e1s\n        allSteps.forEach(s => s.classList.remove('active'));\n\n        \/\/ Abrir o cerrar el actual\n        if (!isActive) {\n            stepElement.classList.add('active');\n        }\n    }\n\n    \/\/ Event listeners para los headers de los steps\n    guideContainer.querySelectorAll('.step-header').forEach(header => {\n        header.addEventListener('click', () => {\n            toggleStep(header.closest('.step'));\n        });\n    });\n\n    \/\/ Event listeners para botones de completar paso\n    guideContainer.querySelectorAll('[data-f2b-complete-btn]').forEach(button => {\n        button.addEventListener('click', () => {\n            const stepNumber = parseInt(button.getAttribute('data-f2b-complete-btn'), 10);\n            completedSteps.add(stepNumber);\n            \n            const currentStepElement = guideContainer.querySelector(`.step[data-step=\"${stepNumber}\"]`);\n            currentStepElement.classList.add('completed');\n            currentStepElement.classList.remove('active');\n            \n            \/\/ Abrir el siguiente paso autom\u00e1ticamente\n            if (stepNumber < 7) {\n                const nextStepElement = guideContainer.querySelector(`.step[data-step=\"${stepNumber + 1}\"]`);\n                if (nextStepElement) {\n                     setTimeout(() => toggleStep(nextStepElement), 300);\n                }\n            }\n            updateProgress();\n        });\n    });\n    \n    \/\/ Event listeners para selectores de OS\n    guideContainer.querySelectorAll('[data-f2b-os-btn]').forEach(button => {\n        button.addEventListener('click', () => {\n            const osTargetId = button.getAttribute('data-f2b-os-btn');\n            const parentSelector = button.closest('.step-content');\n\n            \/\/ Desactivar otros botones y ocultar otros contenidos en el mismo scope\n            parentSelector.querySelectorAll('[data-f2b-os-btn]').forEach(btn => btn.classList.remove('active'));\n            parentSelector.querySelectorAll('.f2b-os-content').forEach(content => content.classList.add('hidden'));\n\n            \/\/ Activar el bot\u00f3n y mostrar el contenido seleccionado\n            button.classList.add('active');\n            parentSelector.querySelector(`#${osTargetId}`).classList.remove('hidden');\n        });\n    });\n    \n    \/\/ Event listeners para botones de copiar\n    guideContainer.querySelectorAll('[data-f2b-copy-btn]').forEach(button => {\n        button.addEventListener('click', (e) => {\n            const btn = e.currentTarget;\n            const parentBlock = btn.closest('.command-block');\n            if (!parentBlock) return;\n\n            const codeElement = parentBlock.querySelector('code');\n            if (!codeElement) return;\n\n            const textToCopy = codeElement.innerText || codeElement.textContent;\n            \n            navigator.clipboard.writeText(textToCopy).then(() => {\n                const originalText = btn.textContent;\n                btn.textContent = '\u00a1Copiado!';\n                btn.classList.add('copied');\n                \n                setTimeout(() => {\n                    btn.textContent = originalText;\n                    btn.classList.remove('copied');\n                }, 2000);\n            }).catch(err => {\n                console.error('Error al copiar el texto: ', err);\n            });\n        });\n    });\n\n    \/\/ Abrir el primer paso y aplicar animaci\u00f3n de entrada\n    const firstStep = guideContainer.querySelector('.step[data-step=\"1\"]');\n    if (firstStep) {\n        toggleStep(firstStep);\n    }\n    \n    allSteps.forEach((step, index) => {\n        step.style.opacity = '0';\n        step.style.transform = 'translateY(20px)';\n        setTimeout(() => {\n            step.style.transition = 'opacity 0.5s ease, transform 0.5s ease';\n            step.style.opacity = '1';\n            step.style.transform = 'translateY(0)';\n        }, index * 100);\n    });\n});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-configuracion-basica-para-que-fail2ban-empiece-a-proteger\">Configuraci\u00f3n b\u00e1sica para que Fail2Ban empiece a proteger<\/h2>\n\n\n\n<p>Una vez instalado Fail2Ban, necesitas decirle <strong>qu\u00e9 quieres que vigile y c\u00f3mo debe reaccionar<\/strong>. Por defecto, viene con muchas configuraciones preparadas, pero no todas activadas.<\/p>\n\n\n\n<p>Vamos a ense\u00f1arle a proteger el acceso por SSH, que es donde m\u00e1s se producen ataques por fuerza bruta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-1-no-toques-el-archivo-original\">Paso 1. No toques el archivo original<\/h3>\n\n\n\n<p>El archivo de configuraci\u00f3n principal es este:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/etc\/fail2ban\/jail.conf<\/code><\/pre>\n\n\n\n<p>Pero <strong>no deber\u00edas editarlo directamente<\/strong>, porque si actualizas Fail2Ban en el futuro podr\u00edas perder los cambios. Mejor haz una copia llamada <code>jail.local<\/code>, que es la que el sistema usa como personalizada:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/etc\/fail2ban\/jail.conf \/etc\/fail2ban\/jail.local<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-2-edita-la-copia-para-activar-el-jail-de-ssh\">Paso 2. Edita la copia para activar el jail de SSH<\/h3>\n\n\n\n<p>Ahora abre ese archivo para editarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/fail2ban\/jail.local<\/code><\/pre>\n\n\n\n<p>Busca este bloque (puedes hacer scroll o usar <code>Ctrl + W<\/code> para buscar \u201csshd\u201d):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;sshd]\nenabled = true\nport    = ssh\nlogpath = %(sshd_log)s\nbackend = systemd<\/code><\/pre>\n\n\n\n<p>Solo tienes que asegurarte de que <code>enabled = true<\/code>. Si pon\u00eda <code>false<\/code>, c\u00e1mbialo.<\/p>\n\n\n\n<p>Guarda con <code>Ctrl + O<\/code> y sal con <code>Ctrl + X<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-paso-3-reinicia-fail2ban-para-aplicar-los-cambios\">Paso 3. Reinicia Fail2Ban para aplicar los cambios<\/h3>\n\n\n\n<p>Cada vez que cambies algo en la configuraci\u00f3n, reinicia el servicio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart fail2ban<\/code><\/pre>\n\n\n\n<p>Y para comprobar que todo est\u00e1 bien:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p>Ah\u00ed ver\u00e1s si el jail est\u00e1 activo y si ya ha bloqueado alguna IP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-que-significan-esos-parametros\">\u00bfQu\u00e9 significan esos par\u00e1metros?<\/h3>\n\n\n\n<p>Puedes dejar la configuraci\u00f3n por defecto, pero si quieres entender lo b\u00e1sico, aqu\u00ed va una explicaci\u00f3n sencilla:<\/p>\n\n\n\n<ul>\n<li><strong><code>maxretry<\/code><\/strong>: n\u00famero de veces que alguien puede fallar antes de ser bloqueado (por defecto suele ser 5).<\/li>\n\n\n\n<li><strong><code>findtime<\/code><\/strong>: el intervalo de tiempo en el que se cuentan esos fallos (por ejemplo, 10 minutos = 600 segundos).<\/li>\n\n\n\n<li><strong><code>bantime<\/code><\/strong>: cu\u00e1nto tiempo se bloquea esa IP (por ejemplo, 1 hora = 3600 segundos).<\/li>\n<\/ul>\n\n\n\n<p>Si los quieres cambiar, puedes a\u00f1adir estas l\u00edneas dentro del bloque <code>[sshd]<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>maxretry = 5\nfindtime = 600\nbantime = 3600<\/code><\/pre>\n\n\n\n<p>Y ya est\u00e1. Con esto, <strong>tu servidor ya tiene una protecci\u00f3n b\u00e1sica contra ataques por fuerza bruta por SSH<\/strong>. Sin complicaciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-como-saber-si-fail2ban-esta-funcionando\">C\u00f3mo saber si Fail2Ban est\u00e1 funcionando<\/h2>\n\n\n\n<p>Una vez instalado y configurado, lo l\u00f3gico es preguntarse: <strong>\u00bfest\u00e1 protegiendo de verdad mi servidor?<\/strong> Por suerte, Fail2Ban tiene comandos muy sencillos para comprobarlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-ver-si-el-servicio-esta-activo\">Ver si el servicio est\u00e1 activo<\/h3>\n\n\n\n<p>Primero, aseg\u00farate de que Fail2Ban est\u00e1 en marcha:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status fail2ban<\/code><\/pre>\n\n\n\n<p>Deber\u00edas ver una l\u00ednea que dice algo como <code>active (running)<\/code>. Si pone eso, todo va bien.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-ver-que-esta-vigilando\">Ver qu\u00e9 est\u00e1 vigilando<\/h3>\n\n\n\n<p>Fail2Ban puede tener varios \u201cjails\u201d activos (recordemos: un jail es una regla para vigilar algo concreto, como el acceso por SSH).<\/p>\n\n\n\n<p>Para ver qu\u00e9 jails est\u00e1n activados:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo fail2ban-client status<\/code><\/pre>\n\n\n\n<p>Ah\u00ed deber\u00eda aparecer algo como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status\n|- Number of jail:  1\n`- Jail list:   sshd<\/code><\/pre>\n\n\n\n<p>Eso significa que est\u00e1 vigilando el servicio SSH, que es justo lo que quer\u00edas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aioseo-ver-si-ha-bloqueado-alguna-ip\">Ver si ha bloqueado alguna IP<\/h3>\n\n\n\n<p>Y si quieres ver si ya ha bloqueado a alguien, puedes usar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p>Esto te dir\u00e1:<\/p>\n\n\n\n<ul>\n<li>Cu\u00e1ntas IPs est\u00e1n bloqueadas ahora mismo.<\/li>\n\n\n\n<li>Cu\u00e1ntas ha bloqueado desde que se inici\u00f3.<\/li>\n\n\n\n<li>Qu\u00e9 IPs est\u00e1n en la lista de bloqueo.<\/li>\n<\/ul>\n\n\n\n<p>No necesitas entender todos los datos, solo saber que <strong>si aparece alguna IP ah\u00ed, Fail2Ban ya est\u00e1 haciendo su trabajo<\/strong>.<\/p>\n\n\n\n<p>Y con eso, ya tienes lo b\u00e1sico para estar tranquilo. Tu servidor est\u00e1 protegido, y puedes comprobarlo t\u00fa mismo en cualquier momento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Fail2Ban es como tener un portero digital en la entrada de tu servidor. No hace ruido, no ocupa casi recursos y, sin embargo, <strong>marca la diferencia<\/strong> cuando alguien intenta colarse.<\/p>\n\n\n\n<p>Con solo unos minutos de configuraci\u00f3n b\u00e1sica, ya puedes estar mucho m\u00e1s tranquilo. No necesitas ser un experto ni complicarte la vida: <strong>Fail2Ban detecta los intentos maliciosos y bloquea autom\u00e1ticamente a quien se pasa de listo<\/strong>.<\/p>\n\n\n\n<p>Puedes consultar la <a href=\"https:\/\/github.com\/fail2ban\/fail2ban\" target=\"_blank\" rel=\"noopener\" title=\"\">documentaci\u00f3n oficial de Fail2Ban<\/a> si quieres profundizar m\u00e1s o ajustar la configuraci\u00f3n a otros servicios como FTP, Apache o correo.<\/p>\n\n\n\n<p>Y lo mejor es que puedes comprobar f\u00e1cilmente si est\u00e1 funcionando, sin tener que interpretar logs ni pelearte con comandos complejos.<\/p>\n\n\n\n<p>As\u00ed que si tienes un VPS, y especialmente si accedes por SSH, <strong>no lo dejes desprotegido<\/strong>. Instala Fail2Ban, act\u00edvalo y olv\u00eddate. Tu servidor te lo va a agradecer.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.loading.es\/servidores-vps-cloud\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1000\" height=\"100\" src=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps.png\" alt=\"Oferta Contratar VPS\" class=\"wp-image-8081\" srcset=\"https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps.png 1000w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-300x30.png 300w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-768x77.png 768w, https:\/\/www.loading.es\/blog\/wp-content\/uploads\/banner-oferta-servidor-vps-850x85.png 850w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-4 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"kre5HBuM7s\"><a href=\"https:\/\/www.loading.es\/blog\/que-es-mysql\/\">Qu\u00e9 es MySQL: Para qu\u00e9 se usa en mi sitio web<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abQu\u00e9 es MySQL: Para qu\u00e9 se usa en mi sitio web\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/que-es-mysql\/embed\/#?secret=mks8tdCVNB#?secret=kre5HBuM7s\" data-secret=\"kre5HBuM7s\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"SaldpBWf3x\"><a href=\"https:\/\/www.loading.es\/blog\/que-es-localhost\/\">Qu\u00e9 es localhost y para qu\u00e9 sirve<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abQu\u00e9 es localhost y para qu\u00e9 sirve\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/que-es-localhost\/embed\/#?secret=pnWiWBSq9T#?secret=SaldpBWf3x\" data-secret=\"SaldpBWf3x\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-el-blog-de-loading wp-block-embed-el-blog-de-loading\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"QDZbFZ44Rh\"><a href=\"https:\/\/www.loading.es\/blog\/consejos-para-mejorar-la-experiencia-de-usuario-de-tu-web\/\">Consejos para mejorar la experiencia de usuario de tu web<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abConsejos para mejorar la experiencia de usuario de tu web\u00bb \u2014 El blog de Loading\" src=\"https:\/\/www.loading.es\/blog\/consejos-para-mejorar-la-experiencia-de-usuario-de-tu-web\/embed\/#?secret=9afZGQUYkV#?secret=QDZbFZ44Rh\" data-secret=\"QDZbFZ44Rh\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfTienes un VPS y te preocupa su seguridad? Es normal. Cuando tu servidor est\u00e1 conectado a internet, est\u00e1 expuesto constantemente a intentos de acceso no autorizados. No hablamos de ciberdelincuentes con capucha, sino de bots autom\u00e1ticos que recorren la red buscando servidores mal protegidos. Por suerte, tenemos Fail2Ban.<\/p>\n","protected":false},"author":2,"featured_media":10784,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[67,35],"tags":[202,448],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/10781"}],"collection":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/comments?post=10781"}],"version-history":[{"count":8,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/10781\/revisions"}],"predecessor-version":[{"id":10812,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/posts\/10781\/revisions\/10812"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/media\/10784"}],"wp:attachment":[{"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/media?parent=10781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/categories?post=10781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loading.es\/blog\/wp-json\/wp\/v2\/tags?post=10781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}