SAE501

SAE501 - Architecture Wi-Fi Sécurisée Multi-Sites

⚠️ MISE À JOUR CRITIQUE - v2.2.0 (31 janvier 2026)

🔴 BUG CRITIQUE CORRIGÉ: Credentials MySQL hardcodés

Problème identifié: Le script install_php_admin.sh utilisait un mot de passe MySQL hardcodé au lieu de charger les vrais credentials depuis /opt/sae501/secrets/db.env.

Impact:

Correction appliquée (Commit b08bdc8):

Action requise:

# Si vous avez une installation existante avec PHP-Admin non fonctionnel:
cd /opt/SAE501
git pull origin main

# Ré-exécuter le script corrigé:
sudo bash scripts/install_php_admin.sh

# Vérifier que PHP-Admin fonctionne:
curl -I http://localhost/admin
# Attendu: HTTP/1.1 200 OK

Nouvelles installations: Utilisez directement la version corrigée (install_php_admin.sh v2.2.0).


🌟 But du projet

Créer une infrastructure d’authentification RADIUS centralisée pour une chaîne de salles de sport permettant:


💻 Composants du système

FreeRADIUS (Port 1812/1813)

PHP-Admin (Port 80/443) 🆕

MySQL/MariaDB (Port 3306)

Wazuh (Port 5601/1514)

Hardening Sécurité 🛡️ 🆕


📁 Pré-requis


🚀 GUIDE D’INSTALLATION - ÉTAPE PAR ÉTAPE

ÉTAPE 1: Préparation de la VM

1.1 Créer une VM

1.2 Installer Debian/Ubuntu

# Pendant l'installation:
# - Pas de bureau graphique nécessaire
# - SSH activé
# - Utilisateur standard créé

1.3 Vérifier la connexion

ping google.com

ÉTAPE 2: Télécharger le projet

# Se connecter en SSH ou terminal
sudo su  # Passer en root

# Cloner le répository
git clone https://github.com/sfrayan/SAE501.git
cd SAE501

# Rendre les scripts exécutables
chmod +x scripts/*.sh tests/*.sh

ÉTAPE 3: Installation modulaire (RECOMMANDÉ)

📦 Installation par étapes - Exécuter dans l’ordre

# 1. Installer MySQL et créer la base de données
sudo bash scripts/install_mysql.sh

# 2. Installer FreeRADIUS (100% AUTONOME)
# ✨ Génère AUTOMATIQUEMENT:
#    - Certificats SSL auto-signés
#    - Configuration SQL (rlm_sql_mysql)
#    - Configuration EAP (PEAP-MSCHAPv2)
#    - Sites default + inner-tunnel
#    - Module mschap
#    - Test d'authentification
sudo bash scripts/install_radius.sh

# 3. Installer PHP-Admin (interface web) 🆕 ✅ VERSION CORRIGÉE v2.2.0
# ✨ GÉNÈRE AUTOMATIQUEMENT:
#    - Toutes les pages PHP (login, dashboard, users, audit, system)
#    - Configuration Apache complète
#    - Permissions sécurisées
#    - Design moderne responsive
#    - ✅ CHARGE LES VRAIS CREDENTIALS DEPUIS db.env!
#    - ZÉRO fichier externe requis!
sudo bash scripts/install_php_admin.sh

# 4. Installer Wazuh (monitoring) - OPTIONNEL
# 🆕 NOUVELLE VERSION 100% AUTONOME!
# ✨ Installe AUTOMATIQUEMENT:
#    - Wazuh Manager 4.7
#    - OpenSearch (moteur de recherche)
#    - Filebeat (collecteur de logs)
#    - Wazuh Dashboard (interface web)
#    - Configuration complète ossec.conf
#    - Règles personnalisées RADIUS
#    - Aucun fichier externe requis!
sudo bash scripts/install_wazuh.sh

# 5. Appliquer le hardening sécurité - ⭐ FORTEMENT RECOMMANDÉ
# 🆕 VERSION 2.0 - HARDENING COMPLET AUTOMATISÉ!
# ✨ Configure AUTOMATIQUEMENT:
#    🔥 UFW Firewall (règles optimisées)
#    🔐 SSH durci (chiffrement moderne, restrictions)
#    🛡️ Paramètres kernel sécurisés (sysctl)
#    👤 Politiques utilisateurs (PAM, limites)
#    🚫 Fail2Ban (anti-bruteforce SSH/Apache)
#    📝 Auditd (surveillance fichiers critiques)
#    🌐 Apache sécurisé (headers, modules)
#    🗄️ MySQL sécurisé (logs, InnoDB)
#    📂 Permissions durcies (fichiers système)
sudo bash scripts/install_hardening.sh

Durée estimée:

✨ Nouveautés v2.2.0 (PHP-Admin):

Avantages de l’installation modulaire:


ÉTAPE 3.5: ⚠️ PRÉREQUIS MANUELS OBLIGATOIRES AVANT TESTS

🔧 Configuration manuelle requise (CRITIQUE)

Les scripts automatisent l’installation, mais 3 configurations manuelles sont OBLIGATOIRES avant de passer aux tests:


1️⃣ Créer radius/clients.conf avec vos équipements réseau

Pourquoi: FreeRADIUS refuse les connexions des équipements non déclarés (sécurité)

Fichier: /etc/freeradius/3.0/clients.conf

Configuration minimale:

# Éditer le fichier
sudo nano /etc/freeradius/3.0/clients.conf

# Ajouter vos équipements (exemples):

# Point d'accès WiFi
client access_point_1 {
    ipaddr = 192.168.1.100
    secret = VotreSecret@Securise123!
    shortname = AP-Bureau
}

# Switch réseau
client switch_1 {
    ipaddr = 192.168.1.50
    secret = VotreSecret@Securise123!
    shortname = Switch-Etage1
}

# Sous-réseau complet (alternative)
client reseau_wifi {
    ipaddr = 192.168.1.0/24
    secret = VotreSecret@Securise123!
    shortname = WiFi-Network
}

🚨 SÉCURITÉ:

Redémarrer RADIUS:

sudo systemctl restart freeradius
sudo systemctl status freeradius  # Vérifier OK

2️⃣ Générer ou importer certificats TLS (PEAP-MSCHAPv2)

Pourquoi: EAP-PEAP nécessite un certificat serveur pour chiffrer les échanges

Option A - Auto-généré (LAB/TEST uniquement):

# Exécuter le générateur de certificats auto-signés
sudo bash scripts/generate_certificates.sh

# Résultat:
# ✅ Certificat créé dans /etc/freeradius/3.0/certs/
# ✅ Validité: 365 jours
# ⚠️  Auto-signé = Avertissement sur clients (acceptable en lab)

Option B - Certificat signé PRODUCTION (Let’s Encrypt/DigiCert):

# Installer certbot
sudo apt install certbot -y

# Obtenir certificat (nécessite un domaine)
sudo certbot certonly --standalone -d radius.votredomaine.com

# Copier dans FreeRADIUS
sudo cp /etc/letsencrypt/live/radius.votredomaine.com/fullchain.pem \
    /etc/freeradius/3.0/certs/server.pem
sudo cp /etc/letsencrypt/live/radius.votredomaine.com/privkey.pem \
    /etc/freeradius/3.0/certs/server.key

# Permissions
sudo chown freerad:freerad /etc/freeradius/3.0/certs/server.*
sudo chmod 640 /etc/freeradius/3.0/certs/server.*

# Redémarrer
sudo systemctl restart freeradius

🔒 Renouvellement automatique (Let’s Encrypt):

sudo crontab -e
# Ajouter:
0 3 * * * certbot renew --quiet --post-hook "systemctl restart freeradius"

3️⃣ Configurer les utilisateurs RADIUS

Pourquoi: Base de données vide après installation (sauf utilisateur test)

Option A - Via phpMyAdmin (✅ RECOMMANDÉ):

  1. Accédez à http://VOTRE_IP/admin
  2. Login: admin / Admin@Secure123!
  3. Cliquez “➕ Ajouter utilisateur”
  4. Entrez:
    • Username: jean.dupont
    • Password: Passe@Complexe123
  5. Cliquez “✅ Ajouter”

Option B - Via SQL direct:

mysql -u root -p radius
# Enter password: MySQL@Root123!

-- Ajouter utilisateur
INSERT INTO radcheck (username, attribute, op, value) 
VALUES ('jean.dupont', 'Cleartext-Password', ':=', 'Passe@Complexe123');

-- Vérifier
SELECT * FROM radcheck;

EXIT;

Tester l’authentification:

radtest jean.dupont Passe@Complexe123 localhost 0 testing123
# Attendu: Received Access-Accept

✅ Checklist avant tests

Si tous ces points sont OK, passez à l’ÉTAPE 4 (tests)


ÉTAPE 4: Vérifier l’installation

4.1 Exécuter la suite complète de tests ✨ NOUVEAU

# Lancer tous les tests automatiques
sudo bash tests/run_all_tests.sh

Ce script teste automatiquement:

Résultat attendu:

================================================================
                    RÉSUMÉ DES TESTS
================================================================

Total des tests      : 65
Tests réussis       : 60
Tests échoués       : 0
Avertissements      : 5

Taux de réussite    : 92% 🎉

================================================================
  ✓ TOUS LES TESTS CRITIQUES RÉUSSIS!
  🎆 Installation SAE501 opérationnelle
================================================================

4.2 Diagnostics rapides (alternatif)

# Affiche l'état de tous les services
bash scripts/diagnostics.sh

Vous devriez voir:

4.3 Tester l’authentification RADIUS

# Test avec l'utilisateur créé automatiquement
radtest testuser testpass localhost 0 testing123

# Vous devriez voir:
# Received Access-Accept

4.4 Accéder à PHP-Admin 🆕

URL: http://VOTRE_IP/admin
Utilisateur: admin
Mot de passe: Admin@Secure123!

Fonctionnalités disponibles:

✅ Si PHP-Admin fonctionne = BUG CORRIGÉ avec succès!


ÉTAPE 5: Configuration Sécurité Avancée (⚠️ OBLIGATOIRE AVANT PRODUCTION!)

5.1 CHANGER LES MOTS DE PASSE (⚠️ CRITIQUE!)

# 1. Changer le mot de passe PHP-Admin:
# Connectez-vous à http://VOTRE_IP/admin
# Allez dans Paramètres > Changer mot de passe

# 2. Changer le secret RADIUS dans clients.conf:
sudo nano /etc/freeradius/3.0/clients.conf
# Remplacez: secret = testing123
# Par: secret = VotreSecret@TrèsSécurisé123!
sudo systemctl restart freeradius

# 3. Changer MySQL root:
mysql -u root -p
# Enter: MySQL@Root123!
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NouveauMot@Passe123!';
EXIT;

# 4. Changer Wazuh Dashboard (si installé):
# Accéder à http://VOTRE_IP:5601
# Utilisateur: admin
# Modifier le mot de passe dans Settings

5.2 Activer HTTPS (Recommandé)

# Installer Let's Encrypt pour certificat gratuit
sudo apt install certbot python3-certbot-apache -y

# Obtenir un certificat (nécessite un nom de domaine)
sudo certbot --apache -d votredomaine.com

# Renouvellement automatique
sudo systemctl enable certbot.timer

ÉTAPE 6: ⚠️ AMÉLIORATIONS PRODUCTION CRITIQUE

🏭 Passage en environnement de production

L’installation actuelle est opérationnelle pour lab/test. Pour un déploiement production critique, implémentez ces améliorations:


1️⃣ Certificats TLS signés (Let’s Encrypt/DigiCert)

Problème actuel: Certificats auto-signés = avertissements clients

Solution production:

# Option A - Let's Encrypt (gratuit, renouvelable auto)
sudo certbot certonly --standalone -d radius.votredomaine.com

# Lier à FreeRADIUS (voir ÉTAPE 3.5 section 2)

# Option B - Certificat commercial (DigiCert, Sectigo)
# 1. Générer CSR
openssl req -new -newkey rsa:4096 -nodes \
  -keyout /etc/freeradius/3.0/certs/server.key \
  -out /etc/freeradius/3.0/certs/server.csr

# 2. Soumettre CSR à l'autorité de certification
# 3. Installer certificat signé reçu
# 4. Redémarrer FreeRADIUS

Bénéfices:


2️⃣ Secrets externes (Vault/AWS Secrets Manager)

Problème actuel: Secrets en clair dans /opt/sae501/secrets/db.env

Solution production - HashiCorp Vault:

# Installer Vault
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vault -y

# Initialiser Vault
vault server -dev  # DEV MODE - en prod utiliser config production

# Stocker secret MySQL
vault kv put secret/sae501/mysql \
  user="radiususer" \
  password="VotreMotDePasseTrèsComplexe@2026"

# Récupérer dans script (exemple)
DB_PASSWORD=$(vault kv get -field=password secret/sae501/mysql)

Solution production - AWS Secrets Manager:

# Installer AWS CLI
sudo apt install awscli -y

# Configurer credentials
aws configure

# Créer secret
aws secretsmanager create-secret \
  --name sae501/mysql \
  --secret-string '{"user":"radiususer","password":"Complexe@2026"}'

# Récupérer dans script
DB_PASSWORD=$(aws secretsmanager get-secret-value \
  --secret-id sae501/mysql \
  --query SecretString --output text | jq -r .password)

Bénéfices:


3️⃣ Réplication RADIUS secondaire (Haute Disponibilité)

Problème actuel: Serveur unique = point de défaillance unique (SPOF)

Solution production - Serveur secondaire + Load Balancer:

Architecture cible:

             Load Balancer (HAProxy)
                   |
        +-----------+-----------+
        |                       |
   RADIUS-1 (Master)      RADIUS-2 (Standby)
        |                       |
        +-----------+-----------+
                   |
              MySQL Cluster
           (Master-Slave Replication)

Étapes de mise en œuvre:

# Sur RADIUS-1 (existant):
# Configurer réplication MySQL
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Ajouter:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = radius

mysql -u root -p
CREATE USER 'replicator'@'%' IDENTIFIED BY 'Repl@Password2026';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;  # Noter File et Position

# Sur RADIUS-2 (nouveau serveur):
# Cloner SAE501 et installer (même procédure ÉTAPE 1-3)

# Configurer réplication MySQL
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Ajouter:
[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = radius
relay_log = /var/log/mysql/mysql-relay-bin.log

mysql -u root -p
CHANGE MASTER TO 
  MASTER_HOST='IP_RADIUS_1',
  MASTER_USER='replicator',
  MASTER_PASSWORD='Repl@Password2026',
  MASTER_LOG_FILE='mysql-bin.000001',  # Depuis SHOW MASTER STATUS
  MASTER_LOG_POS=123456;  # Depuis SHOW MASTER STATUS
START SLAVE;
SHOW SLAVE STATUS\G  # Vérifier Slave_IO_Running: Yes

# Installer HAProxy (load balancer)
sudo apt install haproxy -y

sudo nano /etc/haproxy/haproxy.cfg
# Ajouter:
listen radius
    bind *:1812
    mode tcp
    balance roundrobin
    server radius1 IP_RADIUS_1:1812 check
    server radius2 IP_RADIUS_2:1812 check backup

sudo systemctl restart haproxy

Bénéfices:


4️⃣ Archivage logs long-terme (Syslog centralisé)

Problème actuel: Logs locaux = perte en cas de compromission serveur

Solution production - Syslog centralisé (rsyslog + S3/ELK):

# Sur serveur RADIUS:
sudo nano /etc/rsyslog.d/50-sae501.conf
# Ajouter:
# Envoyer logs FreeRADIUS vers serveur centralisé
$ModLoad imfile
$InputFileName /var/log/freeradius/radius.log
$InputFileTag radius:
$InputFileStateFile stat-radius
$InputFileSeverity info
$InputFileFacility local7
$InputRunFileMonitor

*.* @@syslog-central.entreprise.com:514  # TCP sécurisé

sudo systemctl restart rsyslog

# Option alternative - Envoyer vers AWS S3:
sudo apt install awscli -y

# Script de backup quotidien
sudo nano /usr/local/bin/backup_radius_logs.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf /tmp/radius-logs-$DATE.tar.gz /var/log/freeradius/
aws s3 cp /tmp/radius-logs-$DATE.tar.gz s3://entreprise-radius-logs/
rm /tmp/radius-logs-$DATE.tar.gz

sudo chmod +x /usr/local/bin/backup_radius_logs.sh

# Cron quotidien (3h du matin)
sudo crontab -e
0 3 * * * /usr/local/bin/backup_radius_logs.sh

Solution avancée - Stack ELK (Elasticsearch + Logstash + Kibana):

# Installer Filebeat (déjà présent si Wazuh installé)
sudo apt install filebeat -y

sudo nano /etc/filebeat/filebeat.yml
# Configurer:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/freeradius/*.log
  fields:
    service: radius
    environment: production

output.elasticsearch:
  hosts: ["elk.entreprise.com:9200"]
  username: "filebeat"
  password: "VotrePassword"

sudo systemctl restart filebeat

Bénéfices:


✅ Checklist Production Critique

Obligatoire avant mise en production:

Recommandations supplémentaires:


ÉTAPE 7: Configurer le routeur Wi-Fi

7.1 Accéder à l’interface du routeur

URL: http://192.168.1.1
Login: admin
Password: admin (par défaut TP-Link)

7.2 Configurer l’authentification Wi-Fi

  1. Allez dans Wireless Settings ou Security
  2. Sélectionnez le SSID d’entreprise
  3. Security Type: WPA-Enterprise (ou WPA3-Enterprise)
  4. Authentication Type: PEAP ou EAP-TLS
  5. RADIUS Server IP: Adresse IP du serveur SAE501
  6. RADIUS Server Port: 1812
  7. Shared Secret: testing123 (ou votre secret modifié)
  8. Cliquer Save

7.3 Tester la connexion

Sur un ordinateur:

  1. Chercher le réseau Wi-Fi
  2. Connecter à l’SSID “Entreprise”
  3. Type d’authentification: WPA-Enterprise
  4. Entrer un identifiant RADIUS créé en PHP-Admin
  5. Entrer le mot de passe
  6. Vérifier dans les logs: sudo tail -f /var/log/freeradius/radius.log

ÉTAPE 8: Gestion des utilisateurs avec PHP-Admin

8.1 Ajouter un utilisateur

Via PHP-Admin (✅ RECOMMANDÉ):

  1. Accédez à http://VOTRE_IP/admin
  2. Cliquez “➕ Ajouter utilisateur”
  3. Entrez:
    • Identifiant: jean.dupont
    • Mot de passe: MonPasse@123
  4. Cliquez “✅ Ajouter”

Avantages PHP-Admin:

8.2 Lister les utilisateurs

Via PHP-Admin:

  1. Cliquez “👥 Utilisateurs”
  2. Voir tous les comptes créés
  3. Actions: ✏️ Modifier, 🗑️ Supprimer

8.3 Consulter les logs d’authentification

Via PHP-Admin:

  1. Cliquez “📄 Logs d’audit”
  2. Filtrez par date/action
  3. Voir qui s’est connecté, quand, d’où, résultat

Logs en temps réel:

sudo tail -f /var/log/freeradius/radius.log

ÉTAPE 9: Monitoring avec Wazuh Dashboard 🆕

9.1 Accéder au Dashboard Wazuh

URL: http://VOTRE_IP:5601
Utilisateur: admin
Mot de passe: Admin@Wazuh123!  (CHANGEZ-LE!)

Sections importantes:

  1. Overview (🏠): Statistiques globales
  2. Security Events (🚨): Alertes de sécurité
  3. Integrity Monitoring (📄): Surveillance fichiers
  4. RADIUS Logs: Authentifications réussies/échouées

9.2 Règles d’alerte personnalisées RADIUS

Le script Wazuh crée automatiquement 10 règles spécifiques:

Rule ID Description Niveau
100001 Authentification RADIUS réussie 3 (Info)
100002 Authentification RADIUS échouée 5 (Notice)
100003 Multiple échecs depuis même IP (5 en 5min) 10 (Critical)
100004 Service RADIUS démarré 3 (Info)
100005 Erreur connexion MySQL 8 (Important)
100006 Client RADIUS non autorisé 7 (Warning)
100007 Certificat SSL expiré 8 (Important)
100008 Utilisateur inconnu 5 (Notice)
100009 Mot de passe incorrect 5 (Notice)
100010 Serveur RADIUS surchargé 9 (Alert)

ÉTAPE 10: Maintenance et surveillance

10.1 Sauvegarder la base de données

# Sauvegarde complète
mysqldump -u root -p radius > backup_radius_$(date +%Y%m%d).sql

# Sauvegarder Wazuh
tar -czf backup_wazuh_$(date +%Y%m%d).tar.gz /var/ossec/etc

# Sauvegarder configuration hardening
tar -czf backup_hardening_$(date +%Y%m%d).tar.gz \
  /etc/ssh/sshd_config \
  /etc/ufw \
  /etc/fail2ban \
  /etc/audit/rules.d \
  /etc/sysctl.d/99-sae501-hardening.conf

10.2 Restaurer une sauvegarde

# Si problème, restaurer
mysql -u root -p radius < backup_radius_20260131.sql
tar -xzf backup_wazuh_20260131.tar.gz -C /
tar -xzf backup_hardening_20260131.tar.gz -C /

10.3 Surveillance quotidienne

# Vérifier logs Fail2Ban
sudo fail2ban-client status sshd
sudo fail2ban-client status apache-auth

# Vérifier logs audit
sudo ausearch -k exec -ts today | tail -20
sudo ausearch -k sudoers_changes -ts today

# Vérifier activité réseau suspecte
sudo netstat -tulpn | grep LISTEN
sudo ss -tulpn

# Vérifier tentatives d'accès
sudo grep "Failed password" /var/log/auth.log | tail -20

# Vérifier modifications fichiers critiques
sudo ausearch -k sshd_config_changes -ts today
sudo ausearch -k mysql_config_changes -ts today

10.4 Maintenance régulière

# Chaque semaine:
# - Consulter les logs d'audit en PHP-Admin
# - Vérifier Wazuh Dashboard pour anomalies
# - Vérifier Fail2Ban (IPs bannies)
# - Faire une sauvegarde

# Chaque mois:
# - Mettre à jour le système
sudo apt update && sudo apt upgrade -y

# - Vérifier les logs
sudo journalctl -u freeradius --since "1 month ago" | grep -i error
sudo journalctl -u wazuh-manager --since "1 month ago" | grep -i error

# - Vérifier l'espace disque
df -h
du -sh /var/log/*

# - Nettoyer vieux logs (si nécessaire)
sudo journalctl --vacuum-time=30d

🔐 Sécurité - POINTS CRITIQUES

⚠️ AVANT PRODUCTION

OBLIGATOIRE:

🛡️ Hardening appliqué automatiquement

Après exécution de install_hardening.sh, le système bénéficie de:

Composant Protection appliquée
UFW Firewall actif, deny incoming par défaut
SSH Root désactivé, chiffrement moderne, max 3 tentatives
Kernel ASLR max, core dumps désactivés, IP spoofing bloqué
Fail2Ban Anti-bruteforce SSH + Apache, ban 3600s
Auditd Surveillance fichiers critiques, logs immutables
Apache Headers sécurité (CSP, XSS), modules vulnérables désactivés
MySQL Users anonymes supprimés, remote root désactivé, logs activés
PAM Politique mots de passe: 12 caract, 3 classes
Permissions Fichiers système durcis (shadow 640, ssh keys 600)

📊 Fichiers et structure

SAE501/
├── scripts/                    # Scripts d'installation
│   ├── install_mysql.sh        ⚙️ Base de données
│   ├── install_radius.sh       ⚙️ Serveur RADIUS (100% AUTONOME)
│   ├── install_php_admin.sh    ⚙️ Interface web (100% AUTONOME) ✅ v2.2.0
│   ├── install_wazuh.sh        ⚙️ Monitoring (100% AUTONOME)
│   ├── install_hardening.sh    ⚙️ Sécurité (100% AUTONOME) ⭐🆕
│   ├── generate_certificates.sh
│   └── diagnostics.sh
│
├── tests/                      # Tests automatisés ✨ NOUVEAU
│   ├── run_all_tests.sh        🧪 Suite complète de tests
│   ├── test_isolement.sh       Tests réseau spécialisés
│   ├── test_peap.sh            Tests PEAP-MSCHAPv2
│   └── test_syslog_mr100.sh    Tests monitoring MR100
│
├── radius/                     # Configuration RADIUS
│   ├── clients.conf            ✅ SEUL FICHIER REQUIS
│   └── sql/
│       ├── create_tables.sql
│       └── init_appuser.sql
│
├── docs/                       # Documentation
│   ├── analyse-ebios.md
│   ├── dossier-architecture.md
│   ├── wazuh-supervision.md
│   └── journal-de-bord.md
│
└── README.md                   # CE FICHIER

NOTE: Aucun dossier php-admin/, wazuh/ ou hardening/ nécessaire!
Toutes les configurations sont générées automatiquement par les scripts.

🛠️ Dépannage rapide

Problème Solution
Tests échoués Relancer: sudo bash tests/run_all_tests.sh
PHP-Admin inaccessible sudo systemctl restart apache2 php-fpm
❌ PHP-Admin erreur MySQL ✅ CORRIGÉ en v2.2.0: git pull && sudo bash scripts/install_php_admin.sh
Pages PHP manquantes Relancer: sudo bash scripts/install_php_admin.sh
Erreur connexion DB Vérifier MySQL: sudo systemctl status mysql
RADIUS ne démarre pas sudo freeradius -X pour debug
Wazuh Dashboard HTTP 502 Vérifier RAM: free -h - OpenSearch requiert 4GB+
UFW bloque connexions sudo ufw status verbose puis ajuster règles
Fail2Ban bans légitimes sudo fail2ban-client set sshd unbanip IP
SSH impossible après hardening Vérifier que votre user n’est pas ‘root’

📚 Commandes essentielles

Installation

# Installation modulaire (DANS L'ORDRE)
sudo bash scripts/install_mysql.sh
sudo bash scripts/install_radius.sh      # ✨ 100% AUTONOME
sudo bash scripts/install_php_admin.sh    # ✨ 100% AUTONOME ✅ v2.2.0
sudo bash scripts/install_wazuh.sh        # ✨ 100% AUTONOME (OPTIONNEL)
sudo bash scripts/install_hardening.sh    # ✨ 100% AUTONOME ⭐🆕

# Voir l'état du système
bash scripts/diagnostics.sh

# Lancer tous les tests ✨ NOUVEAU
sudo bash tests/run_all_tests.sh

Tests

# Suite complète de tests automatiques
sudo bash tests/run_all_tests.sh

# Tester l'authentification RADIUS
radtest testuser testpass localhost 0 testing123

# Tester hardening SSH
ssh -vvv user@localhost

# Tester firewall
sudo ufw status verbose
nmap -p 22,80,443,1812,1813,3306,5601 localhost

# Tester PHP-Admin connexion MySQL (bug corrigé)
curl -I http://localhost/admin
# Attendu: HTTP/1.1 200 OK

Monitoring

# Logs RADIUS
sudo tail -f /var/log/freeradius/radius.log

# Logs Fail2Ban
sudo tail -f /var/log/fail2ban.log
sudo fail2ban-client status sshd

# Logs audit
sudo ausearch -k exec -ts today
sudo ausearch -k sshd_config_changes

# Logs Apache
sudo tail -f /var/log/apache2/error.log

# Logs PHP-Admin installation (debug si problème)
sudo tail -f /var/log/sae501_php_admin_install.log

Interfaces web

# PHP-Admin
http://VOTRE_IP/admin
User: admin | Pass: Admin@Secure123!

# Wazuh Dashboard
http://VOTRE_IP:5601
User: admin | Pass: Admin@Wazuh123!

Services

# Redémarrer services
sudo systemctl restart freeradius mysql apache2
sudo systemctl restart wazuh-manager opensearch
sudo systemctl restart fail2ban ssh ufw

# Voir statut
sudo systemctl status freeradius
sudo systemctl status fail2ban
sudo systemctl status auditd

Sauvegardes

# Sauvegarde complète
mysqldump -u root -p radius > backup.sql
tar -czf backup_wazuh.tar.gz /var/ossec/etc
tar -czf backup_hardening.tar.gz /etc/ssh /etc/ufw /etc/fail2ban

✅ Checklist finale

Installation

Sécurité

Tests

Production Critique 🏭 🆕


📄 Informations importantes


🚀 Prêt?

# Installation complète recommandée:
sudo bash scripts/install_mysql.sh
sudo bash scripts/install_radius.sh       # ✨ 100% AUTONOME
sudo bash scripts/install_php_admin.sh     # ✨ 100% AUTONOME ✅ v2.2.0
sudo bash scripts/install_hardening.sh     # ✨ 100% AUTONOME ⭐🆕

# Optionnel - Monitoring avancé:
sudo bash scripts/install_wazuh.sh        # ✨ 100% AUTONOME

# OBLIGATOIRE - Prérequis manuels (ÉTAPE 3.5):
# 1. Configurer clients.conf
# 2. Générer certificats TLS
# 3. Créer utilisateurs RADIUS

# Vérifier l'installation avec tests automatisés:
sudo bash tests/run_all_tests.sh          # ✨ NOUVEAU

# Diagnostics alternatifs:
bash scripts/diagnostics.sh

# Vérifier le hardening:
sudo ufw status verbose
sudo fail2ban-client status
sudo auditctl -l

# Accéder à PHP-Admin:
http://VOTRE_IP/admin
User: admin | Pass: Admin@Secure123!
# ✅ Connexion MySQL fonctionnelle depuis v2.2.0!

# Tester RADIUS:
radtest testuser testpass localhost 0 testing123

Le système est prêt pour la production après:

  1. ✅ Prérequis manuels (ÉTAPE 3.5)
  2. ✅ Changement mots de passe (ÉTAPE 5)
  3. ✅ Améliorations production critique (ÉTAPE 6) 🆕

💬 Support et contribution


SAE501 - Projet SAE - Sorbonne Paris Nord
Dernière mise à jour: 31 janvier 2026
Version: 4.3 - ✅ BUG FIX v2.2.0 + Tests automatisés + Prérequis production 🆕