Obelica Docs
Sicurezza

Firewall

DigitalOcean Cloud Firewall, UFW e superficie esposta

Livelli

La protezione rete ha due livelli:

  1. DigitalOcean Cloud Firewall.
  2. UFW sul droplet.

Docker/Traefik gestiscono poi l'esposizione applicativa.

DigitalOcean Cloud Firewall

Regole desiderate:

PortaSorgente
22/tcpsolo IP fidati
80/tcppubblico
443/tcppubblico
3333/tcpnessuna esposizione pubblica
3334/tcpnessuna esposizione pubblica
8080/tcpnessuna esposizione pubblica
5432/tcpnessuna 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):

DirezioneProtocolloPortaSorgente/Destinazione
inboundtcp22solo 195.32.113.30/32 (workstation)
inboundtcp800.0.0.0/0, ::/0
inboundtcp4430.0.0.0/0, ::/0
outboundicmp/tcp/udptutteaperte

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,InboundRules

UFW

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 -T

Nello 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 numbered

Check host

Comando non privilegiato utile:

ss -tulpen

Risultato atteso:

  • 80/443 pubblici;
  • 22 pubblico solo perche' filtrato prima dal Cloud Firewall;
  • 3333/3334/8080 solo su 127.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.

On this page