====== Runbook: Regole Firewall ====== **Durata:** ~10 minuti \\ **Ruolo:** Network-Admin, Security-Admin \\ **Prerequisito:** Diritti Root/Admin Controllo degli accessi al Data Gateway a livello di rete. ---- ===== Workflow ===== flowchart TD A[Start] --> B[Identificare porte] B --> C{Piattaforma?} C -->|Windows| D[Windows Firewall] C -->|Linux| E[iptables/firewalld] C -->|Cloud| F[Security Groups] D --> G[Creare regola] E --> G F --> G G --> H[Testare] H --> I{Accesso OK?} I -->|Si| J[Documentare] I -->|No| K[Modificare regola] style J fill:#e8f5e9 style K fill:#ffebee ---- ===== Porte Necessarie ===== | Porta | Protocollo | Direzione | Descrizione | |------|-----------|----------|--------------| | 443 | TCP | Entrata | HTTPS (Produzione) | | 5000 | TCP | Entrata | HTTP (solo Sviluppo) | | 9090 | TCP | Uscita | Prometheus (opzionale) | | 1433 | TCP | Uscita | SQL Server | | 5432 | TCP | Uscita | PostgreSQL | | 3306 | TCP | Uscita | MySQL | ---- ===== 1. Windows Firewall ===== **PowerShell (come Admin):** # Entrata: Permettere HTTPS New-NetFirewallRule -DisplayName "Data Gateway HTTPS" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 # Entrata: Solo da IP specifici 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" # Uscita: Permettere SQL Server New-NetFirewallRule -DisplayName "Data Gateway to SQL Server" ` -Direction Outbound -Action Allow -Protocol TCP -RemotePort 1433 # Elencare regole Get-NetFirewallRule -DisplayName "Data Gateway*" | Format-Table Name, Enabled, Direction, Action # Rimuovere regola Remove-NetFirewallRule -DisplayName "Data Gateway HTTPS" ---- ===== 2. Linux: firewalld (RHEL/CentOS) ===== # Aprire porta HTTPS sudo firewall-cmd --permanent --add-port=443/tcp # Solo da rete specifica sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="443" accept' # Applicare modifiche sudo firewall-cmd --reload # Mostrare regole sudo firewall-cmd --list-all # Rimuovere regola sudo firewall-cmd --permanent --remove-port=443/tcp sudo firewall-cmd --reload ---- ===== 3. Linux: ufw (Ubuntu/Debian) ===== # Permettere HTTPS sudo ufw allow 443/tcp # Da rete specifica sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp # Mostrare stato sudo ufw status verbose # Rimuovere regola sudo ufw delete allow 443/tcp ---- ===== 4. Linux: iptables (manuale) ===== # Permettere HTTPS sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Solo da rete specifica 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 # Salvare regole sudo iptables-save > /etc/iptables/rules.v4 # Mostrare regole sudo iptables -L -n --line-numbers # Rimuovere regola (per numero) sudo iptables -D INPUT 3 ---- ===== 5. Cloud: AWS Security Group ===== # Creare Security Group aws ec2 create-security-group \ --group-name gateway-sg \ --description "Data Gateway Security Group" \ --vpc-id vpc-12345678 # HTTPS da ovunque aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0 # HTTPS solo da 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 ===== # Creare NSG az network nsg create \ --resource-group rg-gateway \ --name gateway-nsg # Regola HTTPS 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 nel Gateway ===== Alternativa al Firewall: Filtrare nell'applicazione. **appsettings.json:** { "Security": { "AllowedIPs": [ "10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12" ] } } ---- ===== 8. Testare ===== # Locale curl https://localhost/health # Dalla rete autorizzata curl https://gateway.example.com/health # Dall'esterno (dovrebbe essere bloccato) curl --connect-timeout 5 https://gateway.example.com/health # Atteso: Connection refused o Timeout ---- ===== 9. Checklist ===== | # | Punto di verifica | v | |---|-----------|---| | 1 | Porta 443 entrata permessa | ☐ | | 2 | Porta 5000 (HTTP) bloccata | ☐ | | 3 | Solo IP necessari permessi | ☐ | | 4 | Uscita verso DB permessa | ☐ | | 5 | Testato dall'esterno | ☐ | | 6 | Regole documentate | ☐ | ---- ===== Troubleshooting ===== | Problema | Causa | Soluzione | |---------|---------|--------| | ''Connection refused'' | Porta non aperta | Aggiungere regola firewall | | ''Connection timeout'' | Firewall blocca | Verificare regola/IP sorgente | | Accesso da ovunque | Nessuna restrizione | Limitare IP sorgente | | Connessione DB fallita | Uscita bloccata | Aggiungere regola outbound | ---- ===== Best Practices ===== **Principle of Least Privilege:** * Aprire solo porte necessarie * Permettere solo IP necessari * Bloccare HTTP (5000) in produzione * Auditare regolarmente le regole ---- ===== Runbook Correlati ===== * [[.:tls-einrichten|Configurare TLS]] - Attivare HTTPS * [[..:automatisierung:kubernetes|Kubernetes]] - NetworkPolicies * [[..:monitoring:alerting|Alerting]] - Monitoraggio connessioni ---- << [[.:zertifikat-erneuern|<- Rinnovare certificato]] | [[..:start|-> Panoramica Operatore]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook firewall sicurezza rete}}