AlmaLinux - Command Line - Cybersecurity - Linux

firewall-cmd: Configurare il Firewall su Linux con facilità

Gestire la sicurezza di un server Linux può sembrare complesso, ma strumenti come firewall-cmd (il client per il demone firewalld) rendono la configurazione delle regole di rete accessibile anche ai meno esperti. Una delle caratteristiche importanti di firewalld è che permette di applicare modifiche senza interrompere le connessioni attive.

Vedremo i comandi essenziali validi su distribuzioni come AlmaLinux, Rocky Linux, RHEL, CentOS o Fedora.

Il concetto di Zone

firewalld organizza il traffico in zone, ovvero set di regole predefiniti basati sul livello di fiducia della rete a cui sei connesso e sono memorizzate in /usr/lib/firewalld/zones/

  • drop: livello di fiducia minimo. Tutti i pacchetti in entrata vengono scartati senza risposta
  • block: simile a drop, ma il mittente riceve un messaggio di errore (ICMP host-prohibited)
  • public: la zona predefinita per la maggior parte dei sistemi. Si presuppone che la rete sia insicura e solo i servizi selezionati sono ammessi
  • external: usata per i router. Abilita il mascheramento IP (NAT) per permettere a una rete locale di uscire su internet
  • dmz: per server accessibili pubblicamente ma isolati dal resto della rete interna
  • work / home: per reti in cui ti fidi della maggior parte degli altri utenti. Permettono più servizi rispetto a public
  • internal: per reti private interne
  • trusted: fiducia massima, tutto il traffico in entrata è accettato

Verifica dello stato e comandi di base

Per verificare che il servizio sia attivo si utilizza il comando

$ sudo systemctl status firewalld

  firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
     Active: active (running) since Sat 2026-02-07 14:07:46 CET; 5s ago
       Docs: man:firewalld(1)
    Process: 70382 ExecStartPost=/usr/bin/firewall-cmd --state (code=exited, status=0/SUCCESS)
   Main PID: 70381 (firewalld)
      Tasks: 2 (limit: 23112)
     Memory: 27.3M (peak: 48.7M)
        CPU: 489ms

Per verificare la zona predefinita e quella attiva

$ sudo firewall-cmd --get-default-zone

public

$ sudo firewall-cmd --get-active-zones

public
  interfaces: ens33

Di seguito vedremo alcuni comandi per configurare firewalld. Nei comandi utilizzeremo sempre il flag –permanent che permette di mantenere la configurazione anche a seguito del riavvio del sistema. Togliendolo le regole sono temporanee e verranno perse a seguito di un riavvio.

Possiamo abilitare il traffico per un servizio specifico (es. SSH, HTTP)

$ sudo firewall-cmd --permanent --add-service=http

o per una singola porta TCP / UDP

$ sudo firewall-cmd --permanent --add-port=8080/tcp

o per un intervallo di porte

$ sudo firewall-cmd --permanent --add-port=4000-4005/udp

Per rendere attive le regole che abbiamo impostato dobbiamo ricaricare la configurazione

$ sudo firewall-cmd --reload

Per visualizzare le regole attive con firewall-cmd, il comando principale è –list-all

$ sudo firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: cockpit dhcpv6-client http ssh
  ports: 8080/tcp 4000-4005/udp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

in questo modo vengono visualizzate le configurazioni della zona attiva. Possiamo specificare nel comando una zona precisa (ad esempio “work”)

$ sudo firewall-cmd --zone=work --list-all

o tutte le zone contemporaneamente

$ sudo firewall-cmd --list-all-zones

Se invece, volessimo revocare l’accesso a un servizio

$ sudo firewall-cmd --permanent --remove-service=http

o ad una porta

$ sudo firewall-cmd --permanent --remove-port=8080/tcp

La gestione dei log

Per impostazione predefinita, firewalld non registra log delle azioni effettuate sul traffico. Possiamo attivare questa funzione con il comando

$ sudo firewall-cmd --set-log-denied=all

in questo caso avremo tutte le azioni di blocco inviate al kernel e si possono visualizzare tramite journalctl o dmesg

# Per vedere solo i log di firewalld e seguirli in tempo reale

$ sudo journalctl -u firewalld -f

# Per filtrare specificamente i pacchetti rifiutati

$ sudo journalctl -x -f | grep -i -E 'REJECT|DROP'

Conclusione

Imparare ad utilizzare firewall-cmd è un passo fondamentale per garantire la sicurezza del tuo sistema operativo. Grazie alla sua struttura basata su zone e alla capacità di applicare modifiche in tempo reale senza interruzioni, questo strumento rappresenta il perfetto equilibrio tra potenza e semplicità d’uso. Ricorda sempre di verificare le tue regole con il comando –list-all e di rendere permanenti solo le configurazioni di cui sei sicuro. Una corretta gestione del firewall non è solo una buona pratica tecnica, ma la prima linea di difesa per proteggere i tuoi dati e i tuoi servizi da accessi non autorizzati.