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