# WAF Konfiguration

> **Dokumentationshinweis:** Diese Dokumentation ist vollständig aktualisiert und stellt die aktuelle Implementierung der WAF-Konfiguration korrekt dar.

## Übersicht

Die Web Application Firewall (WAF) bietet umfangreiche Konfigurationsmöglichkeiten, um das Sicherheitsniveau und die Leistung an die Anforderungen Ihrer Anwendung anzupassen. Diese Dokumentation beschreibt die verfügbaren Konfigurationsoptionen und wie Sie diese anwenden können.

## Konfigurationsklasse

Die zentrale Klasse für die WAF-Konfiguration ist `WafConfig`. Diese Klasse enthält alle Einstellungen, die das Verhalten der WAF steuern:

```php
// Konfiguration erstellen
$config = new WafConfig(
    $enabled,
    $defaultLayerConfig,
    $globalTimeout,
    $blockingThreshold,
    $alertThreshold,
    $parallelProcessing,
    $maxParallelLayers,
    $detailedLogging,
    $metricsEnabled,
    $enabledLayers,
    $layerConfigs,
    $customSettings
);
```

## Vordefinierte Konfigurationen

Die `WafConfig`-Klasse bietet mehrere vordefinierte Konfigurationen für verschiedene Umgebungen:

### Produktionsumgebung

```php
// Produktionskonfiguration verwenden
$config = WafConfig::production();
```

Die Produktionskonfiguration aktiviert alle Sicherheitsfeatures mit strengen Einstellungen:
- Alle Schutzebenen aktiviert
- Niedrige Schwellenwerte für Blockierung
- Parallele Verarbeitung für optimale Leistung
- Detaillierte Metriken für Überwachung

### Entwicklungsumgebung

```php
// Entwicklungskonfiguration verwenden
$config = WafConfig::development();
```

Die Entwicklungskonfiguration ist weniger streng und bietet:
- Höhere Schwellenwerte für Blockierung
- Detailliertes Logging für Debugging
- Alle Schutzebenen aktiviert, aber mit weniger strengen Einstellungen

### Testumgebung

```php
// Testkonfiguration verwenden
$config = WafConfig::testing();
```

Die Testkonfiguration ist für automatisierte Tests optimiert:
- Reduzierte Timeouts
- Deaktivierte parallele Verarbeitung
- Minimales Logging

### Deaktivierte Konfiguration

```php
// WAF deaktivieren
$config = WafConfig::disabled();
```

Diese Konfiguration deaktiviert die WAF vollständig, was für bestimmte Entwicklungs- oder Diagnoseszenarien nützlich sein kann.

## Hauptkonfigurationsoptionen

### Aktivierung/Deaktivierung

```php
// WAF aktivieren
$config = $config->enable();

// WAF deaktivieren
$config = $config->disable();
```

### Timeout-Einstellungen

```php
// Globales Timeout für WAF-Verarbeitung setzen
$config = $config->withGlobalTimeout(Duration::fromMilliseconds(100));
```

### Schwellenwerte

```php
// Schwellenwert für Blockierung setzen
$config = $config->withBlockingThreshold(Percentage::fromFloat(0.75));
```

Der Blockierungsschwellenwert bestimmt, ab welchem Konfidenzwert ein Request blockiert wird. Ein höherer Wert bedeutet weniger Blockierungen (und potenziell mehr falsch negative Ergebnisse), während ein niedrigerer Wert mehr Blockierungen (und potenziell mehr falsch positive Ergebnisse) bedeutet.

## Schutzebenen-Konfiguration

Die WAF verwendet ein mehrschichtiges Schutzsystem. Jede Schutzebene kann individuell konfiguriert werden:

```php
// Schutzebene aktivieren mit benutzerdefinierter Konfiguration
$config = $config->enableLayer(
    'statistical',
    new LayerConfig(
        $enabled = true,
        $weight = 0.6,
        $threshold = Percentage::fromFloat(0.7),
        $timeout = Duration::fromMilliseconds(50)
    )
);

// Schutzebene deaktivieren
$config = $config->disableLayer('clustering');
```

### Verfügbare Schutzebenen

- **statistical**: Statistische Anomalieerkennung
- **clustering**: Clustering-basierte Anomalieerkennung
- **signature**: Signaturbasierte Erkennung bekannter Angriffsmuster
- **behavioral**: Verhaltensbasierte Anomalieerkennung
- **ratelimiting**: Ratenbegrenzung für Anfragen

## Benutzerdefinierte Einstellungen

Die WAF unterstützt benutzerdefinierte Einstellungen für spezielle Anwendungsfälle:

```php
// Benutzerdefinierte Einstellung hinzufügen
$config = $config->withCustomSetting('whitelist_ips', ['127.0.0.1', '192.168.1.1']);

// Benutzerdefinierte Einstellung abrufen
$whitelistIps = $config->getCustomSetting('whitelist_ips', []);
```

## Konfigurationsvalidierung

Die WAF-Konfiguration kann validiert werden, um sicherzustellen, dass alle Einstellungen gültig sind:

```php
// Konfiguration validieren
$validationErrors = $config->validate();

// Prüfen, ob die Konfiguration gültig ist
if (!$config->isValid()) {
    // Fehlerbehandlung
}
```

## Konfiguration in der Anwendung

### Konfigurationsdatei

Die WAF-Konfiguration kann in einer dedizierten Konfigurationsdatei definiert werden:

```php
// config/waf.php
return [
    'enabled' => true,
    'learning_mode' => false,
    'threshold' => 0.75,
    'detectors' => [
        'statistical' => true,
        'clustering' => true
    ],
    'whitelist' => [
        'ips' => ['127.0.0.1'],
        'paths' => ['/api/health']
    ]
];
```

### Laufzeitkonfiguration

Die WAF-Konfiguration kann zur Laufzeit aktualisiert werden:

```php
// WAF-Konfiguration aktualisieren
$waf->updateConfig($newConfig);
```

## Leistungsoptimierung

### Parallele Verarbeitung

Die parallele Verarbeitung kann die Leistung der WAF verbessern, insbesondere bei mehreren aktivierten Schutzebenen:

```php
// Parallele Verarbeitung aktivieren
$config = new WafConfig(
    $enabled = true,
    $defaultLayerConfig,
    $globalTimeout,
    $blockingThreshold,
    $alertThreshold,
    $parallelProcessing = true,
    $maxParallelLayers = 4,
    $detailedLogging,
    $metricsEnabled,
    $enabledLayers,
    $layerConfigs,
    $customSettings
);
```

### Caching

Die WAF unterstützt Caching für wiederholte Anfragen, um die Leistung zu verbessern:

```php
// Benutzerdefinierte Caching-Einstellungen
$config = $config->withCustomSetting('cache_ttl', 300); // 5 Minuten
$config = $config->withCustomSetting('cache_size', 1000); // 1000 Einträge
```

## Fehlerbehebung

### Logging

Detailliertes Logging kann für die Fehlerbehebung aktiviert werden:

```php
// Detailliertes Logging aktivieren
$config = new WafConfig(
    $enabled = true,
    $defaultLayerConfig,
    $globalTimeout,
    $blockingThreshold,
    $alertThreshold,
    $parallelProcessing,
    $maxParallelLayers,
    $detailedLogging = true,
    $metricsEnabled,
    $enabledLayers,
    $layerConfigs,
    $customSettings
);
```

### Metriken

Die WAF kann Metriken zur Leistung und Effektivität sammeln:

```php
// Metriken aktivieren
$config = new WafConfig(
    $enabled = true,
    $defaultLayerConfig,
    $globalTimeout,
    $blockingThreshold,
    $alertThreshold,
    $parallelProcessing,
    $maxParallelLayers,
    $detailedLogging,
    $metricsEnabled = true,
    $enabledLayers,
    $layerConfigs,
    $customSettings
);
```

## Weiterführende Informationen

- [WAF-Übersicht](index.md)
- [Machine Learning Dokumentation](machine-learning.md)
- [Sicherheitsrichtlinien](/guides/security.md)
