====== 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}}