Quando si lavora con le reti in Linux, può essere necessario aprire o chiudere una porta di rete. La gestione delle porte è fondamentale per la sicurezza: meno porte aperte ha un sistema, minori sono i potenziali vettori di attacco. Inoltre, se una porta è chiusa, un utente malintenzionato non può raccogliere informazioni sul servizio in esecuzione su quella porta specifica.
Questa guida spiega come aprire o chiudere le porte e come verificare le porte aperte su distribuzioni Linux come Ubuntu/Debian e CentOS/RHEL utilizzando firewall come ufw, firewalld e iptables.
Dimostreremo questo processo su due distribuzioni Linux: Ubuntu 22.04 e CentOS 9, eseguite su un VPS Hostman. Tutti i comandi forniti qui funzionano su qualsiasi distribuzione basata su Debian o RHEL.
Le porte vengono utilizzate per accedere ad applicazioni e protocolli specifici. Ad esempio, un server può ospitare sia un server web che un database — le porte instradano il traffico verso il servizio appropriato. Tecnicamente, una porta di rete è un numero intero non negativo compreso tra 0 e 65535.
Porte riservate (0–1023): utilizzate da protocolli e servizi di rete noti come SSH (porta 22), FTP (porta 21), HTTP (porta 80) e HTTPS (porta 443).
Porte registrate (1024–49151): possono essere utilizzate da applicazioni specifiche per la comunicazione.
Nei sistemi basati su Debian (Ubuntu, Debian, Linux Mint, ecc.), puoi utilizzare ufw (Uncomplicated Firewall).
ufw è preinstallato nella maggior parte delle distribuzioni basate su APT. Per verificare se è installato:
ufw version
Se viene visualizzata una versione, ufw è installato. In caso contrario, installalo con:
apt update && apt -y install ufw
Per impostazione predefinita, ufw è inattivo, il che significa che tutte le porte sono aperte. Puoi verificarne lo stato con:
ufw status
Per attivarlo:
ufw enable
Dovrai confermare con y. Nota che l’attivazione di ufw può interrompere le connessioni SSH attive. Per impostazione predefinita, ufw blocca tutto il traffico in ingresso e consente tutto il traffico in uscita.
Per controllare la politica predefinita:
cat /etc/default/ufw
Per aprire una porta:
ufw allow <port_number>
Esempio — aprire la porta 22 per SSH:
ufw allow 22
Puoi aprire più porte separandole con virgole e specificando il protocollo (tcp o udp):
ufw allow 80,443,8081,8443/tcp
ufw allow 80,443,8081,8443/udp
Invece dei numeri di porta, puoi usare il nome del servizio (definito in /etc/services).
Esempio — aprire Telnet (porta 23):
ufw allow telnet
Nota: Non puoi specificare più nomi di servizio contemporaneamente; ufw restituirà un errore:
Per aprire un intervallo di porte:
ufw allow <start_port>:<end_port>/<protocol>
Esempio:
ufw allow 8000:8080/tcp
Per chiudere una porta:
ufw deny <port_number>
Esempio — chiudere la porta 80:
ufw deny 80
Puoi anche usare il nome del servizio. Esempio — chiudere FTP (porta 21):
ufw deny ftp
Per elencare tutte le porte aperte e chiuse:
ufw status
Oppure per una visualizzazione più dettagliata:
ufw status verbose
Le distribuzioni basate su RHEL (CentOS 7+, RHEL 7+, Fedora 18+, OpenSUSE 15+) utilizzano firewalld come impostazione predefinita.
Verifica se firewalld è installato:
firewall-offline-cmd -V
Se viene visualizzata una versione, firewalld è installato. In caso contrario, installalo:
dnf install firewalld
Per impostazione predefinita, firewalld è disabilitato. Controllane lo stato:
firewall-cmd --state
Per abilitarlo:
systemctl start firewalld
Aprire la porta 8080 per TCP:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
--zone=public
: specifica la zona per la regola.--add-port=8080/tcp
: specifica la porta e il protocollo.--permanent
: salva la regola in modo permanente.Puoi anche aprire un servizio utilizzando il suo nome, ad esempio HTTP (porta 80):
firewall-cmd --zone=public --add-service=http --permanent
Applicare le modifiche:
firewall-cmd --reload
Per chiudere una porta per numero:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Oppure per nome del servizio:
firewall-cmd --zone=public --remove-service=http --permanent
Ricarica sempre dopo le modifiche:
firewall-cmd --reload
Per elencare tutte le porte aperte:
firewall-cmd --list-ports
A differenza di ufw e firewalld, иptables è preinstallato in molte distribuzioni (Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux).
Per aprire la porta 8182 per connessioni in ingresso:
iptables -A INPUT -p tcp --dport 8182 -j ACCEPT
-A INPUT
: aggiunge una regola alla catena INPUT.-p tcp
: specifica il protocollo.--dport 8182
: specifica la porta da aprire.-j ACCEPT
: consente il traffico attraverso la porta.Per le connessioni in uscita:
iptables -A OUTPUT -p tcp --dport 8182 -j ACCEPT
Per aprire un intervallo di porte:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j ACCEPT
Per chiudere una porta:
iptables -A INPUT -p tcp --dport 8182 -j DROP
Chiudere un intervallo di porte:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j DROP
Per impostazione predefinita, le regole di iptables sono valide solo fino al riavvio del server. Per salvarle in modo permanente, installa iptables-persistent:
Per i sistemi basati su APT:
apt update && apt -y install iptables-persistent
Per i sistemi basati su DNF:
dnf -y install iptables-persistent
Salvare le regole attuali:
iptables-save
Le regole verranno caricate automaticamente al successivo riavvio.
Elencare tutte le regole e le porte aperte:
iptables -L -v -n
Elencare solo le regole IPv4:
iptables -S
Elencare le regole IPv6:
ip6tables -S
In questa guida abbiamo mostrato come aprire e chiudere le porte di rete in Linux e come controllare le porte attualmente aperte utilizzando tre strumenti diversi: ufw, firewalld e iptables. Una corretta gestione delle porte riduce il rischio di potenziali attacchi alla rete e aiuta a nascondere le informazioni sui servizi che utilizzano tali porte.