====== Runbook: Firewall-Regeln ====== **Dauer:** ~10 Minuten \\ **Rolle:** Network-Admin, Security-Admin \\ **Voraussetzung:** Root/Admin-Rechte Zugriffskontrolle für das Data Gateway auf Netzwerkebene. ---- ===== Workflow ===== flowchart TD A[Start] --> B[Ports identifizieren] B --> C{Plattform?} C -->|Windows| D[Windows Firewall] C -->|Linux| E[iptables/firewalld] C -->|Cloud| F[Security Groups] D --> G[Regel erstellen] E --> G F --> G G --> H[Testen] H --> I{Zugriff OK?} I -->|Ja| J[Dokumentieren] I -->|Nein| K[Regel anpassen] style J fill:#e8f5e9 style K fill:#ffebee ---- ===== Benötigte Ports ===== | Port | Protokoll | Richtung | Beschreibung | |------|-----------|----------|--------------| | 443 | TCP | Eingehend | HTTPS (Produktion) | | 5000 | TCP | Eingehend | HTTP (nur Entwicklung) | | 9090 | TCP | Ausgehend | Prometheus (optional) | | 1433 | TCP | Ausgehend | SQL Server | | 5432 | TCP | Ausgehend | PostgreSQL | | 3306 | TCP | Ausgehend | MySQL | ---- ===== 1. Windows Firewall ===== **PowerShell (als Admin):** # Eingehend: HTTPS erlauben New-NetFirewallRule -DisplayName "Data Gateway HTTPS" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 # Eingehend: Nur von bestimmten IPs New-NetFirewallRule -DisplayName "Data Gateway HTTPS Restricted" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 ` -RemoteAddress "10.0.0.0/8","192.168.0.0/16" # Ausgehend: SQL Server erlauben New-NetFirewallRule -DisplayName "Data Gateway to SQL Server" ` -Direction Outbound -Action Allow -Protocol TCP -RemotePort 1433 # Regeln auflisten Get-NetFirewallRule -DisplayName "Data Gateway*" | Format-Table Name, Enabled, Direction, Action # Regel entfernen Remove-NetFirewallRule -DisplayName "Data Gateway HTTPS" ---- ===== 2. Linux: firewalld (RHEL/CentOS) ===== # HTTPS Port öffnen sudo firewall-cmd --permanent --add-port=443/tcp # Nur aus bestimmtem Netz sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="443" accept' # Änderungen anwenden sudo firewall-cmd --reload # Regeln anzeigen sudo firewall-cmd --list-all # Regel entfernen sudo firewall-cmd --permanent --remove-port=443/tcp sudo firewall-cmd --reload ---- ===== 3. Linux: ufw (Ubuntu/Debian) ===== # HTTPS erlauben sudo ufw allow 443/tcp # Von bestimmtem Netz sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp # Status anzeigen sudo ufw status verbose # Regel entfernen sudo ufw delete allow 443/tcp ---- ===== 4. Linux: iptables (manuell) ===== # HTTPS erlauben sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Nur von bestimmtem Netz sudo iptables -A INPUT -p tcp --dport 443 -s 10.0.0.0/8 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j DROP # Regeln speichern sudo iptables-save > /etc/iptables/rules.v4 # Regeln anzeigen sudo iptables -L -n --line-numbers # Regel entfernen (nach Nummer) sudo iptables -D INPUT 3 ---- ===== 5. Cloud: AWS Security Group ===== # Security Group erstellen aws ec2 create-security-group \ --group-name gateway-sg \ --description "Data Gateway Security Group" \ --vpc-id vpc-12345678 # HTTPS von überall aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0 # HTTPS nur aus VPN aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 10.0.0.0/8 ---- ===== 6. Cloud: Azure NSG ===== # NSG erstellen az network nsg create \ --resource-group rg-gateway \ --name gateway-nsg # HTTPS-Regel az network nsg rule create \ --resource-group rg-gateway \ --nsg-name gateway-nsg \ --name AllowHTTPS \ --priority 100 \ --direction Inbound \ --access Allow \ --protocol Tcp \ --destination-port-ranges 443 \ --source-address-prefixes '10.0.0.0/8' ---- ===== 7. IP-Whitelist im Gateway ===== Alternative zur Firewall: In der Anwendung filtern. **appsettings.json:** { "Security": { "AllowedIPs": [ "10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12" ] } } ---- ===== 8. Testen ===== # Lokal curl https://localhost/health # Vom erlaubten Netz curl https://gateway.example.com/health # Von außen (sollte blockiert sein) curl --connect-timeout 5 https://gateway.example.com/health # Erwartung: Connection refused oder Timeout ---- ===== 9. Checkliste ===== | # | Prüfpunkt | ✓ | |---|-----------|---| | 1 | Port 443 eingehend erlaubt | ☐ | | 2 | Port 5000 (HTTP) blockiert | ☐ | | 3 | Nur notwendige IPs erlaubt | ☐ | | 4 | Ausgehend zu DB erlaubt | ☐ | | 5 | Von außen getestet | ☐ | | 6 | Regeln dokumentiert | ☐ | ---- ===== Troubleshooting ===== | Problem | Ursache | Lösung | |---------|---------|--------| | ''Connection refused'' | Port nicht offen | Firewall-Regel hinzufügen | | ''Connection timeout'' | Firewall blockiert | Regel/Source-IP prüfen | | Zugriff von überall | Keine Einschränkung | Source-IP limitieren | | DB-Verbindung fehlgeschlagen | Ausgehend blockiert | Outbound-Regel hinzufügen | ---- ===== Best Practices ===== **Principle of Least Privilege:** * Nur notwendige Ports öffnen * Nur notwendige IPs erlauben * HTTP (5000) in Produktion blockieren * Regelmäßig Regeln auditieren ---- ===== Verwandte Runbooks ===== * [[.:tls-einrichten|TLS einrichten]] – HTTPS aktivieren * [[..:automatisierung:kubernetes|Kubernetes]] – NetworkPolicies * [[..:monitoring:alerting|Alerting]] – Verbindungs-Monitoring ---- << [[.:zertifikat-erneuern|← Zertifikat erneuern]] | [[..:start|→ Operator-Übersicht]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook firewall sicherheit netzwerk}}