====== Runbook: Firewall Rules ====== **Duration:** ~10 minutes \\ **Role:** Network Admin, Security Admin \\ **Prerequisite:** Root/Admin rights Access control for the Data Gateway at network level. ---- ===== Workflow ===== flowchart TD A[Start] --> B[Identify ports] B --> C{Platform?} C -->|Windows| D[Windows Firewall] C -->|Linux| E[iptables/firewalld] C -->|Cloud| F[Security Groups] D --> G[Create rule] E --> G F --> G G --> H[Test] H --> I{Access OK?} I -->|Yes| J[Document] I -->|No| K[Adjust rule] style J fill:#e8f5e9 style K fill:#ffebee ---- ===== Required Ports ===== | Port | Protocol | Direction | Description | |------|----------|-----------|-------------| | 443 | TCP | Inbound | HTTPS (production) | | 5000 | TCP | Inbound | HTTP (development only) | | 9090 | TCP | Outbound | Prometheus (optional) | | 1433 | TCP | Outbound | SQL Server | | 5432 | TCP | Outbound | PostgreSQL | | 3306 | TCP | Outbound | MySQL | ---- ===== 1. Windows Firewall ===== **PowerShell (as Admin):** # Inbound: Allow HTTPS New-NetFirewallRule -DisplayName "Data Gateway HTTPS" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 # Inbound: Only from specific 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" # Outbound: Allow SQL Server New-NetFirewallRule -DisplayName "Data Gateway to SQL Server" ` -Direction Outbound -Action Allow -Protocol TCP -RemotePort 1433 # List rules Get-NetFirewallRule -DisplayName "Data Gateway*" | Format-Table Name, Enabled, Direction, Action # Remove rule Remove-NetFirewallRule -DisplayName "Data Gateway HTTPS" ---- ===== 2. Linux: firewalld (RHEL/CentOS) ===== # Open HTTPS port sudo firewall-cmd --permanent --add-port=443/tcp # Only from specific network sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="443" accept' # Apply changes sudo firewall-cmd --reload # Show rules sudo firewall-cmd --list-all # Remove rule sudo firewall-cmd --permanent --remove-port=443/tcp sudo firewall-cmd --reload ---- ===== 3. Linux: ufw (Ubuntu/Debian) ===== # Allow HTTPS sudo ufw allow 443/tcp # From specific network sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp # Show status sudo ufw status verbose # Remove rule sudo ufw delete allow 443/tcp ---- ===== 4. Linux: iptables (manual) ===== # Allow HTTPS sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Only from specific network 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 # Save rules sudo iptables-save > /etc/iptables/rules.v4 # Show rules sudo iptables -L -n --line-numbers # Remove rule (by number) sudo iptables -D INPUT 3 ---- ===== 5. Cloud: AWS Security Group ===== # Create Security Group aws ec2 create-security-group \ --group-name gateway-sg \ --description "Data Gateway Security Group" \ --vpc-id vpc-12345678 # HTTPS from anywhere aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0 # HTTPS only from 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 ===== # Create NSG az network nsg create \ --resource-group rg-gateway \ --name gateway-nsg # HTTPS rule 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 in Gateway ===== Alternative to firewall: Filter in application. **appsettings.json:** { "Security": { "AllowedIPs": [ "10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12" ] } } ---- ===== 8. Test ===== # Local curl https://localhost/health # From allowed network curl https://gateway.example.com/health # From outside (should be blocked) curl --connect-timeout 5 https://gateway.example.com/health # Expected: Connection refused or Timeout ---- ===== 9. Checklist ===== | # | Check | Done | |---|-------|------| | 1 | Port 443 inbound allowed | [ ] | | 2 | Port 5000 (HTTP) blocked | [ ] | | 3 | Only necessary IPs allowed | [ ] | | 4 | Outbound to DB allowed | [ ] | | 5 | Tested from outside | [ ] | | 6 | Rules documented | [ ] | ---- ===== Troubleshooting ===== | Problem | Cause | Solution | |---------|-------|----------| | ''Connection refused'' | Port not open | Add firewall rule | | ''Connection timeout'' | Firewall blocking | Check rule/source IP | | Access from everywhere | No restriction | Limit source IP | | DB connection failed | Outbound blocked | Add outbound rule | ---- ===== Best Practices ===== **Principle of Least Privilege:** * Only open necessary ports * Only allow necessary IPs * Block HTTP (5000) in production * Regularly audit rules ---- ===== Related Runbooks ===== * [[.:tls-einrichten|Set Up TLS]] - Enable HTTPS * [[..:automatisierung:kubernetes|Kubernetes]] - NetworkPolicies * [[..:monitoring:alerting|Alerting]] - Connection monitoring ---- << [[.:zertifikat-erneuern|<- Renew Certificate]] | [[..:start|-> Operator Overview]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook firewall sicherheit netzwerk}}