CCCPaste

0f7f7c7dec5a8

# --- Règles communes renforcées ---
(common_rules) {
    #############################################
    # 🚫 Protection contre les bots et scanners
    #############################################

    # Blocage LeakIX User-Agent
    @leakix_ua {
        header_regexp User-Agent (?i)l9scan
    }
    respond @leakix_ua 403

    # Blocage IP LeakIX (auto-update possible)
    @leakix_ip {
        # LEAKIX_IP_PLACEHOLDER
    }
    respond @leakix_ip 403

    # Blocage scanners connus
    @scanners {
        header_regexp User-Agent (?i)(Shodan|Censys|Nmap|masscan|curl|UGAResearchAgent)
    }
    respond @scanners 403

    # Blocage requêtes suspectes (fichiers ou endpoints sensibles)
    @sensitive_paths {
        path /.env /.git/* /server-status /actuator/* /info.php /wp-admin /wp-login.php /config.php
    }
    respond @sensitive_paths 403

    # Blocage requêtes HTTP sans User-Agent ou vides (souvent des bots)
    @no_ua {
        not header User-Agent *
    }
    respond @no_ua 403

    #############################################
    # 🧱 Durcissement HTTP
    #############################################
    header {
        # Cacher la version serveur
        -Server

        # Sécurité navigateur
        X-Frame-Options "DENY"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
        X-XSS-Protection "1; mode=block"

        # Empêcher la mise en cache côté client pour endpoints sensibles
        @sensitive_paths Cache-Control "no-store"

        # Sécurité CSP (à adapter selon tes apps)
        # Content-Security-Policy "default-src 'self'; frame-ancestors 'none'; object-src 'none';"
    }

    #############################################
    # 🧭 Compression & encodage
    #############################################
    encode gzip zstd

    #############################################
    # 🪵 Logging (optionnel)
    #############################################
    log {
        output file /etc/caddy/logs/security.log {
            roll_size 5mb
            roll_keep 5
        }
        level WARN
    }
}