# 🛡️ Auditoría de 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)

Una herramienta profesional de auditoría en PowerShell para evaluar la efectividad del filtrado de su firewall mediante pruebas de URLs categorizadas basadas en su reputación de red.

## 📋 Índice de Contenidos

- [Visión General](#-visión-general)
- [Características](#-características)
- [Prerequisitos](#-prerequisitos)
- [Instalación](#-instalación)
- [Uso](#-uso)
- [Configuración](#-configuración)
- [Informe Generado](#-informe-generado)
- [Estructura de Datos](#-estructura-de-datos)
- [Sistema de Puntuación](#-sistema-de-puntuación)
- [Resolución de Problemas](#-resolución-de-problemas)
- [Contribuir](#-contribuir)
- [Licencia](#-licencia)

## 🎯 Visión General

Este script de PowerShell prueba la efectividad de su firewall verificando que las URLs maliciosas sean correctamente bloqueadas mientras que los sitios legítimos permanezcan accesibles. Genera un informe HTML profesional con puntuación, estadísticas y recomendaciones.

**Autor:** Hubert Cornet  
**Versión:** 1.3  
**Fecha:** 3 de septiembre de 2025

## ✨ Características

- 🔍 **Pruebas automatizadas** de cientos de URLs categorizadas
- 📊 **Puntuación inteligente** con calificaciones de A+ a F
- 📱 **Informe HTML responsive** con interfaz interactiva
- 🔧 **Soporte de proxy** con autenticación
- ⚡ **Barras de progreso en tiempo real**
- 🎨 **Visualizaciones codificadas por colores** de resultados
- 💾 **Exportación JSON** de datos en bruto
- 🌐 **Detección multi-método** de bloqueos

## 📋 Prerequisitos

### Requisitos del Sistema
- Windows 10/11 o Windows Server 2016+
- PowerShell 5.1 o superior
- Conexión a Internet activa
- Permisos de escritura en el directorio del script

### Módulos de PowerShell (instalados automáticamente)
- `PSWriteHTML`
- `PSWriteColor`

### Archivos Requeridos
- `file-nrs.json` - Base de datos de URLs categorizadas

## 🚀 Instalación

1. **Descargue el script** en una carpeta dedicada
2. **Descargue el archivo JSON** desde:
   ```
   https://gitea.tips-of-mine.com/Tips-Of-Mine/Powershell/src/branch/main/cybersecurity/Network%20Reputation%20Service/file-nrs.json
   ```
3. **Coloque ambos archivos** en el mismo directorio

## 💻 Uso

### Uso Básico
```powershell
.\AuditFirewall.ps1
```

### Con Proxy
```powershell
.\AuditFirewall.ps1 -ProxyUrl "http://proxy.empresa.com:8080"
```

### Con Autenticación de Proxy
```powershell
.\AuditFirewall.ps1 -ProxyUrl "http://proxy.empresa.com:8080" -ProxyUseAuthentication
```

### Con Timeout Personalizado
```powershell
.\AuditFirewall.ps1 -TimeoutSeconds 15
```

## ⚙️ Configuración

### Parámetros Disponibles

| Parámetro | Tipo | Descripción | Por Defecto |
|-----------|------|-------------|-------------|
| `ProxyUrl` | String | URL del proxy de red | Ninguno |
| `ProxyUseAuthentication` | Switch | Activar autenticación de proxy | False |
| `TimeoutSeconds` | Integer | Timeout por URL | 10 |

### Personalización de Palabras Clave de Bloqueo
Modifique la variable `$BlockKeywords` en el script:
```powershell
$BlockKeywords = @("sitio bloqueado", "acceso denegado", "filtrado web", "Access Denied", "Site Blocked")
```

## 📊 Informe Generado

El script genera automáticamente:

### 📁 Estructura de Archivos de Salida
```
Rapports/
└── [Fecha y Hora]/
    ├── Audit_Firewall_Report.html    # Informe principal
    └── Results.json                   # Datos en bruto
```

### 🎨 Contenido del Informe HTML
- **Resumen Ejecutivo**: Puntuación global y estadísticas clave
- **Tabla de Puntuaciones**: Rendimiento por categoría
- **Detalles Interactivos**: Pruebas individuales por URL
- **Escala de Calificación**: Explicación del sistema de puntuación

## 📁 Estructura de Datos

### Formato de `file-nrs.json`
```json
{
  "categorie": [
    {
      "id": "malware",
      "nom": "Malware",
      "description": "Sitios que distribuyen software malicioso",
      "urls": [
        {
          "url": "http://ejemplo-malware.com",
          "reputation": "malicious",
          "expected_action": "block"
        },
        {
          "url": "https://sitio-legitimo.com",
          "reputation": "safe",
          "expected_action": "allow"
        }
      ]
    }
  ]
}
```

### Acciones Esperadas
- `"block"`: La URL debe ser bloqueada por el firewall
- `"allow"`: La URL debe permanecer accesible

## 📈 Sistema de Puntuación

### Escala de Calificación

| Calificación | Puntuación | Interpretación |
|--------------|------------|---------------|
| **A+** | 95-100% | 🟢 Excelente / Perfecto |
| **A** | 90-95% | 🟢 Muy buen nivel de filtrado |
| **B+** | 85-90% | 🟡 Muy bueno |
| **B** | 80-85% | 🟡 Bueno, algunos ajustes necesarios |
| **C+** | 75-80% | 🟠 Bastante bueno |
| **C** | 70-75% | 🟠 Promedio, brechas significativas |
| **D+** | 65-70% | 🔴 Aceptable |
| **D** | 60-65% | 🔴 Débil, filtrado ineficaz |
| **E+** | 55-60% | 🔴 Muy débil |
| **E** | 50-55% | 🔴 Insuficiente |
| **F+** | 45-50% | ⚫ Crítico |
| **F** | 0-45% | ⚫ Acción inmediata requerida |

### Método de Cálculo
```
Puntuación = (URLs correctamente filtradas / Total URLs probadas) × 100
```

## 🔍 Métodos de Detección

### Cómo el script detecta bloqueos:
1. **Análisis de Contenido**: Búsqueda de palabras clave de páginas de bloqueo
2. **Timeouts de Red**: Solicitudes que expiran (probable bloqueo de firewall)
3. **Errores de Conexión**: Incapacidad para alcanzar el servidor
4. **Códigos de Estado HTTP**: Análisis de respuestas del servidor

### Encabezados HTTP Simulados:
El script simula un navegador moderno para evitar detección:
```
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
Accept: text/html,application/xhtml+xml,application/xml...
Accept-Language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7
```

## 🔧 Resolución de Problemas

### Problemas Comunes

#### ❌ "¡El archivo 'file-nrs.json' no existe!"
**Solución:** Descargue el archivo JSON del enlace proporcionado y colóquelo en la misma carpeta que el script.

#### ❌ "No se puede instalar el módulo X"
**Solución:** Ejecute PowerShell como administrador o use:
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

#### ❌ Timeouts Frecuentes
**Soluciones:**
- Incremente el valor de `-TimeoutSeconds`
- Verifique su conexión de red
- Configure correctamente los ajustes de proxy

#### ❌ Falsos Positivos/Negativos
**Soluciones:**
- Actualice las palabras clave de bloqueo
- Verifique la configuración del firewall
- Adapte el archivo JSON a su entorno

## 🏢 Casos de Uso Recomendados

### 📅 Uso Periódico
- **Auditoría mensual** de efectividad del firewall
- **Validación** después de actualizaciones de reglas
- **Benchmarking** entre soluciones de seguridad

### 👥 Reportes Gerenciales
- **Dashboards** para gestión de TI
- **KPIs de seguridad** medibles
- **Justificación de inversión** en seguridad

### 🔧 Pruebas de Configuración
- **Validación** después de cambios de red
- **Pruebas de regresión** de reglas de firewall
- **Auditoría de cumplimiento** de seguridad

## ⚠️ Limitaciones Técnicas

### Puntos de Atención:
- **Pruebas Secuenciales**: Sin paralelización (puede ser lento)
- **Detección Básica**: Se basa en palabras clave predefinidas
- **Falsos Positivos**: Sitios legítimos temporalmente inaccesibles
- **Seguridad**: El script realmente contacta las URLs probadas

### Mejores Prácticas:
1. 🕐 Ejecutar durante horas de menor tráfico
2. 📊 Analizar resultados en contexto
3. 🔄 Mantener actualizado el archivo JSON
4. 📈 Seguir la evolución de las puntuaciones a lo largo del tiempo

## 🤝 Contribuir

### Para Contribuir:
1. Haga fork del proyecto
2. Cree su rama de característica
3. Haga commit de sus cambios
4. Push a la rama
5. Abra un Pull Request

### Ideas de Mejora:
- [ ] Paralelización de pruebas para mejor rendimiento
- [ ] Detección más sofisticada de páginas de bloqueo
- [ ] Soporte de bases de datos de reputación externas
- [ ] Interfaz gráfica para configuración
- [ ] Integración con APIs de threat intelligence

## 🎯 Hoja de Ruta

### Versión 1.4 (planificada)
- [ ] Pruebas paralelas para mejor rendimiento
- [ ] Soporte de certificados SSL personalizados
- [ ] Notificaciones por email de resultados

### Versión 2.0 (futuro)
- [ ] Interfaz web para configuración
- [ ] Integración con soluciones SIEM
- [ ] API REST para automatización

## 📞 Soporte

Para obtener ayuda o reportar problemas:
- 📧 Contacte al autor: Hubert Cornet
- 🐛 Abra un issue en el repositorio del proyecto
- 📚 Consulte la documentación técnica

## 📄 Licencia

Este proyecto está bajo licencia MIT. Ver el archivo `LICENSE` para más detalles.

---

**⭐ ¡Si este script le fue útil, no dude en darle una estrella!**

---

*Última actualización: 3 de septiembre de 2025*