README.md - ceketrumdev/Zdefender GitHub Wiki

ZDefender 🛡️

Rust License: MIT Version

ZDefender est un système avancé de protection contre les attaques DDoS pour les applications Linux. Il fournit une solution complète pour détecter et atténuer les menaces réseau en temps réel.

📋 Table des matières

✨ Fonctionnalités

  • 🔍 Détection multi-couches: Analyse sophistiquée des paquets et statistiques de trafic
  • 🏰 Mode forteresse amélioré: Protection renforcée avec whitelist automatique pour les connexions établies
  • 🚫 Blocage intelligent: Durée de blocage adaptée selon la gravité de l'attaque
  • ⚖️ Limitation de débit: Régulation du flux pour les comportements suspects
  • 📊 Statistiques en temps réel: Visualisation des métriques de sécurité et connexions établies
  • 💯 Système de confiance des IPs: Score calculé en fonction du comportement, région et historique
  • 📝 Journalisation flexible: Support des fichiers de logs classiques et systemd-journal
  • ⚙️ Configuration facile: Options configurables via fichier JSON
  • 🔄 Mode passif/actif: Fonctionnement en mode détection seule ou avec mitigation active
  • 🔒 Sécurisation automatique: Commande pour verrouiller rapidement le serveur en cas d'urgence

🛡️ Types d'attaques détectés

Type d'attaque Description Méthode de détection
SYN Flood Saturation par paquets SYN Analyse de ratio SYN/ACK
ICMP Flood Saturation par pings Comptage de paquets ICMP
UDP Flood Saturation par paquets UDP Analyse volumétrique
DNS Amplification Amplification par serveurs DNS Analyse de trafic DNS
Scan de ports Tentatives de découverte de services Détection de connexions multiples
Fragmentation Attaques par fragmentation de paquets Analyse de fragments
Comportements anormaux Toute déviation des modèles normaux Analyses statistiques

🏗️ Architecture

Le système est structuré en modules spécialisés:

zdefender/
├── src/
│   ├── models.rs       # Structures de données fondamentales
│   ├── log_mode.rs     # Configuration des modes de journalisation
│   ├── logger.rs       # Gestion de la journalisation
│   ├── config.rs       # Configuration et paramètres
│   ├── protection.rs   # Coordination des stratégies de protection
│   ├── analyzer.rs     # Analyse du trafic et détection des attaques
│   ├── packet_inspection.rs  # Inspection profonde des paquets
│   ├── detect_attacks.rs     # Algorithmes de détection
│   ├── defender.rs     # Actions de défense et gestion des connexions établies
│   ├── service.rs      # Gestion du service et statistiques en temps réel
│   └── main.rs         # Point d'entrée et CLI
└── ...

🚀 Installation

Prérequis

  • Système Linux (testé sur Ubuntu 20.04+, Debian 11+, CentOS 8+)
  • Rust 1.56+ (pour compilation)
  • libpcap-dev
  • build-essential

Installation automatique

# Cloner le dépôt
git clone https://github.com/ceketrumdev/Zdefender.git
cd zdefender

# Installer le service (requiert les droits d'administrateur)
sudo ./install.sh

# Vérifier le statut du service
sudo systemctl status zdefender

Installation manuelle

# Compiler le projet (sans support systemd)
cargo build --release

# Compiler avec support systemd-journal
cargo build --release --features systemd

# Copier le binaire
sudo cp target/release/zdefender /usr/local/bin/

# Créer le répertoire de configuration
sudo mkdir -p /etc/zdefender

# Copier la configuration par défaut
sudo cp config/default.json /etc/zdefender/config.json

# Installer le service systemd
sudo cp config/zdefender.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable zdefender
sudo systemctl start zdefender

⚙️ Configuration

Le fichier de configuration se trouve à /etc/zdefender/config.json :

{
  "interfaces": ["eth0"],
  "packet_threshold": 1000,
  "check_interval": 5,
  "block_duration": 300,
  "log_file": "/var/log/zdefender/zdefender.log",
  "log_level": "info",
  "log_mode": "File",
  "service_state": "Active",
  "fortress_mode": false,
  "whitelist": ["127.0.0.1", "::1"],
  "realtime_stats": false,
  "display_realtime_stats": false,
  "allowed_ports": [22, 80, 443],
  "trust_threshold": 0.7,
  "region_trust_scores": {},
  "auto_block_threshold": 0.2,
  "auto_whitelist_threshold": 0.9,
  "connection_time_for_trust": 300,
  "essential_ports": [22, 80, 443]
}

Options principales

Option Description Valeur par défaut
interfaces Interfaces réseau à surveiller ["eth0"]
packet_threshold Seuil de paquets par seconde 1000
check_interval Intervalle de vérification (secondes) 5
block_duration Durée de blocage (secondes) 300
log_mode Mode de journalisation (File ou SystemdJournal) File
fortress_mode Mode forteresse activé false
whitelist IPs à ne jamais bloquer ["127.0.0.1", "::1"]
allowed_ports Ports autorisés lors de la sécurisation [22, 80, 443]
trust_threshold Seuil de confiance pour considérer une IP fiable 0.7
region_trust_scores Scores de confiance par région {}
auto_block_threshold Seuil de confiance pour blocage automatique 0.2
auto_whitelist_threshold Seuil de confiance pour mise en liste blanche auto 0.9
connection_time_for_trust Durée de connexion (sec) pour être fiable 300

📝 Journalisation

ZDefender supporte deux modes de journalisation:

  • 📄 Fichier: Logs écrits dans un fichier classique (/var/log/zdefender/zdefender.log par défaut)
  • 📊 SystemdJournal: Logs envoyés à systemd-journal (nécessite la feature systemd)

Activer le support SystemdJournal

# Compiler avec la feature systemd
cargo build --release --features systemd

# Activer dans la configuration
sudo sed -i 's/"log_mode": "File"/"log_mode": "SystemdJournal"/' /etc/zdefender/config.json

🖥️ Utilisation

Interface CLI

# Démarrer le service
zdefender start

# Démarrer en daemon
zdefender start --daemon

# Arrêter le service
zdefender stop

# Afficher le statut
zdefender status

# Afficher les statistiques en temps réel (Ctrl+C pour quitter)
zdefender stats

# Afficher un rapport statique des statistiques de base
zdefender check

# Afficher les statistiques détaillées avec scores de confiance
zdefender detailed-stats

# Consulter les informations sur une IP spécifique
zdefender ip-info 192.168.1.10

# Activer le mode forteresse
zdefender fortress --enable

# Désactiver le mode forteresse
zdefender fortress --disable

# Sécuriser rapidement le serveur
zdefender secure

# Sécuriser le serveur en spécifiant les ports à laisser ouverts
zdefender secure --ports=22,80,443,3306

# Configurer le score de confiance pour une région
zdefender configure-region FR 0.8

# Recharger la configuration
zdefender reload

# Afficher les logs
zdefender logs

# Afficher les N dernières lignes de logs
zdefender logs --lines=50

# Afficher uniquement les logs d'erreur
zdefender logs --level=error

# Combiner les options
zdefender logs --lines=30 --level=warn

# Configurer les paramètres de mise à jour
zdefender update-settings --enable          # Activer les mises à jour automatiques
zdefender update-settings --disable         # Désactiver les mises à jour automatiques
zdefender update-settings --channel=beta    # Configurer le canal des mises à jour (stable, beta, dev)
zdefender update-settings --interval=48     # Configurer l'intervalle de vérification (en heures)
zdefender update-settings --check-now       # Forcer une vérification immédiate des mises à jour

Bibliothèque

Intégrez ZDefender dans vos applications Rust:

use zdefender::{ProtectionManager, PacketInfo, Action, LogMode};
use std::sync::Arc;
use tokio::sync::{mpsc, RwLock};

#[tokio::main]
async fn main() {
    // Initialiser les canaux de communication
    let (report_tx, mut report_rx) = mpsc::channel(100);

    // Charger la configuration
    let config = Arc::new(RwLock::new(Config::default()));

    // Initialiser le gestionnaire de protection
    let mut protection = ProtectionManager::new(config, report_tx).await;

    // Configurer les seuils de détection
    protection.set_thresholds(100.0, 0.8);

    // Définir un score de confiance régional
    protection.set_region_trust("FR", 0.8).await;

    // Traiter un paquet
    if let Some(action) = protection.process_packet(_packet) {
        match action {
            Action::Drop => println!("Paquet supprimé"),
            Action::Block(ip, duration) => println!("IP {} bloquée pour {:?}", ip, duration),
            Action::RateLimit(ip) => println!("Limitation de débit pour l'IP {}", ip),
            _ => {}
        }
    }
    
    // Activer le mode forteresse
    protection.enable_fortress_mode().await;
    
    // Consulter les statistiques de sécurité
    let stats = protection.get_security_stats().await;
    println!("Score de sécurité: {}", stats.average_security_score);
}

🔄 Comparer avec d'autres solutions

Fonctionnalité ZDefender Fail2Ban Crowdsec
Détection en temps réel
Analyse comportementale
Sécurisation automatique
Mode forteresse
Statistiques en temps réel
Système de confiance
Écrit en Rust
Peut être utilisé comme lib
Analyses personnalisées
Protection DDoS

📜 Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.