A partire da CentOS 7.0, l'installazione standard del sistema operativo attiva di default un firewall a protezione della rete: firewalld, successore dello "storico" e più conosciuto iptables. In ambito server, questo strumento di sicurezza può creare qualche grattacapo, dato che impedisce le connessioni ai servizi in esecuzione sul sistema. Fortunatamente, "aprire le porte" su firewalld è piuttosto semplice.

Aprire porte firewall Linux CentOS - guida rapida firewalld - centos firewalld spotlight

Nota: questo articolo è incentrato su firewalld, un pacchetto usato da Linux CentOS. Per la trattazione equivalente su Ubuntu, si veda "Ubuntu, firewall e ufw: guida rapida per aprire le porte e bloccare gli IP". Per la gestione del firewall sotto Windows, si veda "Guida: come aprire le porte su Windows Firewall".

Prerequisiti

Per svolgere questa procedura sono necessari i privilegi di root: per non incappare in inutili problemi, raccomando di accedere direttamente con questo account (i più intraprendenti possono usare un account "regolare" e far precedere i comandi da sudo , ma non ho testato questo scenario).

Disattivare completamente firewalld

Di seguito vedremo come aprire le porte di comunicazione su firewalld. Se siete semplicemente interessati ad arrestare completamente il servizio, l'articolo di riferimento è "Linux CentOS: come disattivare il firewall (Unit iptables.service not loaded)".

I principali comandi di base

  • (Ri)avvio del sevizio: systemctl restart firewalld
  • Arresto del servizio: systemctl stop firewalld
  • Visualizzazione dello stato attuale: systemctl status firewalld

Aprire porte firewall Linux CentOS - guida rapida firewalld - linux centos firewalld status active

  • Avvia automaticamente il firewall al boot del sistema: systemctl enable firewalld
  • Impedisce l'auto-avvio del firewall al boot del sistema: systemctl disable firewalld

"Aprire le porte" con firewalld

Per far sì che le porte dei servizi locali siano raggiungibili dai client è necessario usare un comando simile al seguente:

firewall-cmd --zone=public --add-port=21/tcp --permanent

Il numero di porta va indicata, ovviamente, come valore del parametro --add-port. Nell'esempio precedente è la 21 TCP (server FTP).

Aprire porte firewall Linux CentOS - guida rapida firewalld - linux firewalld add-port

È possibile anche specificare un intervallo di porte. Per aprire le 100 comprese fra 2121 e 2221 (estremi inclusi), lanciare:

firewall-cmd --zone=public --add-port=2121-2221/tcp --permanent

Sebbene non sia quasi mai necessario, con lo stesso comando si regolano anche le porte UDP. Basta specificare, appunto, /udp al posto di /tcp.

"--permanent", oppure "fino al prossimo reboot"

Negli esempi precedenti è stato utilizzato il parametro --permanent. Questo fa sì che la regola venga salvata permanentemente, ma che sia effettiva solo al riavvio del servizio (systemctl restart firewalld) oppure di tutto il sistema.

Se si omette tale parametro, l'impostazione sarà attiva immediatamente, ma andrà persa al primo reboot della macchina o riavvio del servizio.

Visualizzare le regole in uso

Per visualizzare le regole attualmente in uso, impartire firewall-cmd --zone=public --list-all. Le porte aperte con il comando --add-port illustrato in precedenza sono mostrate alla riga ports

Aprire porte firewall Linux CentOS - guida rapida firewalld - linux firewalld list

Ancora più comodo è interrogare il firewall per chiedere espressamente se una determinata porta è aperta o meno. Relativamente a quella usata per gli esempi precedenti, useremo

firewall-cmd --zone=public --query-port=21/tcp

La risposta sarà yes, mentre per ogni altra porta non-aperta verrà mostrato un inequivocabile no

Aprire porte firewall Linux CentOS - guida rapida firewalld - linux firewalld query-port

Eliminare una regola

Per chiudere nuovamente una porta precedentemente aperta basta usare

firewall-cmd --zone=public --remove-port=21/tcp --permanent

Anche qui, il numero di porta va indicata come valore del parametro --remove-port.

--permanent funziona esattamente come illustrato in precedenza: se omesso, la regola sarà rimossa immediatamente ma sarà ripristinata al riavvio. In caso contrario, la rimozione sarà permanente ma non verrà rispettata fino al riavvio del servizio.

Cosa sono le "zone" di firewalld?

Il firewall di CentOS consente di assegnare le interfacce di rete a determinate "zone", di modo da diversificare la raggiungibilità dei servizi a seconda che si tratti di traffico potenzialmente "pericoloso" (come quello proveniente da Internet), oppure "fidato" (quello della LAN).

Per impostazione predefinita, tutte le interfacce fanno parte della zona public. Potete verificarlo impartendo firewall-cmd --get-default-zone.

Per verificare a quale zona appartengano le varie interfacce, basta lanciare firewall-cmd --get-active-zones.

Bloccare completamente un indirizzo IP

Avete identificato qualcuno che tenta di attaccare il vostro sistema? per ignorare ogni suo ulteriore tentativo di connessione basta lanciare:

firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=103.230.84.239 drop" --permanent

L'indirizzo dello scocciatore va, ovviamente, specificato come valore del parametro address. Quello usato nell'esempio proviene dalla blocklist del malware ZeuS.

Come già ampiamente ribadito quando si usa lo switch --permanent, è indispensabile lanciare anche systemctl restart firewalld prima che il blocco venga attivato.

Se cambiate idea, lanciate la stessa chiamata ma con --remove-rich-rule al posto di --add-rich-rule.

Altre informazioni

Lo scopo dell'articolo era sintetizzare i comandi di base per svolgere le operazioni più comuni con il firewall di CentOS. Per un approfondimento relativo all'uso delle zone e tutti gli altri parametri si veda la documentazione ufficiale di RedHat.