Firewall
DigitalOcean Cloud Firewall, UFW e superficie esposta
Livelli
La protezione rete ha due livelli:
- DigitalOcean Cloud Firewall.
- UFW sul droplet.
Docker/Traefik gestiscono poi l'esposizione applicativa.
DigitalOcean Cloud Firewall
Regole desiderate:
| Porta | Sorgente |
|---|---|
22/tcp | solo IP fidati |
80/tcp | pubblico |
443/tcp | pubblico |
3333/tcp | nessuna esposizione pubblica |
3334/tcp | nessuna esposizione pubblica |
8080/tcp | nessuna esposizione pubblica |
5432/tcp | nessuna esposizione pubblica |
Questa e' una verifica esterna: va controllata nel pannello DigitalOcean o via API.
Stato verificato 2026-07-03 (via doctl da workstation)
Prima verifica probante dopo tre audit che la richiedevano. Firewall
obelica-firewall (ID e340c6d8-5123-4a0f-bfe0-9d834a7211de), status
succeeded, agganciato al droplet obelica-prod (ID 577881242):
| Direzione | Protocollo | Porta | Sorgente/Destinazione |
|---|---|---|---|
| inbound | tcp | 22 | solo 195.32.113.30/32 (workstation) |
| inbound | tcp | 80 | 0.0.0.0/0, ::/0 |
| inbound | tcp | 443 | 0.0.0.0/0, ::/0 |
| outbound | icmp/tcp/udp | tutte | aperte |
Conforme alle regole desiderate: nessuna porta amministrativa esposta.
Attenzione operativa: l'unico IP ammesso su SSH e' la workstation. Se l'IP di casa cambia, l'accesso SSH va ripristinato dalla console web DigitalOcean aggiornando la regola.
Comando di verifica ripetibile (richiede doctl autenticato):
doctl compute firewall list --format ID,Name,Status,InboundRulesUFW
ufw risulta active. Dal 2026-07-03 le regole sono leggibili dai check non
interattivi grazie a una regola sudoers mirata:
/etc/sudoers.d/obelica-health
bona ALL=(root) NOPASSWD: /usr/sbin/ufw status numbered,
/usr/bin/fail2ban-client status, /usr/bin/fail2ban-client status sshd,
/usr/sbin/sshd -TNello stesso intervento e' stata corretta as_root() in
infra/scripts/lib/common.sh: il vecchio gate sudo -n true richiedeva un
NOPASSWD generico; ora usa sudo -n -l "$@" e funziona con regole mirate.
Risultato: health.sh 13 OK / 0 UNKNOWN, check-security.sh senza UNKNOWN.
Comando di audit:
sudo ufw status numberedCheck host
Comando non privilegiato utile:
ss -tulpenRisultato atteso:
80/443pubblici;22pubblico solo perche' filtrato prima dal Cloud Firewall;3333/3334/8080solo su127.0.0.1;- nessun Postgres pubblicato sull'host.
Regola operativa
Qualunque nuova porta pubblica fuori da Traefik richiede:
- motivo scritto;
- backup prima del cambio;
- aggiornamento docs;
- verifica firewall;
- piano rollback.