Aller au contenu principal
Imprimer

Comment bloquer automatiquement les attaquants dans CSF sur le serveur LiteSpeed dans WHM/cPanel (Script avancé)

L'exploitation d'une entreprise d'hébergement web nécessite de maintenir la stabilité de vos serveurs, en particulier lorsque vous offrez hébergement WordPress bon marché où les ressources sont partagées. L'un des plus grands défis pour les administrateurs de cPanel/WHM est de faire face aux “bot scanners” et aux attaques distribuées qui contournent les règles standard des pare-feux.

Bien que le Serveur Web LiteSpeed soit incroyablement rapide, les attaques à haute fréquence peuvent toujours faire grimper l'utilisation du CPU. Dans ce guide, nous allons mettre en place un Analyseur avancé de journaux en temps réel (v19). Contrairement aux simples scripts fail2ban, cette solution personnalisée fait la distinction entre les erreurs inoffensives et les hits dangereux de ModSecurity, interdit des sous-réseaux entiers de manière intelligente et, plus important encore, inclut une fonction de contrôle de l'accès au réseau. Filtre de sécurité pour éviter d'interdire vos propres IP de passerelle interne.

Vous utilisez Imunify360 ? Si votre serveur utilise Imunify360 au lieu de CSF, veuillez vous référer à notre Guide de blocage automatique Imunify360.

Pourquoi utiliser cette solution personnalisée ?

  • La sécurité avant tout : Ignore automatiquement les IP privées (par exemple, 10.0.x.x, 192.168.x.x) afin d'éviter l'auto-banalisation accidentelle.

  • Catégorisation intelligente : Distingue une erreur 404 inoffensive d'une dangereuse tentative d'injection SQL.

  • Preuves détaillées : Le motif de blocage dans le CCA vous indiquera exactement qui et qui a déclenché l'interdiction.

  • Protection des exploitations agricoles : Interdit automatiquement l'ensemble du sous-réseau (/24) si une ferme de robots vous attaque à partir de plusieurs adresses IP.


Conditions préalables

  • Un VPS ou un serveur dédié avec accès à la racine.

  • Serveur Web LiteSpeed installés.

  • CSF (ConfigServer Security & Firewall) installés et actifs.


Étape 1 : Création du script de blocage avancé

Nous allons créer un script bash qui surveille vos logs d'accès LiteSpeed en temps réel.

  1. Connectez-vous à votre serveur via SSH en tant que racine.

  2. Créer le fichier de script :

    nano /root/litespeed_blocker.sh
    
  3. Collez les éléments suivants Professionnel v19 code. Cette version comprend les éléments critiques suivants Filtre de sécurité pour ignorer les IP internes.

    #!/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. Sauvegarder et quitter (Appuyer sur Ctrl+X, alors Y, alors Entrer).


Étape 2 : Définir les autorisations

Rendez le script exécutable afin que le système puisse l'exécuter.

chmod +x /root/litespeed_blocker.sh

Étape 3 : Créer le service d'arrière-plan

Pour que cette protection fonctionne 24 heures sur 24 et 7 jours sur 7, nous allons créer un fichier de service systemd.

  1. Créer le fichier :

    nano /etc/systemd/system/litespeed-blocker.service
    
  2. Collez la configuration suivante :

    [Unité]
    Description=LiteSpeed Advanced CSF Blocker
    Après=réseau.cible lsws.service
    
    [Service]
    ExecStart=/bin/bash /root/litespeed_blocker.sh
    Redémarrage=toujours
    Utilisateur=root
    
    [Installer]
    WantedBy=multi-user.target
    
  3. Sauvegarder et quitter.


Étape 4 : Activer et démarrer le service

Maintenant, enregistrez le service et démarrez-le immédiatement.

systemctl daemon-reload
systemctl permettre litespeed-blocker
systemctl start litespeed-blocker

Pour s'assurer qu'il fonctionne, vérifiez l'état :

systemctl status litespeed-blocker

Vous devriez voir Actif (en cours) en vert.


Étape 5 : Configuration de la maintenance horaire

Nous devons effacer la “Strike List” toutes les heures. Cela empêche le script de bloquer des utilisateurs légitimes qui ont fait de petites erreurs (comme taper un mauvais mot de passe) il y a quelques jours.

  1. Ouvrez le fichier cron racine :

    nano /var/spool/cron/root
    
  2. Ajoutez cette ligne tout en bas :

    0 * * * * écho "" > /tmp/litespeed_strikes.tmp
    
  3. Sauvegarder et quitter.

  4. Étape cruciale : Rechargez le service cron pour appliquer cette modification immédiatement.

    service crond reload
    

Conclusion

Vous avez maintenant déployé avec succès un Pro-Grade Auto-Blocker pour votre serveur LiteSpeed. Votre système détectera instantanément les attaques, les croisera avec votre liste blanche, et bannira les IP ou sous-réseaux malveillants directement dans CSF, tout en gardant votre réseau interne en sécurité.

Protégez vos actifs avec Hébergement VPS géré en Inde ou s'étendre à l'échelle mondiale grâce à nos Hébergement en nuage à l'adresse myglobalHOST.

Table des matières
Fermer
Obtenez 75% + 10% de réduction supplémentaire sur les plans d'hébergement web par myglobalHOST

Réduction supplémentaire de 10%

Code des coupons

EXTRA10

Applicable le

Rs 100 de réduction

Code des coupons

FLAT100

Applicable le

Comment en bénéficier : Choisissez simplement le plan d'hébergement qui vous convient le mieux et bénéficiez d'une remise supplémentaire sur toutes vos commandes.