# 🛡️ Audit Firewall - Network Reputation Service

![Version](https://img.shields.io/badge/version-1.3-blue.svg)
![PowerShell](https://img.shields.io/badge/PowerShell-5.1+-blue.svg)
![License](https://img.shields.io/badge/license-MIT-green.svg)

Un outil d'audit PowerShell professionnel pour évaluer l'efficacité du filtrage de votre firewall en testant des URLs catégorisées selon leur réputation réseau.

## 📋 Table des matières

- [Aperçu](#-aperçu)
- [Fonctionnalités](#-fonctionnalités)
- [Prérequis](#-prérequis)
- [Installation](#-installation)
- [Utilisation](#-utilisation)
- [Configuration](#-configuration)
- [Rapport généré](#-rapport-généré)
- [Structure des données](#-structure-des-données)
- [Système de scoring](#-système-de-scoring)
- [Dépannage](#-dépannage)
- [Contribution](#-contribution)
- [Licence](#-licence)

## 🎯 Aperçu

Ce script PowerShell teste l'efficacité de votre firewall en vérifiant si des URLs malveillantes sont correctement bloquées et si des sites légitimes restent accessibles. Il génère un rapport HTML professionnel avec scoring, statistiques et recommandations.

**Auteur :** Hubert Cornet  
**Version :** 1.3  
**Date :** 03/09/2025

## ✨ Fonctionnalités

- 🔍 **Test automatisé** de centaines d'URLs catégorisées
- 📊 **Scoring intelligent** avec notes de A+ à F
- 📱 **Rapport HTML responsive** avec interface interactive
- 🔧 **Support des proxies** avec authentification
- ⚡ **Barres de progression** en temps réel
- 🎨 **Visualisations colorées** des résultats
- 💾 **Export JSON** des données brutes
- 🌐 **Détection multi-méthodes** des blocages

## 📋 Prérequis

### Système requis
- Windows 10/11 ou Windows Server 2016+
- PowerShell 5.1 ou supérieur
- Connexion Internet active
- Droits d'écriture dans le répertoire du script

### Modules PowerShell (installés automatiquement)
- `PSWriteHTML`
- `PSWriteColor`

### Fichiers requis
- `file-nrs.json` - Base de données des URLs catégorisées

## 🚀 Installation

1. **Téléchargez le script** dans un dossier dédié
2. **Téléchargez le fichier JSON** depuis :
   ```
   https://gitea.tips-of-mine.com/Tips-Of-Mine/Powershell/src/branch/main/cybersecurity/Network%20Reputation%20Service/file-nrs.json
   ```
3. **Placez les deux fichiers** dans le même répertoire

## 💻 Utilisation

### Utilisation basique
```powershell
.\AuditFirewall.ps1
```

### Avec proxy
```powershell
.\AuditFirewall.ps1 -ProxyUrl "http://proxy.entreprise.com:8080"
```

### Avec authentification proxy
```powershell
.\AuditFirewall.ps1 -ProxyUrl "http://proxy.entreprise.com:8080" -ProxyUseAuthentication
```

### Avec timeout personnalisé
```powershell
.\AuditFirewall.ps1 -TimeoutSeconds 15
```

## ⚙️ Configuration

### Paramètres disponibles

| Paramètre | Type | Description | Défaut |
|-----------|------|-------------|---------|
| `ProxyUrl` | String | URL du proxy réseau | Aucun |
| `ProxyUseAuthentication` | Switch | Active l'auth proxy | False |
| `TimeoutSeconds` | Integer | Délai d'attente par URL | 10 |

### Personnalisation des mots-clés de blocage
Modifiez la variable `$BlockKeywords` dans le script :
```powershell
$BlockKeywords = @("site bloqué", "access denied", "filtrage web", "Access Denied", "Site Blocked")
```

## 📊 Rapport généré

Le script génère automatiquement :

### 📁 Structure des fichiers de sortie
```
Rapports/
└── [Date et Heure]/
    ├── Audit_Firewall_Report.html    # Rapport principal
    └── Results.json                   # Données brutes
```

### 🎨 Contenu du rapport HTML
- **Résumé exécutif** : Score global et statistiques clés
- **Tableau des scores** : Performance par catégorie
- **Détails interactifs** : Tests individuels par URL
- **Barème de notation** : Explication du système de scoring

## 📁 Structure des données

### Format du fichier `file-nrs.json`
```json
{
  "categorie": [
    {
      "id": "malware",
      "nom": "Malware",
      "description": "Sites distribuant des logiciels malveillants",
      "urls": [
        {
          "url": "http://example-malware.com",
          "reputation": "malicious",
          "expected_action": "block"
        },
        {
          "url": "https://legitimate-site.com",
          "reputation": "safe",
          "expected_action": "allow"
        }
      ]
    }
  ]
}
```

### Actions attendues
- `"block"` : L'URL doit être bloquée par le firewall
- `"allow"` : L'URL doit rester accessible

## 📈 Système de scoring

### Barème de notation

| Note | Score | Interprétation |
|------|--------|---------------|
| **A+** | 95-100% | 🟢 Excellent / Parfait |
| **A** | 90-95% | 🟢 Très bon niveau de filtrage |
| **B+** | 85-90% | 🟡 Très bon |
| **B** | 80-85% | 🟡 Bon, quelques ajustements |
| **C+** | 75-80% | 🟠 Assez bon |
| **C** | 70-75% | 🟠 Moyen, lacunes importantes |
| **D+** | 65-70% | 🔴 Passable |
| **D** | 60-65% | 🔴 Faible, filtrage inefficace |
| **E+** | 55-60% | 🔴 Très faible |
| **E** | 50-55% | 🔴 Insuffisant |
| **F+** | 45-50% | ⚫ Critique |
| **F** | 0-45% | ⚫ Action immédiate requise |

### Méthode de calcul
```
Score = (URLs correctement filtrées / Total URLs testées) × 100
```

## 🔍 Méthodes de détection

### Comment le script détecte un blocage :
1. **Analyse du contenu** : Recherche de mots-clés de pages de blocage
2. **Timeouts réseau** : Requêtes qui expirent (probable blocage firewall)
3. **Erreurs de connexion** : Impossibilité d'atteindre le serveur
4. **Codes de statut HTTP** : Analyse des réponses serveur

### Headers HTTP simulés :
Le script simule un navigateur moderne pour éviter la détection :
```
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
Accept: text/html,application/xhtml+xml,application/xml...
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
```

## 🔧 Dépannage

### Problèmes courants

#### ❌ "Le fichier 'file-nrs.json' n'existe pas!"
**Solution :** Téléchargez le fichier JSON depuis le lien fourni et placez-le dans le même dossier que le script.

#### ❌ "Impossible d'installer le module X"
**Solution :** Exécutez PowerShell en tant qu'administrateur ou utilisez :
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

#### ❌ Timeouts fréquents
**Solutions :**
- Augmentez la valeur de `-TimeoutSeconds`
- Vérifiez votre connexion réseau
- Configurez correctement les paramètres proxy

#### ❌ Faux positifs/négatifs
**Solutions :**
- Mettez à jour les mots-clés de blocage
- Vérifiez la configuration de votre firewall
- Adaptez le fichier JSON à votre environnement

## 🏢 Cas d'usage recommandés

### 📅 Utilisation périodique
- **Audit mensuel** de l'efficacité du firewall
- **Validation** après mise à jour des règles
- **Benchmarking** entre solutions de sécurité

### 👥 Reporting managérial
- **Tableaux de bord** pour la direction IT
- **KPIs de sécurité** mesurables
- **Justification** des investissements sécurité

### 🔧 Tests de configuration
- **Validation** après changements réseau
- **Tests de régression** des règles firewall
- **Audit de conformité** sécurité

## ⚠️ Limitations techniques

### Points d'attention :
- **Tests séquentiels** : Pas de parallélisation (peut être lent)
- **Détection basique** : Repose sur des mots-clés prédéfinis
- **Faux positifs** : Sites légitimes temporairement inaccessibles
- **Sécurité** : Le script contacte réellement les URLs testées

### Bonnes pratiques :
1. 🕐 Exécuter en heures creuses
2. 📊 Analyser les résultats dans le contexte
3. 🔄 Maintenir à jour le fichier JSON
4. 📈 Suivre l'évolution des scores dans le temps

## 🤝 Contribution

### Pour contribuer :
1. Fork le projet
2. Créez votre branche feature
3. Committez vos changements
4. Poussez vers la branche
5. Ouvrez une Pull Request

### Idées d'améliorations :
- [ ] Parallélisation des tests pour améliorer les performances
- [ ] Détection plus sophistiquée des pages de blocage
- [ ] Support de bases de données de réputations externes
- [ ] Interface graphique pour la configuration
- [ ] Intégration avec des APIs de threat intelligence

## 🎯 Roadmap

### Version 1.4 (prévue)
- [ ] Tests parallèles pour améliorer les performances
- [ ] Support des certificats SSL personnalisés
- [ ] Notifications par email des résultats

### Version 2.0 (future)
- [ ] Interface web pour la configuration
- [ ] Intégration avec des solutions SIEM
- [ ] API REST pour l'automatisation

## 📞 Support

Pour obtenir de l'aide ou signaler des problèmes :
- 📧 Contactez l'auteur : Hubert Cornet
- 🐛 Ouvrez une issue sur le dépôt du projet
- 📚 Consultez la documentation technique

## 📄 Licence

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

---

**⭐ Si ce script vous a été utile, n'hésitez pas à lui donner une étoile !**

---

*Dernière mise à jour : 03 septembre 2025*