CrowdSec – Protection intelligente des serveurs Linux contre les botnets, les attaques brute-force et le scan Internet

Si vous utilisez un serveur Linux avec Nginx, SSH ou WordPress, vous connaissez probablement déjà Fail2Ban. C’est un bon outil, mais il fonctionne localement — il bloque uniquement les adresses IP ayant attaqué votre serveur.

CrowdSec fonctionne de manière totalement différente. Il s’agit d’un système de protection basé sur une réputation IP partagée. Si des milliers de serveurs dans le monde détectent une adresse IP malveillante, votre serveur peut la bloquer avant même qu’une attaque ne soit tentée.

Comment fonctionne CrowdSec ?

  • analyse les journaux système (nginx, ssh, wordpress)
  • détecte les comportements suspects
  • partage les informations sur les IP attaquantes avec d’autres serveurs
  • bloque le trafic au niveau du pare-feu

Résultat ? La majorité des bots et scanners Internet n’atteignent jamais votre serveur Nginx.

Installation de CrowdSec sur Debian / Ubuntu

L’installation de CrowdSec est très simple et disponible directement depuis les dépôts Debian.

Pendant l’installation, CrowdSec :

  • crée une API locale (LAPI)
  • enregistre le serveur dans l’API centrale CrowdSec
  • télécharge les scénarios de sécurité de base

Installation du firewall bouncer

CrowdSec détecte les menaces, mais nécessite un composant d’exécution — appelé bouncer — qui bloque le trafic au niveau du pare-feu.

Par défaut, le bouncer utilise nftables et ajoute automatiquement des règles bloquant les adresses IP malveillantes.

Installation des collections de sécurité

Les collections contiennent des analyseurs de logs ainsi que des scénarios de détection d’attaques.

Rechargez ensuite la configuration :

Configuration des logs Nginx

Pour permettre à CrowdSec d’analyser le trafic HTTP, vous devez indiquer les fichiers de logs Nginx.

Éditez le fichier :

Ajoutez la configuration suivante :

Puis redémarrez le service :

Vérification du fonctionnement de CrowdSec

Statut du service :

Liste des bannissements actifs :

Statistiques :

Résultat final

Après une installation correcte de CrowdSec :

  • le serveur bloque automatiquement les botnets connus
  • les attaques WordPress et brute-force SSH sont arrêtées au niveau du pare-feu
  • Nginx traite beaucoup moins de trafic malveillant
  • la charge CPU et IO du serveur est significativement réduite

CrowdSec peut être considéré comme une évolution de Fail2Ban — un système qui ne réagit pas seulement localement, mais qui exploite une intelligence globale des menaces.

Fail2Ban : comment détecter les récidivistes et les bannir pendant une semaine (recidive)


Si vous utilisez Fail2Ban avec Nginx et WordPress, vous remarquerez tôt ou tard une chose : les mêmes adresses IP reviennent. Elles sont bannies pendant quelques minutes ou une heure, disparaissent… puis reviennent essayer /.env, /wp-login.php, /phpmyadmin ou d’autres chemins d’attaque populaires.

La solution n’est pas de rendre les filtres plus agressifs. La solution est recidive — un deuxième niveau de protection dans Fail2Ban qui analyse l’historique des bannissements et bloque à long terme les récidivistes.

Référence à la configuration précédente

Si vous n’avez pas encore la configuration de base de Fail2Ban pour Nginx et WordPress, je l’ai décrite ici :

Fail2Ban + Nginx + WordPress – configuration de base

Dans cet article, nous configurons des jail comme nginx-exploit, nginx-secure ou sshd. Recidive ne remplace pas cette configuration — il la renforce.

Comment trouver les récidivistes dans les logs

Il est d’abord utile de vérifier si le problème existe réellement. Nous extrayons des logs Fail2Ban la liste des IP qui ont été bannies le plus souvent :

Exemple de résultat (adresses partiellement anonymisées) :

Si vous voyez des nombres comme 8, 9, 13 — cela signifie que ces IP reviennent après la levée du bannissement. Un bantime court n’est pour elles qu’une simple pause technique.

Pourquoi recidive est meilleur que l’augmentation du bantime

  • Vous n’avez pas besoin de bannir tout le monde pendant 24h pour une simple faute de frappe dans une URL.
  • Vous ne augmentez pas le risque de bloquer des utilisateurs légitimes.
  • La sanction est progressive et concerne uniquement les adresses qui reviennent.

Recidive analyse /var/log/fail2ban.log et compte combien de fois une IP a été bannie par d’autres jail. Cela permet de “neutraliser” uniquement celles qui ont déjà été bloquées à plusieurs reprises.

Configuration de recidive (5 bannissements en 24h = 7 jours de bannissement)

Ajoutez le bloc suivant dans /etc/fail2ban/jail.local :

À la fin du fichier, collez :

Enregistrez le fichier et redémarrez Fail2Ban :

Vérifiez le statut du jail :

Comment vérifier qui est proche du seuil recidive

Si vous souhaitez voir les IP qui ont déjà plusieurs bannissements et s’approchent du seuil recidive :

Résumé

Recidive est l’un des moyens les plus simples et les plus efficaces pour limiter les scanners et bots récurrents. Au lieu de bannir agressivement tout le monde — vous bloquez uniquement ceux qui reviennent à plusieurs reprises.

Dans un environnement avec plusieurs domaines, un reverse proxy Nginx et WordPress, c’est pratiquement un élément incontournable de la configuration : moins de bruit dans les logs, moins d’attaques répétitives et moins d’analyse manuelle.

Debian 13 (Trixie) → Proxmox VE 9 – Installation simplifiée sur un Debian pur

Proxmox VE 9 est basé sur Debian 13 (Trixie) et introduit un noyau plus récent, des versions mises à jour de LXC et QEMU ainsi qu’une pile de virtualisation améliorée. Ce guide présente une méthode simplifiée et automatisée pour installer Proxmox VE 9 sur un système Debian 13 propre à l’aide de deux scripts d’installation.

La méthode suit la même approche que mon précédent guide Proxmox 8 sur Debian 12, mais adaptée à Debian 13 et Proxmox VE 9.

Prérequis

  • Installation fraîche de Debian 13 (Trixie)
  • Accès root
  • Connexion Internet

Toutes les commandes doivent être exécutées en tant que root.

Partie 1 – Préparation du système & installation du noyau Proxmox

Téléchargez le premier script :

Ce script :

  • Définit le nom d’hôte et met à jour le fichier /etc/hosts
  • Installe le trousseau (keyring) d’archives Proxmox (vérifié via SHA512)
  • Ajoute le dépôt Proxmox VE 9 pour Debian 13
  • Effectue une mise à niveau complète du système
  • Installe proxmox-default-kernel
  • Redémarre le système

Contenu de install-proxmox9-part1.sh

Partie 2 – Installation de Proxmox VE 9

Après le redémarrage, téléchargez et exécutez :

Contenu de install-proxmox9-part2.sh

Accès à l’interface Web

Après avoir terminé le second script, ouvrez :

Connectez-vous avec l’utilisateur root et votre mot de passe root. Vous pouvez voir un avertissement de certificat — c’est normal pour une installation récente.

Dépannage – erreur 401 Unauthorized (dépôt pve-enterprise)

Si après l’installation ou lors de l’exécution de apt update vous obtenez l’erreur suivante :

Cela signifie que le dépôt enterprise est activé, mais que votre système ne dispose pas d’un abonnement Proxmox valide. Dans ce guide, nous utilisons le dépôt pve-no-subscription, il est donc nécessaire de désactiver le dépôt enterprise.

Corrigez le problème en exécutant :

Après cela, la mise à jour devrait s’exécuter correctement :

Si tout est correctement configuré, vous verrez le message :

All packages are up to date.

Conclusion

Cette méthode offre une manière propre et contrôlée de déployer Proxmox VE 9 directement sur Debian 13 sans utiliser l’installateur ISO. Elle est particulièrement utile pour les environnements automatisés, les laboratoires et les configurations d’infrastructure personnalisées.

Fail2Ban + Nginx (compatible WordPress) : 5 requêtes suspectes → bannissement de 5 minutes (correctif iptables-nft, tests et déblocage IP)

Ce guide montre une installation et configuration complètes de Fail2Ban pour Nginx et WordPress, afin de :

  • bloquer les scanners et bots (par exemple les tentatives d’accès à /.env, /.git, phpmyadmin, etc.),
  • ne pas bloquer l’administrateur WordPress,
  • bannir une adresse IP après 5 requêtes suspectes ou invalides,
  • appliquer un bannissement court de seulement 5 minutes (sans risque de vous bloquer longtemps).

Étape 1 : Installer Fail2Ban

Installez Fail2Ban :

Activez et démarrez le service :

Vérifiez qu’il fonctionne :

Étape 2 : Créer le filtre nginx-secure

Créez le fichier de filtre :

Collez la configuration suivante :

Étape 3 : Créer la jail nginx-secure

Créez le fichier de configuration :

Collez la configuration suivante :

Étape 4 : Redémarrer Fail2Ban

Étape 5 : Vérifier le firewall

Vérifiez que la chaîne Fail2Ban existe :

Test externe

Exécutez depuis une autre machine :

Après 5 tentatives, l’adresse IP sera bannie pendant 5 minutes.

Voir les IP bannies

Débloquer une adresse IP

Débloquez votre IP manuellement :

Résumé

  • protège contre les scanners et les tentatives d’exploitation,
  • ne bloque pas le panneau d’administration WordPress,
  • bannissement court de seulement 5 minutes,
  • compatible avec iptables-nft,
  • facile à tester et à débloquer.

Mise à niveau automatique Debian 12 → Debian 13 avec mise à jour optionnelle de PHP et nginx

Mise à niveau Debian 12 vers Debian 13

La mise à niveau de Debian de la version 12 (bookworm) vers 13 (trixie) est une opération qui doit être effectuée de manière reproductible et sans surprises, en particulier sur les serveurs et les conteneurs (par exemple Proxmox LXC ou machines virtuelles). Ci-dessous, vous trouverez un guide simple ainsi que des commandes prêtes à l’emploi pour télécharger et exécuter le script de mise à niveau.

Avant de lancer la mise à niveau : créez une sauvegarde ou un snapshot. Dans Proxmox, la meilleure option est vzdump ou un snapshot. Sur bare metal, sauvegardez au minimum /etc, les applications et les bases de données.

  • Proxmox LXC / VM : sauvegarde avec vzdump ou snapshot.
  • Serveur : sauvegarde de /etc, /var/www, bases de données (MySQL/PostgreSQL) et certificats SSL.

Téléchargement du script :

https://soban.pl/bash/upgrade_to_debian13.sh

1) Sauvegarde avant la mise à niveau (exemples)

Exemple de sauvegarde dans Proxmox (exécuter sur l’hôte Proxmox, remplacez CTID/VMID) :

Exemple de sauvegarde simple du système de fichiers sur un serveur (cela ne remplace pas un snapshot complet, mais c’est mieux que rien) :

2) Télécharger le script (wget / curl)

La méthode la plus simple consiste à utiliser wget. Si la commande wget ne fonctionne pas malgré l’installation du paquet, utilisez le chemin complet /usr/bin/wget.

Variante A (wget standard) :

Variante B (wget avec chemin complet – utile si PATH est incorrect) :

Variante C (curl) :

3) Aide du script (paramètres)

Avant d’exécuter la mise à niveau, affichez la liste des paramètres disponibles et des exemples d’utilisation :

4) Mise à niveau Debian 12 → Debian 13 (système uniquement)

Si vous utilisez actuellement Debian 12 (bookworm) et souhaitez effectuer la mise à niveau du système :

Le script sauvegarde /etc/apt/sources.list, remplace les dépôts par trixie, exécute apt update et apt full-upgrade, puis autoremove et autoclean.

5) Détection automatique PHP/nginx et mise à jour si nécessaire

Si le conteneur ou la VM utilise une stack web et que vous souhaitez que le script détecte automatiquement PHP (nginx + fastcgi_pass) et mette à jour PHP et nginx si nécessaire :

6) Forcer la mise à niveau de PHP et nginx (correction du socket PHP-FPM)

Si vous souhaitez forcer l’installation ou la mise à niveau de PHP et corriger automatiquement la configuration nginx pour utiliser le bon socket PHP-FPM :

Cette commande installe PHP 8.2 (php-fpm et modules courants) et remplace les anciens chemins de socket PHP-FPM dans nginx par /run/php/php8.2-fpm.sock. Ensuite, elle exécute nginx -t et recharge ou redémarre les services.

7) Déjà sur Debian 13 ? Mode PHP/nginx uniquement

Si le système est déjà sous Debian 13 (trixie) et que vous souhaitez uniquement mettre à jour PHP et nginx sans modifier les dépôts système :

8) Mode test (dry-run)

Si vous souhaitez voir ce que le script fera sans effectuer de modifications :

9) Diagnostic : wget installé mais ne fonctionne pas

Si apt indique que wget est installé mais que le shell affiche command not found, il s’agit généralement d’un problème PATH. La solution la plus simple est d’utiliser le chemin complet : /usr/bin/wget.

Résumé

Cette solution permet de mettre à niveau Debian 12 → Debian 13 et de corriger automatiquement les problèmes courants PHP/nginx après la mise à niveau (socket PHP-FPM, test de configuration nginx, redémarrage des services). Créez toujours une sauvegarde avant la mise à niveau et commencez par exécuter --help.

Script : https://soban.pl/bash/upgrade_to_debian13.sh