Saltar al contenido principal
Imprimir

Cómo bloquear automáticamente a los atacantes en CSF en el servidor LiteSpeed en WHM/cPanel (Script avanzado).

Dirigir un negocio de alojamiento web requiere mantener estables los servidores, especialmente cuando se ofrecen alojamiento WordPress barato donde se comparten recursos. Uno de los mayores retos para los administradores de cPanel/WHM es hacer frente a los “escáneres de bots” y a los ataques distribuidos que eluden las reglas estándar de los cortafuegos.

Aunque LiteSpeed Web Server es increíblemente rápido, los ataques de alta frecuencia pueden aumentar el uso de la CPU. En esta guía, vamos a configurar un Analizador avanzado de registros en tiempo real (v19). A diferencia de los simples scripts fail2ban, esta solución personalizada distingue entre errores inofensivos y los peligrosos hits de ModSecurity, banea subredes enteras de forma inteligente, y -lo más importante- incluye un Filtro de seguridad para evitar la prohibición de sus propias IP de puerta de enlace interna.

¿Utiliza Imunify360? Si su servidor utiliza Imunify360 en lugar de CSF, consulte nuestro Guía de bloqueo automático de Imunify360.

¿Por qué utilizar esta solución personalizada?

  • La seguridad ante todo: Ignora automáticamente las IP privadas (por ejemplo, 10.0.x.x, 192.168.x.x) para evitar autoprohibiciones accidentales.

  • Categorización inteligente: Distingue entre un inofensivo error 404 y un peligroso intento de inyección SQL.

  • Pruebas detalladas: La razón de bloque en LCR le mostrará exactamente que y que la ruta del archivo provocó la prohibición.

  • Bot Farm Protection: Prohíbe automáticamente toda la subred (/24) si una granja de bots te ataca desde múltiples IPs.


Requisitos previos

  • Un servidor VPS o dedicado con acceso root.

  • Servidor web LiteSpeed instalado.

  • CSF (ConfigServer Seguridad y Cortafuegos) instalado y activo.


Paso 1: Crear el script del bloqueador avanzado

Crearemos un script bash que monitorice sus registros de acceso a LiteSpeed en tiempo real.

  1. Inicie sesión en su servidor a través de SSH como raíz.

  2. Cree el archivo de script:

    nano /root/litespeed_blocker.sh
    
  3. Pegue lo siguiente Profesional v19 código. Esta versión incluye la crítica Filtro de seguridad para ignorar las IP internas.

    #!/bin/bash
    # =================================================================
    # LiteSpeed/Apache Advanced Defense Blocker - v19 (CSF SAFE EDITION)
    # Feature: Auto-Ignores Private/Local IPs (10.x, 192.x, 127.x)
    # =================================================================
    
    ACCESS_LOG="/usr/local/apache/logs/access_log"
    ERROR_LOG="/usr/local/apache/logs/error_log"
    STRIKE_FILE="/tmp/litespeed_strikes.tmp"
    CSF_BIN="/usr/sbin/csf"
    CSF_ALLOW="/etc/csf/csf.allow"
    CSF_IGNORE="/etc/csf/csf.ignore"
    
    # Ensure strike file exists and clean on startup
    touch "$STRIKE_FILE"
    echo "" > "$STRIKE_FILE"
    
    tail -Fn0 "$ACCESS_LOG" "$ERROR_LOG" | while read -r line; do
        [[ "$line" == "==>"* ]] && continue
    
        # Detect Log Type
        if [[ "$line" == *"] ["* ]]; then log_type="Error"; else log_type="Access"; fi
    
        # 1. IP Extraction
        ip=$(echo "$line" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
    
        # --- SAFETY FILTER (Ignore Private IPs) ---
        if [[ -z "$ip" || "$ip" == "127.0.0.1" || "$ip" == "::1" ]]; then continue; fi
        if [[ "$ip" == 10.* || "$ip" == 192.168.* || "$ip" == 172.1[6-9].* || "$ip" == 172.2[0-9].* || "$ip" == 172.3[0-1].* ]]; then continue; fi
        # ------------------------------------------
    
        subnet=$(echo "$ip" | cut -d. -f1-3).0
    
        # 2. Path Extraction
        if [[ "$log_type" == "Access" ]]; then
            path=$(echo "$line" | grep -oP '"(GET|POST|HEAD|PUT) \K[^ ]+' | head -1 | cut -c1-35)
        else
            path=$(echo "$line" | grep -oP '(?<=context \[)[^\]]+|(?<=found \[)[^\]]+' | head -1)
            [[ -z "$path" ]] && path=$(echo "$line" | grep -oP '(GET|POST|HEAD) [^ ]+' | head -1)
        fi
        [[ -z "$path" ]] && path="/"
    
        # 3. Domain Extraction
        domain=$(echo "$line" | grep -oP '(?<=APVH_)[a-zA-Z0-9.-]+' | head -1)
        [[ -z "$domain" ]] && domain="Unknown"
    
        # --- Helper: Check Whitelist ---
        is_whitelisted() {
            if grep -q "$1" "$CSF_ALLOW" || grep -q "$1" "$CSF_IGNORE"; then return 0; else return 1; fi
        }
    
        # --- CASE A: CRITICAL ATTACKS (ModSec/ACL) ---
        if echo "$line" | grep -qE "RECAPTCHA|ACL|Access to context|ModSecurity"; then
            trigger=$(echo "$line" | grep -oE "RECAPTCHA|ACL|ModSecurity" | head -1)
            echo "SEC_IP:$ip" >> "$STRIKE_FILE"
            echo "SEC_SUB:$subnet" >> "$STRIKE_FILE"
    
            if [ $(grep -c "SEC_IP:$ip" "$STRIKE_FILE") -ge 3 ]; then
                if ! is_whitelisted "$ip"; then
                    $CSF_BIN -d "$ip" "LS_Block: Critical (3) | $trigger | $domain | $path" > /dev/null 2>&1
                    sed -i "/SEC_IP:$ip/d" "$STRIKE_FILE"
                fi
            fi
            if [ $(grep -c "SEC_SUB:$subnet" "$STRIKE_FILE") -ge 10 ]; then
                if ! is_whitelisted "$ip"; then
                    $CSF_BIN -d "$subnet/24" "LS_Block: Critical Subnet (10) | $trigger" > /dev/null 2>&1
                    sed -i "/SEC_SUB:$subnet/d" "$STRIKE_FILE"
                fi
            fi
    
        # --- CASE B: SCANNERS (403/404/500) ---
        elif echo "$line" | grep -qE " 400 | 401 | 403 | 404 | 405 | 500 |File not found"; then
            code=$(echo "$line" | grep -oE "\s(40[0-9]|4[1-4][0-9]|50[0-9])\s" | tr -d ' ' | head -1)
            echo "SCAN_IP:$ip" >> "$STRIKE_FILE"
            echo "SCAN_SUB:$subnet" >> "$STRIKE_FILE"
    
            if [ $(grep -c "SCAN_IP:$ip" "$STRIKE_FILE") -ge 7 ]; then
                if ! is_whitelisted "$ip"; then
                    $CSF_BIN -d "$ip" "LS_Block: Scan (7) | Code $code | $domain | $path" > /dev/null 2>&1
                    sed -i "/SCAN_IP:$ip/d" "$STRIKE_FILE"
                fi
            fi
            if [ $(grep -c "SCAN_SUB:$subnet" "$STRIKE_FILE") -ge 20 ]; then
                if ! is_whitelisted "$ip"; then
                    $CSF_BIN -d "$subnet/24" "LS_Block: Scan Subnet (20) | Code $code" > /dev/null 2>&1
                    sed -i "/SCAN_SUB:$subnet/d" "$STRIKE_FILE"
                fi
            fi
        fi
    done
    
  4. Guardar y salir (Pulse Ctrl+X, entonces Y, entonces Entre en).


Paso 2: Establecer permisos

Haz que el script sea ejecutable para que el sistema pueda ejecutarlo.

chmod +x /root/litespeed_blocker.sh

Paso 3: Crear el servicio de fondo

Para asegurar que esta protección funciona 24/7, crearemos un archivo de servicio systemd.

  1. Crea el archivo:

    nano /etc/systemd/system/litespeed-blocker.service
    
  2. Pegue la siguiente configuración:

    [Unidad]
    Descripción=LiteSpeed Bloqueador Avanzado de LCR
    En=network.target lsws.service
    
    [Servicio]
    ExecStart=/bin/bash /root/litespeed_blocker.sh
    Reinicie=siempre
    Usuario=raíz
    
    [Instalar]
    Se buscaEn=objetivo.multiusuario
    
  3. Guardar y salir.


Paso 4: Activar e iniciar el servicio

Ahora, registre el servicio e inícielo inmediatamente.

systemctl daemon-reload
systemctl active litespeed-blocker
systemctl start litespeed-blocker

Para comprobar que funciona, compruebe el estado:

systemctl status litespeed-blocker

Debería ver Activo (en funcionamiento) en verde.


Paso 5: Configurar el mantenimiento por horas

Tenemos que borrar la “Lista de bloqueados” cada hora. Esto evita que el script bloquee a usuarios legítimos que cometieron pequeños errores (como escribir una contraseña incorrecta) días atrás.

  1. Abra el archivo cron raíz:

    nano /var/spool/cron/root
    
  2. Añade esta línea al final:

    0 * * * * echo "" > /tmp/litespeed_strikes.tmp
    
  3. Guardar y salir.

  4. Paso crucial: Recargue el servicio cron para aplicar este cambio inmediatamente.

    service crond reload
    

Conclusión

Ha desplegado con éxito un Bloqueador automático Pro-Grade para su servidor LiteSpeed. Ahora su sistema detectará instantáneamente los ataques, los cruzará con su lista blanca y prohibirá las IP o subredes maliciosas directamente en CSF, todo ello mientras mantiene segura su red interna.

Proteja sus activos con Alojamiento VPS gestionado en la India o escalar globalmente con nuestra Alojamiento en la nube soluciones en myglobalHOST.

Índice
Cerrar
Consigue 75% + 10% de descuento extra en planes de alojamiento web de myglobalHOST

10% extra de descuento

Código de cupón

EXTRA10

Aplicable el

100 rupias de descuento

Código de cupón

FLAT100

Aplicable el

Cómo beneficiarse: Simplemente busque el plan de alojamiento más adecuado para usted y benefíciese de un descuento adicional en todos los pedidos.